Skip to main content

xidl_parser/hir/
declarator.rs

1use super::*;
2use serde::{Deserialize, Serialize};
3
4#[derive(Debug, Serialize, Deserialize, Clone)]
5pub enum Declarator {
6    SimpleDeclarator(SimpleDeclarator),
7    ArrayDeclarator(ArrayDeclarator),
8}
9
10#[derive(Debug, Serialize, Deserialize, Clone)]
11pub struct ArrayDeclarator {
12    pub ident: String,
13    pub len: Vec<PositiveIntConst>,
14}
15
16#[derive(Debug, Serialize, Deserialize, Clone)]
17pub struct SimpleDeclarator(pub String);
18
19impl From<crate::typed_ast::Declarator> for Declarator {
20    fn from(value: crate::typed_ast::Declarator) -> Self {
21        match value {
22            crate::typed_ast::Declarator::SimpleDeclarator(value) => {
23                Declarator::SimpleDeclarator(value.into())
24            }
25            crate::typed_ast::Declarator::ArrayDeclarator(value) => {
26                Declarator::ArrayDeclarator(value.into())
27            }
28        }
29    }
30}
31
32impl From<crate::typed_ast::SimpleDeclarator> for SimpleDeclarator {
33    fn from(value: crate::typed_ast::SimpleDeclarator) -> Self {
34        Self(value.0.0)
35    }
36}
37
38impl From<crate::typed_ast::ArrayDeclarator> for ArrayDeclarator {
39    fn from(value: crate::typed_ast::ArrayDeclarator) -> Self {
40        Self {
41            ident: value.ident.0,
42            len: value.len.into_iter().map(Into::into).collect(),
43        }
44    }
45}