codama_koroks/
fields_korok.rs

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
use crate::{FieldKorok, KorokTrait};
use codama_errors::{CodamaResult, IteratorCombineErrors};
use codama_nodes::Node;

#[derive(Debug, PartialEq)]
pub struct FieldsKorok<'a> {
    pub ast: &'a syn::Fields,
    pub all: Vec<FieldKorok<'a>>,
    pub node: Option<Node>,
}

impl<'a> FieldsKorok<'a> {
    pub fn parse(ast: &'a syn::Fields) -> CodamaResult<Self> {
        Ok(Self {
            ast,
            all: match ast {
                syn::Fields::Named(f) => f
                    .named
                    .iter()
                    .map(FieldKorok::parse)
                    .collect_and_combine_errors(),
                syn::Fields::Unnamed(f) => f
                    .unnamed
                    .iter()
                    .map(FieldKorok::parse)
                    .collect_and_combine_errors(),
                syn::Fields::Unit => Ok(vec![]),
            }?,
            node: None,
        })
    }
}

impl KorokTrait for FieldsKorok<'_> {
    fn node(&self) -> &Option<Node> {
        &self.node
    }

    fn set_node(&mut self, node: Option<Node>) {
        self.node = node;
    }
}