xidl_parser/hir/
declarator.rs1use 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}