Validation

Field Validators

class pystructs.validate.Range(min_val: float | None = None, max_val: float | None = None)[source]

Validate that a numeric value is within a range.

Examples:
>>> version = UInt8(validators=[Range(1, 10)])
class pystructs.validate.OneOf(choices: List[Any])[source]

Validate that a value is one of allowed choices.

Examples:
>>> msg_type = UInt8(validators=[OneOf([1, 2, 3])])
class pystructs.validate.Regex(pattern: str)[source]

Validate that a string matches a regex pattern.

Examples:
>>> name = String(length=10, validators=[Regex(r'^[a-zA-Z]+$')])
class pystructs.validate.BytePattern(pattern: bytes)[source]

Validate that bytes start with a specific pattern.

Examples:
>>> magic = FixedBytes(4, validators=[BytePattern(b'\x89PNG')])

Struct Validators

class pystructs.validate.Consistency(field: str, equals: Expression | None = None, greater_than: Expression | None = None, less_than: Expression | None = None)[source]

Validate consistency between fields.

Compares a field’s value against an expression.

Examples:
>>> class Packet(Struct):
...     class Meta:
...         validators = [
...             Consistency('payload_size', equals=Len('payload')),
...             Consistency('checksum', equals=Checksum('payload', 'crc32')),
...         ]
validate(instance: Struct) None[source]

Validate the struct instance.

Args:

instance: The struct instance to validate

Raises:

ValidationError: If validation fails

class pystructs.validate.Custom(func: Callable[[Struct], bool], message: str = 'Custom validation failed')[source]

Custom validation function.

Examples:
>>> class Packet(Struct):
...     class Meta:
...         validators = [
...             Custom(lambda self: self.version in (1, 2, 3),
...                    "Unsupported version"),
...         ]
validate(instance: Struct) None[source]

Validate the struct instance.

Args:

instance: The struct instance to validate

Raises:

ValidationError: If validation fails