Validation rule builder for type-bridge.
Provides a Pythonic API for defining custom validation rules that are
evaluated by the Rust core engine via a portable JSON DSL.
Example::
from type_bridge.rules import RuleBuilder
rules = (
RuleBuilder()
.required("name-req", entity="person", attribute="name")
.regex("email-fmt", attribute="email", pattern=r"^.+@.+\..+$")
.range("age-bounds", attribute="age", min=0, max=150)
)
json_str = rules.to_json()
RuleBuilder
Fluent builder for constructing validation rules as JSON DSL.
Source code in type_bridge/rules.py
| def __init__(self) -> None:
self._rules: list[dict[str, Any]] = []
|
required
required(rule_id, *, entity, attribute, message=None)
Add a Required rule (scoped to an entity type).
Source code in type_bridge/rules.py
| def required(
self,
rule_id: str,
*,
entity: str,
attribute: str,
message: str | None = None,
) -> Self:
"""Add a Required rule (scoped to an entity type)."""
target = self._target(attribute, entity)
return self._add(rule_id, target, {"type": "Required"}, message)
|
regex
regex(rule_id, *, attribute, pattern, entity=None, message=None)
Add a Regex rule.
Source code in type_bridge/rules.py
| def regex(
self,
rule_id: str,
*,
attribute: str,
pattern: str,
entity: str | None = None,
message: str | None = None,
) -> Self:
"""Add a Regex rule."""
target = self._target(attribute, entity)
return self._add(rule_id, target, {"type": "Regex", "data": {"pattern": pattern}}, message)
|
range
range(rule_id, *, attribute, min=None, max=None, entity=None, message=None)
Add a Range rule.
Source code in type_bridge/rules.py
| def range(
self,
rule_id: str,
*,
attribute: str,
min: float | None = None,
max: float | None = None,
entity: str | None = None,
message: str | None = None,
) -> Self:
"""Add a Range rule."""
target = self._target(attribute, entity)
return self._add(
rule_id, target, {"type": "Range", "data": {"min": min, "max": max}}, message
)
|
values
values(rule_id, *, attribute, allowed, entity=None, message=None)
Add a Values (allowlist) rule.
Source code in type_bridge/rules.py
| def values(
self,
rule_id: str,
*,
attribute: str,
allowed: list[Any],
entity: str | None = None,
message: str | None = None,
) -> Self:
"""Add a Values (allowlist) rule."""
target = self._target(attribute, entity)
return self._add(rule_id, target, {"type": "Values", "data": {"allowed": allowed}}, message)
|
cardinality
cardinality(rule_id, *, entity, attribute, min=0, max=None, message=None)
Add a Cardinality rule (scoped to an entity type).
Source code in type_bridge/rules.py
| def cardinality(
self,
rule_id: str,
*,
entity: str,
attribute: str,
min: int = 0,
max: int | None = None,
message: str | None = None,
) -> Self:
"""Add a Cardinality rule (scoped to an entity type)."""
target = self._target(attribute, entity)
return self._add(
rule_id, target, {"type": "Cardinality", "data": {"min": min, "max": max}}, message
)
|
length
length(rule_id, *, attribute, min=None, max=None, entity=None, message=None)
Add a Length rule.
Source code in type_bridge/rules.py
| def length(
self,
rule_id: str,
*,
attribute: str,
min: int | None = None,
max: int | None = None,
entity: str | None = None,
message: str | None = None,
) -> Self:
"""Add a Length rule."""
target = self._target(attribute, entity)
return self._add(
rule_id, target, {"type": "Length", "data": {"min": min, "max": max}}, message
)
|
to_json
Serialize rules to a portable JSON DSL string.
Source code in type_bridge/rules.py
| def to_json(self) -> str:
"""Serialize rules to a portable JSON DSL string."""
return json.dumps({"rules": self._rules}, indent=2)
|
build
Return rules as a list of dicts.
Source code in type_bridge/rules.py
| def build(self) -> list[dict[str, Any]]:
"""Return rules as a list of dicts."""
return list(self._rules)
|