/// Represents the kinds of outer aliasable items in a component. #[derive(Clone, Copy, Debug, Eq, PartialEq)] pubenum ComponentOuterAliasKind { /// The alias is to a core module.
CoreModule, /// The alias is to a core type.
CoreType, /// The alias is to a type. Type, /// The alias is to a component.
Component,
}
/// An encoder for the alias section of WebAssembly component. /// /// # Example /// /// ```rust /// use wasm_encoder::{Component, Alias, ComponentAliasSection, ComponentExportKind, ComponentOuterAliasKind}; /// /// let mut aliases = ComponentAliasSection::new(); /// aliases.alias(Alias::InstanceExport { instance: 0, kind: ComponentExportKind::Func, name: "f" }); /// aliases.alias(Alias::Outer { count: 0, kind: ComponentOuterAliasKind::Type, index: 1 }); /// /// let mut component = Component::new(); /// component.section(&aliases); /// /// let bytes = component.finish(); /// ``` #[derive(Clone, Debug, Default)] pubstruct ComponentAliasSection {
bytes: Vec<u8>,
num_added: u32,
}
/// Different forms of aliases that can be inserted into a /// [`ComponentAliasSection`]. #[derive(Copy, Clone, Debug)] pubenum Alias<'a> { /// An alias of a component instance export.
InstanceExport { /// The index of the component instance that's being aliased from.
instance: u32, /// The kind of item that's being extracted from the component /// instance.
kind: ComponentExportKind, /// The name of the export that's being aliased.
name: &'a str,
}, /// Same as `InstanceExport`, but for core instances. #[allow(missing_docs)]
CoreInstanceExport {
instance: u32,
kind: ExportKind,
name: &'a str,
}, /// Aliasing an item from an outer component.
Outer { /// The kind of item being aliased, either a type or a component.
kind: ComponentOuterAliasKind, /// Number of levels "up" to go to lookup the index within. Level 0 is /// the current scope and level 1 is the enclosing scope, and so on.
count: u32, /// The index of the item to alias within the scope referenced by /// `count`.
index: u32,
},
}
impl ComponentAliasSection { /// Create a new alias section encoder. pubfn new() -> Self { Self::default()
}
/// The number of aliases in the section. pubfn len(&self) -> u32 { self.num_added
}
/// Determines if the section is empty. pubfn is_empty(&self) -> bool { self.num_added == 0
}
/// Define an alias to a component instance's export. pubfn alias(&mutself, alias: Alias<'_>) -> &mut Self {
alias.encode(&mutself.bytes); self.num_added += 1; self
}
}
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.