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,
10}
11
12impl<'a> FromReader<'a> for TypeBounds {
13 fn from_reader(reader: &mut BinaryReader<'a>) -> Result<Self> {
14 Ok(match reader.read_u8()? {
15 0x00 => TypeBounds::Eq,
16 x => return reader.invalid_leading_byte(x, "type bound"),
17 })
18 }
19}
20
21#[derive(Clone, Copy, Debug, Eq, PartialEq)]
23pub enum ComponentTypeRef {
24 Module(u32),
28 Func(u32),
32 Value(ComponentValType),
34 Type(TypeBounds, u32),
38 Instance(u32),
42 Component(u32),
46}
47
48impl ComponentTypeRef {
49 pub fn kind(&self) -> ComponentExternalKind {
51 match self {
52 ComponentTypeRef::Module(_) => ComponentExternalKind::Module,
53 ComponentTypeRef::Func(_) => ComponentExternalKind::Func,
54 ComponentTypeRef::Value(_) => ComponentExternalKind::Value,
55 ComponentTypeRef::Type(..) => ComponentExternalKind::Type,
56 ComponentTypeRef::Instance(_) => ComponentExternalKind::Instance,
57 ComponentTypeRef::Component(_) => ComponentExternalKind::Component,
58 }
59 }
60}
61
62impl<'a> FromReader<'a> for ComponentTypeRef {
63 fn from_reader(reader: &mut BinaryReader<'a>) -> Result<Self> {
64 Ok(match reader.read()? {
65 ComponentExternalKind::Module => ComponentTypeRef::Module(reader.read()?),
66 ComponentExternalKind::Func => ComponentTypeRef::Func(reader.read()?),
67 ComponentExternalKind::Value => ComponentTypeRef::Value(reader.read()?),
68 ComponentExternalKind::Type => ComponentTypeRef::Type(reader.read()?, reader.read()?),
69 ComponentExternalKind::Instance => ComponentTypeRef::Instance(reader.read()?),
70 ComponentExternalKind::Component => ComponentTypeRef::Component(reader.read()?),
71 })
72 }
73}
74
75#[derive(Debug, Copy, Clone)]
77pub struct ComponentImport<'a> {
78 pub name: &'a str,
80 pub url: &'a str,
82 pub ty: ComponentTypeRef,
84}
85
86impl<'a> FromReader<'a> for ComponentImport<'a> {
87 fn from_reader(reader: &mut BinaryReader<'a>) -> Result<Self> {
88 Ok(ComponentImport {
89 name: reader.read()?,
90 url: reader.read()?,
91 ty: reader.read()?,
92 })
93 }
94}
95
96pub type ComponentImportSectionReader<'a> = SectionLimited<'a, ComponentImport<'a>>;