doku/printers/json/formatting/enums_style.rs
1use crate::*;
2
3/// Determines how enums should get displayed.
4#[derive(Clone, Debug, Serialize, Deserialize)]
5#[serde(deny_unknown_fields)]
6pub enum EnumsStyle {
7 /// Displays enum variants as comments:
8 ///
9 /// ```
10 /// use doku::Document;
11 ///
12 /// #[derive(Document)]
13 /// struct Person {
14 /// favourite_color: Color,
15 /// }
16 ///
17 /// #[derive(Document)]
18 /// enum Color {
19 /// Red,
20 /// Green,
21 /// Blue,
22 /// }
23 ///
24 /// let fmt = doku::json::Formatting {
25 /// enums_style: doku::json::EnumsStyle::Commented,
26 /// ..Default::default()
27 /// };
28 ///
29 /// let doc = doku::to_json_fmt::<Person>(&fmt);
30 ///
31 /// doku::assert_doc!(r#"
32 /// {
33 /// // Possible variants:
34 /// // - "Red"
35 /// // - "Green"
36 /// // - "Blue"
37 /// "favourite_color": "Red"
38 /// }
39 /// "#, doc);
40 /// ```
41 Commented,
42
43 /// Displays enum variants as separated with a pipe:
44 ///
45 /// ```
46 /// use doku::Document;
47 ///
48 /// #[derive(Document)]
49 /// struct Person {
50 /// favourite_color: Color,
51 /// }
52 ///
53 /// #[derive(Document)]
54 /// enum Color {
55 /// Red,
56 /// Green,
57 /// Blue,
58 /// }
59 ///
60 /// let fmt = doku::json::Formatting {
61 /// enums_style: doku::json::EnumsStyle::Separated,
62 /// ..Default::default()
63 /// };
64 ///
65 /// let doc = doku::to_json_fmt::<Person>(&fmt);
66 ///
67 /// doku::assert_doc!(r#"
68 /// {
69 /// "favourite_color": "Red" | "Green" | "Blue"
70 /// }
71 /// "#, doc);
72 /// ```
73 Separated,
74}
75
76impl Default for EnumsStyle {
77 fn default() -> Self {
78 Self::Separated
79 }
80}