pub struct CompiledMigration {
pub surviving_verts: HashSet<Name>,
pub surviving_edges: HashSet<Edge>,
pub vertex_remap: HashMap<Name, Name>,
pub edge_remap: HashMap<Edge, Edge>,
pub resolver: HashMap<(Name, Name), Edge>,
pub hyper_resolver: HashMap<Name, (Name, HashMap<Name, Name>)>,
pub field_transforms: HashMap<Name, Vec<FieldTransform>>,
pub conditional_survival: HashMap<Name, Expr>,
pub expansion_path: HashMap<(Name, Name), Vec<Name>>,
}Expand description
A compiled migration specification (minimal version for panproto-inst).
The full CompiledMigration lives in panproto-mig. This type provides
the subset of fields that wtype_restrict and functor_restrict need.
Fields§
§surviving_verts: HashSet<Name>Vertices that survive the migration.
surviving_edges: HashSet<Edge>Edges that survive the migration.
vertex_remap: HashMap<Name, Name>Vertex remapping: source vertex ID to target vertex ID.
edge_remap: HashMap<Edge, Edge>Edge remapping: source edge to target edge.
resolver: HashMap<(Name, Name), Edge>Binary contraction resolver: (src_anchor, tgt_anchor) to resolved edge.
hyper_resolver: HashMap<Name, (Name, HashMap<Name, Name>)>Hyper-edge contraction resolver.
field_transforms: HashMap<Name, Vec<FieldTransform>>Value-level field transforms applied to surviving nodes’ extra_fields.
Keyed by source vertex anchor. Each entry is a list of field operations applied in order after the node survives and is remapped.
conditional_survival: HashMap<Name, Expr>Value-dependent survival predicates.
During wtype_restrict, after checking that a node’s anchor vertex
is in surviving_verts, the conditional survival predicate (if any)
is evaluated with the node’s extra_fields bound as variables.
If the predicate evaluates to false, the node is dropped despite
its anchor surviving.
This enables value-dependent filtering: “keep this vertex only if attrs.level == 2” (matchAttrs), or “keep this vertex only if class contains ‘u-url’” (matchAttrsAll).
Categorically, this is a refinement of the survival predicate from a structural predicate (vertex set membership) to a value-dependent predicate (vertex set membership AND value predicate).
expansion_path: HashMap<(Name, Name), Vec<Name>>Multi-hop expansion paths for nest-style migrations.
When a direct edge src --> tgt existed in the source schema but
only a multi-hop path src --> i1 --> i2 --> ... --> tgt exists in
the target (as happens after combinators::nest_field), this map
records the sequence of intermediate target anchor ids to insert
when walking the source arc during wtype_restrict. The value is
the intermediate anchors only (endpoints excluded), ordered from
parent-adjacent to child-adjacent.
Dual of the ancestor-contraction mechanism: contraction collapses a path to a direct arc (hoist), expansion fans a direct arc out into a path by materializing fresh view nodes (nest).
Implementations§
Source§impl CompiledMigration
impl CompiledMigration
Sourcepub fn coercion_class(&self) -> CoercionClass
pub fn coercion_class(&self) -> CoercionClass
Compute the composite coercion class of all field transforms in this migration.
Folds over every transform across all vertices using CoercionClass::compose,
starting from Iso (the identity element).
Sourcepub fn add_field_rename(&mut self, vertex: &str, old_key: &str, new_key: &str)
pub fn add_field_rename(&mut self, vertex: &str, old_key: &str, new_key: &str)
Add a field rename transform for a vertex.
After the node survives and its anchor is remapped, the field
old_key in extra_fields is renamed to new_key.
Sourcepub fn add_field_drop(&mut self, vertex: &str, key: &str)
pub fn add_field_drop(&mut self, vertex: &str, key: &str)
Add a field drop transform for a vertex.
The field key is removed from the node’s extra_fields.
Sourcepub fn add_field_default(&mut self, vertex: &str, key: &str, value: Value)
pub fn add_field_default(&mut self, vertex: &str, key: &str, value: Value)
Add a field with a default value for a vertex.
The field key is added to extra_fields with the given value
if it does not already exist.
Sourcepub fn add_field_keep(&mut self, vertex: &str, keys: &[&str])
pub fn add_field_keep(&mut self, vertex: &str, keys: &[&str])
Add a keep-fields transform for a vertex.
Only the specified fields are retained in extra_fields;
all others are dropped.
Sourcepub fn add_field_expr(&mut self, vertex: &str, key: &str, expr: Expr)
pub fn add_field_expr(&mut self, vertex: &str, key: &str, expr: Expr)
Add an expression transform for a field on a vertex.
The expression is evaluated with the field’s current value
bound to the variable named key, and the result replaces
the field value.
Sourcepub fn add_path_transform(
&mut self,
vertex: &str,
path: &[&str],
inner: FieldTransform,
)
pub fn add_path_transform( &mut self, vertex: &str, path: &[&str], inner: FieldTransform, )
Add a path-based field transform for a vertex.
The inner transform is applied at the nested path within the
node’s extra_fields tree, navigating through Value::Unknown
maps at each path segment.
Sourcepub fn add_computed_field(&mut self, vertex: &str, target_key: &str, expr: Expr)
pub fn add_computed_field(&mut self, vertex: &str, target_key: &str, expr: Expr)
Add a computed field transform for a vertex.
The expression is evaluated with all extra_fields (and nested
attrs) bound as variables, and the result is stored in target_key.
Sourcepub fn add_conditional_survival(&mut self, vertex: &str, predicate: Expr)
pub fn add_conditional_survival(&mut self, vertex: &str, predicate: Expr)
Add a conditional survival predicate for a vertex.
The expression is evaluated with the node’s extra_fields bound
as variables. If it returns false, the node is dropped.
Sourcepub fn add_map_references(
&mut self,
vertex: &str,
field: &str,
rename_map: HashMap<String, Option<String>>,
)
pub fn add_map_references( &mut self, vertex: &str, field: &str, rename_map: HashMap<String, Option<String>>, )
Add a reference map transform for a vertex’s field.
String values (or encoded array elements) in the given field
are renamed or removed according to the rename_map.
Sourcepub fn add_case_transform(&mut self, vertex: &str, branches: Vec<CaseBranch>)
pub fn add_case_transform(&mut self, vertex: &str, branches: Vec<CaseBranch>)
Add a case-analysis transform for a vertex.
The branches are evaluated in order; the first matching predicate’s transforms are applied. This is the dependent function space lift of field transforms.
Trait Implementations§
Source§impl Clone for CompiledMigration
impl Clone for CompiledMigration
Source§fn clone(&self) -> CompiledMigration
fn clone(&self) -> CompiledMigration
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 CompiledMigration
impl Debug for CompiledMigration
Source§impl Default for CompiledMigration
impl Default for CompiledMigration
Source§fn default() -> CompiledMigration
fn default() -> CompiledMigration
Source§impl<'de> Deserialize<'de> for CompiledMigration
impl<'de> Deserialize<'de> for CompiledMigration
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 CompiledMigration
impl RefUnwindSafe for CompiledMigration
impl Send for CompiledMigration
impl Sync for CompiledMigration
impl Unpin for CompiledMigration
impl UnsafeUnpin for CompiledMigration
impl UnwindSafe for CompiledMigration
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