forked from AbleOS/ableos_userland
49 lines
1013 B
Rust
49 lines
1013 B
Rust
use core::fmt::Debug;
|
|
use core::fmt::Display;
|
|
|
|
use alloc::string::{String, ToString};
|
|
|
|
use super::type_of;
|
|
|
|
#[derive(PartialEq, Eq, Hash, Debug, Clone)]
|
|
pub enum Types {
|
|
Null,
|
|
Byte(u8),
|
|
String(String),
|
|
}
|
|
impl Types {
|
|
pub fn new<T: Debug + Display>(value: T) -> Self {
|
|
let type_of = type_of(&value);
|
|
match type_of {
|
|
"&str" => return Self::String(value.to_string()),
|
|
"alloc::string::String" => return Self::String(value.to_string()),
|
|
type_name => {
|
|
panic!(
|
|
"
|
|
Invalid type: {}
|
|
{}",
|
|
value, type_name
|
|
);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
impl From<u8> for Types {
|
|
fn from(value: u8) -> Self {
|
|
Self::Byte(value)
|
|
}
|
|
}
|
|
|
|
impl From<String> for Types {
|
|
fn from(value: String) -> Self {
|
|
Self::String(value)
|
|
}
|
|
}
|
|
|
|
impl From<&str> for Types {
|
|
fn from(value: &str) -> Self {
|
|
Self::String(value.to_string())
|
|
}
|
|
}
|