codama_koroks/
fields_korok.rs1use 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}