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