use super::{Value, ValueType};
pub trait PackType: Into<Value> {
fn value_type() -> ValueType;
}
impl PackType for bool {
fn value_type() -> ValueType {
ValueType::Bool
}
}
impl PackType for u8 {
fn value_type() -> ValueType {
ValueType::U8
}
}
impl PackType for u16 {
fn value_type() -> ValueType {
ValueType::U16
}
}
impl PackType for u32 {
fn value_type() -> ValueType {
ValueType::U32
}
}
impl PackType for u64 {
fn value_type() -> ValueType {
ValueType::U64
}
}
impl PackType for i8 {
fn value_type() -> ValueType {
ValueType::S8
}
}
impl PackType for i16 {
fn value_type() -> ValueType {
ValueType::S16
}
}
impl PackType for i32 {
fn value_type() -> ValueType {
ValueType::S32
}
}
impl PackType for i64 {
fn value_type() -> ValueType {
ValueType::S64
}
}
impl PackType for f32 {
fn value_type() -> ValueType {
ValueType::F32
}
}
impl PackType for f64 {
fn value_type() -> ValueType {
ValueType::F64
}
}
impl PackType for char {
fn value_type() -> ValueType {
ValueType::Char
}
}
impl PackType for String {
fn value_type() -> ValueType {
ValueType::String
}
}
impl<T: PackType> PackType for Vec<T> {
fn value_type() -> ValueType {
ValueType::List(Box::new(T::value_type()))
}
}
impl<T: PackType> PackType for Option<T> {
fn value_type() -> ValueType {
ValueType::Option(Box::new(T::value_type()))
}
}
impl PackType for Value {
fn value_type() -> ValueType {
ValueType::String
}
}