wat_ast/
named_value_type.rs1use 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}