pub enum FieldTransform {
RenameField {
old_key: String,
new_key: String,
},
DropField {
key: String,
},
AddField {
key: String,
value: Value,
},
KeepFields {
keys: Vec<String>,
},
ApplyExpr {
key: String,
expr: Expr,
inverse: Option<Expr>,
coercion_class: CoercionClass,
},
PathTransform {
path: Vec<String>,
inner: Box<Self>,
},
ComputeField {
target_key: String,
expr: Expr,
inverse: Option<Expr>,
coercion_class: CoercionClass,
},
Case {
branches: Vec<CaseBranch>,
},
MapReferences {
field: String,
rename_map: HashMap<String, Option<String>>,
},
}Expand description
A value-level transformation on a node’s extra_fields.
These are applied during wtype_restrict after structural operations
(anchor remapping, vertex survival). They enable the instance pipeline
to handle value-dependent migrations (attribute renames, drops, value
transforms) that go beyond pure structural schema changes.
Variants§
RenameField
Rename a field key: old_key → new_key.
DropField
Drop a field by key.
AddField
Add a field with a constant default value.
KeepFields
Keep only the specified fields (all others are dropped).
ApplyExpr
Apply an expression to a field’s value, storing the result.
Fields
coercion_class: CoercionClassRound-trip classification of this transformation.
PathTransform
Apply a field transform at a nested path within the Value tree.
The path is a sequence of string keys navigating through nested
Value::Unknown (object) structures. The inner transform is applied
to the extra_fields map at the resolved path.
This generalizes flat field transforms to operate on the full
Value algebra. A PathTransform with an empty path is equivalent
to applying the inner transform directly.
Categorically, this is the action of a path functor on the endomorphism algebra of field transforms; it lifts a transform from a leaf to an inner node of the Value tree.
Fields
ComputeField
Compute a field value from an expression with access to the full fiber over the parent vertex.
Unlike ApplyExpr which binds a single field, ComputeField binds
all extra_fields, nested attrs, AND scalar values from immediate
child nodes (the dependent-sum projection) as variables, evaluates
the expression, and stores the result in the target field.
This means ComputeField can access any scalar property of the
parent object, whether it was parsed as an extra field or as a
schema-defined child vertex (e.g., a string field with a "format"
annotation like "at-uri"). Computed results are always written to
extra_fields, making them available to subsequent transforms and
to to_json serialization (where extra_fields overwrite child
values with the same key).
Computed fields are classified by coercion_class:
Iso: the computation is invertible viainverse; the lens lawPutGetholds for modifications to the computed field.Opaque: no inverse exists; the complement stores the entire original value. Modifications to the computed field in the view are not independently round-trippable. This is analogous to SQL computed columns: the lens law holds for the independent (non-derived) components of the view, and the derived components are re-computed deterministically.
This enables template name computation like
target_key: “name”,
expr: (concat "h" (int_to_str attrs.level))
which computes “h1”, “h2”, etc. from the level attribute, as well
as AT-URI decomposition where the repo field is a schema-defined
child vertex.
Fields
coercion_class: CoercionClassRound-trip classification of this transformation.
Case
Case analysis on node values: the coproduct eliminator for the field transform algebra.
Each branch is a (predicate, transforms) pair. Branches are evaluated
in order with the node’s extra_fields (and nested attrs.* keys)
bound as expression variables. The first branch whose predicate
evaluates to true has its transforms applied. If no branch matches,
the node passes through unchanged.
This is the dependent function space lift of field transforms:
Π(x : Value). FieldTransform, a transform that depends on the
runtime value of the node, not just its schema vertex. It composes
naturally with all other transform variants (including nesting
inside PathTransform).
Use cases:
matchAttrs: “iflevel == 1then rename toh1, iflevel == 2then rename toh2”, where each heading level is a branch.- Conditional attribute injection: “if
list == 'ordered'then addtype: ol, else addtype: ul”.
Fields
branches: Vec<CaseBranch>Ordered branches: first matching predicate wins.
MapReferences
Update string values that reference vertex names.
When vertices are renamed or dropped during migration, string fields that reference those vertices by name must be updated to reflect the new names. This is the functorial action of the vertex rename map on the name-reference algebra.
For each field value:
- If the value is a
Value::Strmatching a key inrename_map, it is replaced with the mapped value (or removed if mapped to None). - If the value is a
Value::List, each string element is checked and the list is rebuilt with renames applied and drops removed.
This handles parent reference arrays, cross-annotation links, and any other string fields that carry vertex identity.
Implementations§
Source§impl FieldTransform
impl FieldTransform
Sourcepub fn coercion_class(&self) -> CoercionClass
pub fn coercion_class(&self) -> CoercionClass
Compute the coercion class of this field transform.
The class describes the round-trip properties: whether the transform
is lossless (Iso), has a left inverse (Retraction), is a
deterministic derivation (Projection), or has no structural
round-trip property (Opaque).
Trait Implementations§
Source§impl Clone for FieldTransform
impl Clone for FieldTransform
Source§fn clone(&self) -> FieldTransform
fn clone(&self) -> FieldTransform
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for FieldTransform
impl Debug for FieldTransform
Source§impl<'de> Deserialize<'de> for FieldTransform
impl<'de> Deserialize<'de> for FieldTransform
Source§fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
Auto Trait Implementations§
impl Freeze for FieldTransform
impl RefUnwindSafe for FieldTransform
impl Send for FieldTransform
impl Sync for FieldTransform
impl Unpin for FieldTransform
impl UnsafeUnpin for FieldTransform
impl UnwindSafe for FieldTransform
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> DeserializeOwned for Twhere
T: for<'de> Deserialize<'de>,
Source§impl<D> OwoColorize for D
impl<D> OwoColorize for D
Source§fn fg<C>(&self) -> FgColorDisplay<'_, C, Self>where
C: Color,
fn fg<C>(&self) -> FgColorDisplay<'_, C, Self>where
C: Color,
Source§fn bg<C>(&self) -> BgColorDisplay<'_, C, Self>where
C: Color,
fn bg<C>(&self) -> BgColorDisplay<'_, C, Self>where
C: Color,
Source§fn black(&self) -> FgColorDisplay<'_, Black, Self>
fn black(&self) -> FgColorDisplay<'_, Black, Self>
Source§fn on_black(&self) -> BgColorDisplay<'_, Black, Self>
fn on_black(&self) -> BgColorDisplay<'_, Black, Self>
Source§fn red(&self) -> FgColorDisplay<'_, Red, Self>
fn red(&self) -> FgColorDisplay<'_, Red, Self>
Source§fn on_red(&self) -> BgColorDisplay<'_, Red, Self>
fn on_red(&self) -> BgColorDisplay<'_, Red, Self>
Source§fn green(&self) -> FgColorDisplay<'_, Green, Self>
fn green(&self) -> FgColorDisplay<'_, Green, Self>
Source§fn on_green(&self) -> BgColorDisplay<'_, Green, Self>
fn on_green(&self) -> BgColorDisplay<'_, Green, Self>
Source§fn yellow(&self) -> FgColorDisplay<'_, Yellow, Self>
fn yellow(&self) -> FgColorDisplay<'_, Yellow, Self>
Source§fn on_yellow(&self) -> BgColorDisplay<'_, Yellow, Self>
fn on_yellow(&self) -> BgColorDisplay<'_, Yellow, Self>
Source§fn blue(&self) -> FgColorDisplay<'_, Blue, Self>
fn blue(&self) -> FgColorDisplay<'_, Blue, Self>
Source§fn on_blue(&self) -> BgColorDisplay<'_, Blue, Self>
fn on_blue(&self) -> BgColorDisplay<'_, Blue, Self>
Source§fn magenta(&self) -> FgColorDisplay<'_, Magenta, Self>
fn magenta(&self) -> FgColorDisplay<'_, Magenta, Self>
Source§fn on_magenta(&self) -> BgColorDisplay<'_, Magenta, Self>
fn on_magenta(&self) -> BgColorDisplay<'_, Magenta, Self>
Source§fn purple(&self) -> FgColorDisplay<'_, Magenta, Self>
fn purple(&self) -> FgColorDisplay<'_, Magenta, Self>
Source§fn on_purple(&self) -> BgColorDisplay<'_, Magenta, Self>
fn on_purple(&self) -> BgColorDisplay<'_, Magenta, Self>
Source§fn cyan(&self) -> FgColorDisplay<'_, Cyan, Self>
fn cyan(&self) -> FgColorDisplay<'_, Cyan, Self>
Source§fn on_cyan(&self) -> BgColorDisplay<'_, Cyan, Self>
fn on_cyan(&self) -> BgColorDisplay<'_, Cyan, Self>
Source§fn white(&self) -> FgColorDisplay<'_, White, Self>
fn white(&self) -> FgColorDisplay<'_, White, Self>
Source§fn on_white(&self) -> BgColorDisplay<'_, White, Self>
fn on_white(&self) -> BgColorDisplay<'_, White, Self>
Source§fn default_color(&self) -> FgColorDisplay<'_, Default, Self>
fn default_color(&self) -> FgColorDisplay<'_, Default, Self>
Source§fn on_default_color(&self) -> BgColorDisplay<'_, Default, Self>
fn on_default_color(&self) -> BgColorDisplay<'_, Default, Self>
Source§fn bright_black(&self) -> FgColorDisplay<'_, BrightBlack, Self>
fn bright_black(&self) -> FgColorDisplay<'_, BrightBlack, Self>
Source§fn on_bright_black(&self) -> BgColorDisplay<'_, BrightBlack, Self>
fn on_bright_black(&self) -> BgColorDisplay<'_, BrightBlack, Self>
Source§fn bright_red(&self) -> FgColorDisplay<'_, BrightRed, Self>
fn bright_red(&self) -> FgColorDisplay<'_, BrightRed, Self>
Source§fn on_bright_red(&self) -> BgColorDisplay<'_, BrightRed, Self>
fn on_bright_red(&self) -> BgColorDisplay<'_, BrightRed, Self>
Source§fn bright_green(&self) -> FgColorDisplay<'_, BrightGreen, Self>
fn bright_green(&self) -> FgColorDisplay<'_, BrightGreen, Self>
Source§fn on_bright_green(&self) -> BgColorDisplay<'_, BrightGreen, Self>
fn on_bright_green(&self) -> BgColorDisplay<'_, BrightGreen, Self>
Source§fn bright_yellow(&self) -> FgColorDisplay<'_, BrightYellow, Self>
fn bright_yellow(&self) -> FgColorDisplay<'_, BrightYellow, Self>
Source§fn on_bright_yellow(&self) -> BgColorDisplay<'_, BrightYellow, Self>
fn on_bright_yellow(&self) -> BgColorDisplay<'_, BrightYellow, Self>
Source§fn bright_blue(&self) -> FgColorDisplay<'_, BrightBlue, Self>
fn bright_blue(&self) -> FgColorDisplay<'_, BrightBlue, Self>
Source§fn on_bright_blue(&self) -> BgColorDisplay<'_, BrightBlue, Self>
fn on_bright_blue(&self) -> BgColorDisplay<'_, BrightBlue, Self>
Source§fn bright_magenta(&self) -> FgColorDisplay<'_, BrightMagenta, Self>
fn bright_magenta(&self) -> FgColorDisplay<'_, BrightMagenta, Self>
Source§fn on_bright_magenta(&self) -> BgColorDisplay<'_, BrightMagenta, Self>
fn on_bright_magenta(&self) -> BgColorDisplay<'_, BrightMagenta, Self>
Source§fn bright_purple(&self) -> FgColorDisplay<'_, BrightMagenta, Self>
fn bright_purple(&self) -> FgColorDisplay<'_, BrightMagenta, Self>
Source§fn on_bright_purple(&self) -> BgColorDisplay<'_, BrightMagenta, Self>
fn on_bright_purple(&self) -> BgColorDisplay<'_, BrightMagenta, Self>
Source§fn bright_cyan(&self) -> FgColorDisplay<'_, BrightCyan, Self>
fn bright_cyan(&self) -> FgColorDisplay<'_, BrightCyan, Self>
Source§fn on_bright_cyan(&self) -> BgColorDisplay<'_, BrightCyan, Self>
fn on_bright_cyan(&self) -> BgColorDisplay<'_, BrightCyan, Self>
Source§fn bright_white(&self) -> FgColorDisplay<'_, BrightWhite, Self>
fn bright_white(&self) -> FgColorDisplay<'_, BrightWhite, Self>
Source§fn on_bright_white(&self) -> BgColorDisplay<'_, BrightWhite, Self>
fn on_bright_white(&self) -> BgColorDisplay<'_, BrightWhite, Self>
Source§fn bold(&self) -> BoldDisplay<'_, Self>
fn bold(&self) -> BoldDisplay<'_, Self>
Source§fn dimmed(&self) -> DimDisplay<'_, Self>
fn dimmed(&self) -> DimDisplay<'_, Self>
Source§fn italic(&self) -> ItalicDisplay<'_, Self>
fn italic(&self) -> ItalicDisplay<'_, Self>
Source§fn underline(&self) -> UnderlineDisplay<'_, Self>
fn underline(&self) -> UnderlineDisplay<'_, Self>
Source§fn blink(&self) -> BlinkDisplay<'_, Self>
fn blink(&self) -> BlinkDisplay<'_, Self>
Source§fn blink_fast(&self) -> BlinkFastDisplay<'_, Self>
fn blink_fast(&self) -> BlinkFastDisplay<'_, Self>
Source§fn reversed(&self) -> ReversedDisplay<'_, Self>
fn reversed(&self) -> ReversedDisplay<'_, Self>
Source§fn strikethrough(&self) -> StrikeThroughDisplay<'_, Self>
fn strikethrough(&self) -> StrikeThroughDisplay<'_, Self>
Source§fn color<Color>(&self, color: Color) -> FgDynColorDisplay<'_, Color, Self>where
Color: DynColor,
fn color<Color>(&self, color: Color) -> FgDynColorDisplay<'_, Color, Self>where
Color: DynColor,
OwoColorize::fg or
a color-specific method, such as OwoColorize::green, Read moreSource§fn on_color<Color>(&self, color: Color) -> BgDynColorDisplay<'_, Color, Self>where
Color: DynColor,
fn on_color<Color>(&self, color: Color) -> BgDynColorDisplay<'_, Color, Self>where
Color: DynColor,
OwoColorize::bg or
a color-specific method, such as OwoColorize::on_yellow, Read more