doku/printers/json/
print_struct.rs

1use super::*;
2
3impl<'ty> Ctxt<'_, 'ty, '_> {
4    pub(super) fn print_struct(
5        &mut self,
6        fields: &'ty Fields,
7        transparent: bool,
8        variant: Option<&'ty Variant>,
9    ) {
10        if transparent {
11            self.print_transparent_struct(fields);
12        } else {
13            self.print_fields(fields, variant);
14        }
15    }
16
17    fn print_transparent_struct(&mut self, fields: &'ty Fields) {
18        let fields: Vec<_> = match fields {
19            Fields::Named { fields } => {
20                fields.iter().map(|(_, field)| field).collect()
21            }
22            Fields::Unnamed { fields } => fields.iter().collect(),
23            Fields::Unit => Default::default(),
24        };
25
26        // Serde already covers this case for us, so hopefully this will
27        // never be triggered
28        if fields.len() != 1 {
29            panic!("Found a struct with invalid number of transparent fields");
30        }
31
32        let example = self.example();
33
34        self.nested()
35            .with_ty(&fields[0].ty)
36            .with_example(example)
37            .print();
38    }
39}