codama_koroks/
fields_korok.rs

1use crate::{FieldKorok, KorokTrait};
2use codama_errors::{CodamaResult, IteratorCombineErrors};
3use codama_nodes::Node;
4
5#[derive(Debug, PartialEq)]
6pub struct FieldsKorok<'a> {
7    pub ast: &'a syn::Fields,
8    pub all: Vec<FieldKorok<'a>>,
9    pub node: Option<Node>,
10}
11
12impl<'a> FieldsKorok<'a> {
13    pub fn parse(ast: &'a syn::Fields) -> CodamaResult<Self> {
14        Ok(Self {
15            ast,
16            all: match ast {
17                syn::Fields::Named(f) => f
18                    .named
19                    .iter()
20                    .map(FieldKorok::parse)
21                    .collect_and_combine_errors(),
22                syn::Fields::Unnamed(f) => f
23                    .unnamed
24                    .iter()
25                    .map(FieldKorok::parse)
26                    .collect_and_combine_errors(),
27                syn::Fields::Unit => Ok(vec![]),
28            }?,
29            node: None,
30        })
31    }
32}
33
34impl KorokTrait for FieldsKorok<'_> {
35    fn node(&self) -> &Option<Node> {
36        &self.node
37    }
38
39    fn set_node(&mut self, node: Option<Node>) {
40        self.node = node;
41    }
42}