wat_ast/
named_value_type.rs

1use wast::parser::{Parse, Parser, Result};
2
3use crate::{AsAtoms, Atom, Expr, SymbolicIndex, ValueType};
4
5#[derive(Debug, Clone, PartialEq, Eq)]
6pub struct NamedValueType {
7    idx:        SymbolicIndex,
8    value_type: ValueType,
9}
10
11impl NamedValueType {
12    pub fn new(idx: SymbolicIndex, value_type: ValueType) -> Self {
13        Self { idx, value_type }
14    }
15
16    pub fn as_exprs(&self) -> Vec<Expr> {
17        self.as_atoms().into_iter().map(|a| Expr::Atom(a)).collect()
18    }
19}
20
21impl AsAtoms for NamedValueType {
22    fn as_atoms(&self) -> Vec<Atom> {
23        vec![
24            Atom::new(self.idx.to_string()),
25            Atom::new(self.value_type.to_string()),
26        ]
27    }
28}
29
30impl Parse<'_> for NamedValueType {
31    fn parse(parser: Parser<'_>) -> Result<Self> {
32        let idx = parser.parse::<SymbolicIndex>()?;
33        let value_type = parser.parse::<ValueType>()?;
34
35        Ok(Self { idx, value_type })
36    }
37}