Skip to main content

CompiledMigration

Struct CompiledMigration 

Source
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

Source

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).

Source

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.

Source

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.

Source

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.

Source

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.

Source

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.

Source

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.

Source

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.

Source

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.

Source

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.

Source

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

Source§

fn clone(&self) -> CompiledMigration

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for CompiledMigration

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Default for CompiledMigration

Source§

fn default() -> CompiledMigration

Returns the “default value” for a type. Read more
Source§

impl<'de> Deserialize<'de> for CompiledMigration

Source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
Source§

impl Serialize for CompiledMigration

Source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where __S: Serializer,

Serialize this value into the given Serde serializer. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> DeserializeOwned for T
where T: for<'de> Deserialize<'de>,

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<D> OwoColorize for D

Source§

fn fg<C>(&self) -> FgColorDisplay<'_, C, Self>
where C: Color,

Set the foreground color generically Read more
Source§

fn bg<C>(&self) -> BgColorDisplay<'_, C, Self>
where C: Color,

Set the background color generically. Read more
Source§

fn black(&self) -> FgColorDisplay<'_, Black, Self>

Change the foreground color to black
Source§

fn on_black(&self) -> BgColorDisplay<'_, Black, Self>

Change the background color to black
Source§

fn red(&self) -> FgColorDisplay<'_, Red, Self>

Change the foreground color to red
Source§

fn on_red(&self) -> BgColorDisplay<'_, Red, Self>

Change the background color to red
Source§

fn green(&self) -> FgColorDisplay<'_, Green, Self>

Change the foreground color to green
Source§

fn on_green(&self) -> BgColorDisplay<'_, Green, Self>

Change the background color to green
Source§

fn yellow(&self) -> FgColorDisplay<'_, Yellow, Self>

Change the foreground color to yellow
Source§

fn on_yellow(&self) -> BgColorDisplay<'_, Yellow, Self>

Change the background color to yellow
Source§

fn blue(&self) -> FgColorDisplay<'_, Blue, Self>

Change the foreground color to blue
Source§

fn on_blue(&self) -> BgColorDisplay<'_, Blue, Self>

Change the background color to blue
Source§

fn magenta(&self) -> FgColorDisplay<'_, Magenta, Self>

Change the foreground color to magenta
Source§

fn on_magenta(&self) -> BgColorDisplay<'_, Magenta, Self>

Change the background color to magenta
Source§

fn purple(&self) -> FgColorDisplay<'_, Magenta, Self>

Change the foreground color to purple
Source§

fn on_purple(&self) -> BgColorDisplay<'_, Magenta, Self>

Change the background color to purple
Source§

fn cyan(&self) -> FgColorDisplay<'_, Cyan, Self>

Change the foreground color to cyan
Source§

fn on_cyan(&self) -> BgColorDisplay<'_, Cyan, Self>

Change the background color to cyan
Source§

fn white(&self) -> FgColorDisplay<'_, White, Self>

Change the foreground color to white
Source§

fn on_white(&self) -> BgColorDisplay<'_, White, Self>

Change the background color to white
Source§

fn default_color(&self) -> FgColorDisplay<'_, Default, Self>

Change the foreground color to the terminal default
Source§

fn on_default_color(&self) -> BgColorDisplay<'_, Default, Self>

Change the background color to the terminal default
Source§

fn bright_black(&self) -> FgColorDisplay<'_, BrightBlack, Self>

Change the foreground color to bright black
Source§

fn on_bright_black(&self) -> BgColorDisplay<'_, BrightBlack, Self>

Change the background color to bright black
Source§

fn bright_red(&self) -> FgColorDisplay<'_, BrightRed, Self>

Change the foreground color to bright red
Source§

fn on_bright_red(&self) -> BgColorDisplay<'_, BrightRed, Self>

Change the background color to bright red
Source§

fn bright_green(&self) -> FgColorDisplay<'_, BrightGreen, Self>

Change the foreground color to bright green
Source§

fn on_bright_green(&self) -> BgColorDisplay<'_, BrightGreen, Self>

Change the background color to bright green
Source§

fn bright_yellow(&self) -> FgColorDisplay<'_, BrightYellow, Self>

Change the foreground color to bright yellow
Source§

fn on_bright_yellow(&self) -> BgColorDisplay<'_, BrightYellow, Self>

Change the background color to bright yellow
Source§

fn bright_blue(&self) -> FgColorDisplay<'_, BrightBlue, Self>

Change the foreground color to bright blue
Source§

fn on_bright_blue(&self) -> BgColorDisplay<'_, BrightBlue, Self>

Change the background color to bright blue
Source§

fn bright_magenta(&self) -> FgColorDisplay<'_, BrightMagenta, Self>

Change the foreground color to bright magenta
Source§

fn on_bright_magenta(&self) -> BgColorDisplay<'_, BrightMagenta, Self>

Change the background color to bright magenta
Source§

fn bright_purple(&self) -> FgColorDisplay<'_, BrightMagenta, Self>

Change the foreground color to bright purple
Source§

fn on_bright_purple(&self) -> BgColorDisplay<'_, BrightMagenta, Self>

Change the background color to bright purple
Source§

fn bright_cyan(&self) -> FgColorDisplay<'_, BrightCyan, Self>

Change the foreground color to bright cyan
Source§

fn on_bright_cyan(&self) -> BgColorDisplay<'_, BrightCyan, Self>

Change the background color to bright cyan
Source§

fn bright_white(&self) -> FgColorDisplay<'_, BrightWhite, Self>

Change the foreground color to bright white
Source§

fn on_bright_white(&self) -> BgColorDisplay<'_, BrightWhite, Self>

Change the background color to bright white
Source§

fn bold(&self) -> BoldDisplay<'_, Self>

Make the text bold
Source§

fn dimmed(&self) -> DimDisplay<'_, Self>

Make the text dim
Source§

fn italic(&self) -> ItalicDisplay<'_, Self>

Make the text italicized
Source§

fn underline(&self) -> UnderlineDisplay<'_, Self>

Make the text underlined
Make the text blink
Make the text blink (but fast!)
Source§

fn reversed(&self) -> ReversedDisplay<'_, Self>

Swap the foreground and background colors
Source§

fn hidden(&self) -> HiddenDisplay<'_, Self>

Hide the text
Source§

fn strikethrough(&self) -> StrikeThroughDisplay<'_, Self>

Cross out the text
Source§

fn color<Color>(&self, color: Color) -> FgDynColorDisplay<'_, Color, Self>
where Color: DynColor,

Set the foreground color at runtime. Only use if you do not know which color will be used at compile-time. If the color is constant, use either OwoColorize::fg or a color-specific method, such as OwoColorize::green, Read more
Source§

fn on_color<Color>(&self, color: Color) -> BgDynColorDisplay<'_, Color, Self>
where Color: DynColor,

Set the background color at runtime. Only use if you do not know what color to use at compile-time. If the color is constant, use either OwoColorize::bg or a color-specific method, such as OwoColorize::on_yellow, Read more
Source§

fn fg_rgb<const R: u8, const G: u8, const B: u8>( &self, ) -> FgColorDisplay<'_, CustomColor<R, G, B>, Self>

Set the foreground color to a specific RGB value.
Source§

fn bg_rgb<const R: u8, const G: u8, const B: u8>( &self, ) -> BgColorDisplay<'_, CustomColor<R, G, B>, Self>

Set the background color to a specific RGB value.
Source§

fn truecolor(&self, r: u8, g: u8, b: u8) -> FgDynColorDisplay<'_, Rgb, Self>

Sets the foreground color to an RGB value.
Source§

fn on_truecolor(&self, r: u8, g: u8, b: u8) -> BgDynColorDisplay<'_, Rgb, Self>

Sets the background color to an RGB value.
Source§

fn style(&self, style: Style) -> Styled<&Self>

Apply a runtime-determined style
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.