enum_ordinalize/
variant_type.rs1use proc_macro2::{Ident, Span, TokenStream};
2use quote::{ToTokens, TokenStreamExt};
3
4#[allow(clippy::upper_case_acronyms)]
5#[derive(Debug, Copy, Clone, Eq, PartialEq)]
6pub(crate) enum VariantType {
7 ISIZE,
8 I8,
9 I16,
10 I32,
11 I64,
12 I128,
13 USIZE,
14 U8,
15 U16,
16 U32,
17 U64,
18 U128,
19 Nondetermined,
20}
21
22impl VariantType {
23 #[inline]
24 pub(crate) fn from_str<S: AsRef<str>>(s: S) -> VariantType {
25 let s = s.as_ref();
26
27 match s {
28 "isize" => VariantType::ISIZE,
29 "i8" => VariantType::I8,
30 "i16" => VariantType::I16,
31 "i32" => VariantType::I32,
32 "i64" => VariantType::I64,
33 "i128" => VariantType::I128,
34 "usize" => VariantType::USIZE,
35 "u8" => VariantType::U8,
36 "u16" => VariantType::U16,
37 "u32" => VariantType::U32,
38 "u64" => VariantType::U64,
39 "u128" => VariantType::U128,
40 _ => VariantType::Nondetermined,
41 }
42 }
43
44 #[inline]
45 pub(crate) fn as_str(&self) -> &'static str {
46 match self {
47 VariantType::ISIZE => "isize",
48 VariantType::I8 => "i8",
49 VariantType::I16 => "i16",
50 VariantType::I32 => "i32",
51 VariantType::I64 => "i64",
52 VariantType::I128 => "i128",
53 VariantType::USIZE => "usize",
54 VariantType::U8 => "u8",
55 VariantType::U16 => "u16",
56 VariantType::U32 => "u32",
57 VariantType::U64 => "u64",
58 VariantType::U128 => "u128",
59 _ => unreachable!(),
60 }
61 }
62}
63
64impl Default for VariantType {
65 #[inline]
66 fn default() -> Self {
67 VariantType::Nondetermined
68 }
69}
70
71impl ToTokens for VariantType {
72 #[inline]
73 fn to_tokens(&self, tokens: &mut TokenStream) {
74 tokens.append(Ident::new(self.as_str(), Span::call_site()));
75 }
76}