1use std::{ops::Range, str::FromStr};
2
3#[derive(Clone, Debug, Default, Eq, PartialEq)]
4pub enum Type {
5 BitField(Range<u8>),
6 Bool,
7 Char,
9
10 Debug,
11 Display,
12 FormatSequence,
13
14 F32,
15 F64,
16
17 #[default] Format,
20 FormatArray(usize), FormatSlice,
23
24 I8,
25 I16,
26 I32,
27 I64,
28 I128,
29 Isize,
30
31 IStr,
33 Str,
35
36 U8,
37 U16,
38 U32,
39 U64,
40 U128,
41 Usize,
42
43 U8Slice,
45 U8Array(usize), }
47
48impl FromStr for Type {
50 type Err = ();
51
52 fn from_str(s: &str) -> Result<Self, Self::Err> {
53 Ok(match s {
54 "u8" => Type::U8,
55 "u16" => Type::U16,
56 "u32" => Type::U32,
57 "u64" => Type::U64,
58 "u128" => Type::U128,
59 "usize" => Type::Usize,
60 "i8" => Type::I8,
61 "i16" => Type::I16,
62 "i32" => Type::I32,
63 "i64" => Type::I64,
64 "i128" => Type::I128,
65 "isize" => Type::Isize,
66 "f32" => Type::F32,
67 "f64" => Type::F64,
68 "bool" => Type::Bool,
69 "str" => Type::Str,
70 "istr" => Type::IStr,
71 "__internal_Debug" => Type::Debug,
72 "__internal_Display" => Type::Display,
73 "__internal_FormatSequence" => Type::FormatSequence,
74 "[u8]" => Type::U8Slice,
75 "?" => Type::Format,
76 "[?]" => Type::FormatSlice,
77 "char" => Type::Char,
78 _ => return Err(()),
79 })
80 }
81}