rstgen/csharp/
modifier.rs1use std::collections::BTreeSet;
4use {Custom, Element, IntoTokens, Tokens};
5
6#[derive(Debug, PartialEq, Eq, PartialOrd, Ord, Clone, Hash)]
8pub enum Modifier {
9 Public,
11 Private,
13 Internal,
15 Protected,
17 Abstract,
19 Async,
21 Const,
23 Event,
25 Extern,
27 New,
29 Override,
31 Partial,
33 Readonly,
35 Sealed,
37 Static,
39 Unsafe,
41 Virtual,
43 Volatile,
45}
46
47impl Modifier {
48 pub fn name(&self) -> &'static str {
50 use self::Modifier::*;
51
52 match *self {
53 Public => "public",
54 Private => "private",
55 Internal => "internal",
56 Protected => "protected",
57 Abstract => "abstract",
58 Async => "async",
59 Const => "const",
60 Event => "event",
61 Extern => "extern",
62 New => "new",
63 Override => "override",
64 Partial => "partial",
65 Readonly => "readonly",
66 Sealed => "sealed",
67 Static => "static",
68 Unsafe => "unsafe",
69 Virtual => "virtual",
70 Volatile => "volatile",
71 }
72 }
73}
74
75impl<'el, C: Custom> From<Modifier> for Element<'el, C> {
76 fn from(value: Modifier) -> Self {
77 value.name().into()
78 }
79}
80
81impl<'el, C: Custom> IntoTokens<'el, C> for Vec<Modifier> {
82 fn into_tokens(self) -> Tokens<'el, C> {
83 self.into_iter()
84 .collect::<BTreeSet<_>>()
85 .into_iter()
86 .map(Element::from)
87 .collect()
88 }
89}
90
91#[cfg(test)]
92mod tests {
93 use super::Modifier;
94 use csharp::Csharp;
95 use tokens::Tokens;
96
97 #[test]
98 fn test_vec() {
99 use self::Modifier::*;
100 let el: Tokens<Csharp> = toks![Public, Static].join_spacing();
101 let s = el.to_string();
102 let out = s.as_ref().map(|s| s.as_str());
103 assert_eq!(Ok("public static"), out);
104 }
105}