# 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"
```