Skip to main content

substrate_data/schema/description/
variant_doc.rs

1//! [`VariantDoc`]: an enum's variant as data.
2
3use super::FieldDoc;
4use super::definition_doc::non_empty;
5use super::definitions::Definitions;
6use crate::schema::Variant;
7
8/// A variant: its name, doc, and (in a tagged enum) its fields.
9#[derive(Debug, Clone, PartialEq, crate::Schema)]
10pub struct VariantDoc {
11    /// Its name.
12    pub name: String,
13    /// Its doc comment.
14    pub doc: Option<String>,
15    /// Its fields; none in an enum of names.
16    pub fields: Option<Vec<FieldDoc>>,
17}
18
19impl VariantDoc {
20    /// `v` as data; its fields only when the enum is `tagged`.
21    pub(super) fn of(v: &Variant, tagged: bool, defs: &mut Definitions) -> VariantDoc {
22        VariantDoc {
23            name: v.name.to_owned(),
24            doc: non_empty(v.doc),
25            fields: tagged.then(|| FieldDoc::all(&v.fields, defs)),
26        }
27    }
28}