# Component Imports SIP: Proposed V2 Manifest Changes ```rust /// Component import #[derive(Clone, Debug, Serialize, Deserialize)] #[serde(deny_unknown_fields)] pub struct ComponentImport { /// `component = ...` pub component: ComponentSpec, /// `export = "x-y"` OR `export = "x:y/z"` pub export: Option<ExportKey>, } pub enum ImportSource { } /// Component import key (e.g. "foo-bar" or "foo:bar/baz@0.1.0") #[derive(Clone, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)] #[serde(deny_unknown_fields, untagged)] pub enum ImportKey { /// "foo:bar/baz@0.1.0" InterfaceId(String), /// "foo-bar" KebabId(KebabId), } /// Component export key (e.g. "foo-bar" or "foo:bar/baz@0.1.0") #[derive(Clone, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)] #[serde(deny_unknown_fields, untagged)] pub enum ExportKey { /// "foo:bar/baz@0.1.0" InterfaceId(String), /// "foo-bar" KebabId(KebabId), } /// Component definition #[derive(Clone, Debug, Serialize, Deserialize)] #[serde(deny_unknown_fields)] pub struct Component { ... /// Component imports #[serde(default, skip_serializing_if = "Map::is_empty")] pub imports: Map<ImportKey, ComponentImport>, } ``` # Example ```toml [component."service"] source = "http-auth-middlware.wasm" [component."service".imports."wasi:http/incoming-handler"] component = { source = "http-auth-middleware.wasm" } export = "wasi:http/incoming-handler" [component."service".imports."wasi:http/incoming-handler".component] source = "..." ``` # Normalization ```toml [component."calculator"] source = "calculator.wasm" ```