plux_rs/variable/
var_type.rs1use std::fmt::Display;
2
3use serde::{Deserialize, Serialize};
4
5#[derive(Default, Clone, Copy, Debug, Serialize, Deserialize, PartialEq, Eq, PartialOrd)]
35pub enum VariableType {
36 #[default]
38 Let,
39 Int(VariableIntType),
41 Float(VariableFloatType),
43 Bool,
45 Char,
47 String,
49 List,
51}
52
53#[derive(Clone, Copy, Debug, Serialize, Deserialize, PartialEq, Eq, PartialOrd)]
58pub enum VariableIntType {
59 Signed(VariableSignedIntType),
61 Unsigned(VariableUnsignedIntType),
63}
64
65#[derive(Default, Clone, Copy, Debug, Serialize, Deserialize, PartialEq, Eq, PartialOrd)]
70pub enum VariableSignedIntType {
71 I8,
73 I16,
75 #[default]
77 I32,
78 I64,
80}
81
82#[derive(Default, Clone, Copy, Debug, Serialize, Deserialize, PartialEq, Eq, PartialOrd)]
87pub enum VariableUnsignedIntType {
88 U8,
90 U16,
92 #[default]
94 U32,
95 U64,
97}
98
99#[derive(Default, Clone, Copy, Debug, Serialize, Deserialize, PartialEq, Eq, PartialOrd)]
104pub enum VariableFloatType {
105 #[default]
107 F32,
108 F64,
110}
111
112impl VariableType {
113 pub const I8: VariableType =
115 VariableType::Int(VariableIntType::Signed(VariableSignedIntType::I8));
116 pub const I16: VariableType =
118 VariableType::Int(VariableIntType::Signed(VariableSignedIntType::I16));
119 pub const I32: VariableType =
121 VariableType::Int(VariableIntType::Signed(VariableSignedIntType::I32));
122 pub const I64: VariableType =
124 VariableType::Int(VariableIntType::Signed(VariableSignedIntType::I64));
125 pub const U8: VariableType =
127 VariableType::Int(VariableIntType::Unsigned(VariableUnsignedIntType::U8));
128 pub const U16: VariableType =
130 VariableType::Int(VariableIntType::Unsigned(VariableUnsignedIntType::U16));
131 pub const U32: VariableType =
133 VariableType::Int(VariableIntType::Unsigned(VariableUnsignedIntType::U32));
134 pub const U64: VariableType =
136 VariableType::Int(VariableIntType::Unsigned(VariableUnsignedIntType::U64));
137 pub const F32: VariableType = VariableType::Float(VariableFloatType::F32);
139 pub const F64: VariableType = VariableType::Float(VariableFloatType::F64);
141}
142
143impl Default for VariableIntType {
144 fn default() -> Self {
145 Self::Signed(Default::default())
146 }
147}
148
149impl Display for VariableType {
150 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
151 match self {
152 Self::Int(t) => write!(f, "{t}"),
153 Self::Float(t) => write!(f, "{t}"),
154 ty => write!(f, "{ty:?}"),
155 }
156 }
157}
158
159impl Display for VariableIntType {
160 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
161 match self {
162 Self::Signed(t) => write!(f, "{t}"),
163 Self::Unsigned(t) => write!(f, "{t}"),
164 }
165 }
166}
167
168impl Display for VariableFloatType {
169 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
170 write!(f, "{self:?}")
171 }
172}
173
174impl Display for VariableSignedIntType {
175 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
176 write!(f, "{self:?}")
177 }
178}
179
180impl Display for VariableUnsignedIntType {
181 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
182 write!(f, "{self:?}")
183 }
184}