tinywasm_wasmparser/readers/component/
imports.rs1use crate::{
2 BinaryReader, ComponentExternalKind, ComponentValType, FromReader, Result, SectionLimited,
3};
4
5#[derive(Clone, Copy, Debug, Eq, PartialEq)]
7pub enum TypeBounds {
8 Eq(u32),
10 SubResource,
12}
13
14impl<'a> FromReader<'a> for TypeBounds {
15 fn from_reader(reader: &mut BinaryReader<'a>) -> Result<Self> {
16 Ok(match reader.read_u8()? {
17 0x00 => TypeBounds::Eq(reader.read()?),
18 0x01 => TypeBounds::SubResource,
19 x => return reader.invalid_leading_byte(x, "type bound"),
20 })
21 }
22}
23
24#[derive(Clone, Copy, Debug, Eq, PartialEq)]
26pub enum ComponentTypeRef {
27 Module(u32),
31 Func(u32),
35 Value(ComponentValType),
37 Type(TypeBounds),
41 Instance(u32),
45 Component(u32),
49}
50
51impl ComponentTypeRef {
52 pub fn kind(&self) -> ComponentExternalKind {
54 match self {
55 ComponentTypeRef::Module(_) => ComponentExternalKind::Module,
56 ComponentTypeRef::Func(_) => ComponentExternalKind::Func,
57 ComponentTypeRef::Value(_) => ComponentExternalKind::Value,
58 ComponentTypeRef::Type(..) => ComponentExternalKind::Type,
59 ComponentTypeRef::Instance(_) => ComponentExternalKind::Instance,
60 ComponentTypeRef::Component(_) => ComponentExternalKind::Component,
61 }
62 }
63}
64
65impl<'a> FromReader<'a> for ComponentTypeRef {
66 fn from_reader(reader: &mut BinaryReader<'a>) -> Result<Self> {
67 Ok(match reader.read()? {
68 ComponentExternalKind::Module => ComponentTypeRef::Module(reader.read()?),
69 ComponentExternalKind::Func => ComponentTypeRef::Func(reader.read()?),
70 ComponentExternalKind::Value => ComponentTypeRef::Value(reader.read()?),
71 ComponentExternalKind::Type => ComponentTypeRef::Type(reader.read()?),
72 ComponentExternalKind::Instance => ComponentTypeRef::Instance(reader.read()?),
73 ComponentExternalKind::Component => ComponentTypeRef::Component(reader.read()?),
74 })
75 }
76}
77
78#[derive(Debug, Copy, Clone)]
80pub struct ComponentImport<'a> {
81 pub name: ComponentImportName<'a>,
83 pub ty: ComponentTypeRef,
85}
86
87impl<'a> FromReader<'a> for ComponentImport<'a> {
88 fn from_reader(reader: &mut BinaryReader<'a>) -> Result<Self> {
89 Ok(ComponentImport {
90 name: reader.read()?,
91 ty: reader.read()?,
92 })
93 }
94}
95
96pub type ComponentImportSectionReader<'a> = SectionLimited<'a, ComponentImport<'a>>;
110
111#[derive(Debug, Copy, Clone)]
113#[allow(missing_docs)]
114pub struct ComponentImportName<'a>(pub &'a str);
115
116impl<'a> FromReader<'a> for ComponentImportName<'a> {
117 fn from_reader(reader: &mut BinaryReader<'a>) -> Result<Self> {
118 match reader.read_u8()? {
119 0x00 => {}
120 0x01 => {}
125 x => return reader.invalid_leading_byte(x, "import name"),
126 }
127 Ok(ComponentImportName(reader.read_string()?))
128 }
129}