#[cfg(not(feature = "std"))]
use alloc::borrow::Cow;
#[cfg(feature = "std")]
use std::borrow::Cow;
#[derive(Debug, Clone, PartialEq)]
pub enum Kind<'a> {
Unit,
Bool(bool),
Char(char),
I8(i8),
I16(i16),
I32(i32),
I64(i64),
I128(i128),
Isize(isize),
U8(u8),
U16(u16),
U32(u32),
U64(u64),
U128(u128),
Usize(usize),
F32(f32),
F64(f64),
Str(Cow<'a, str>),
Bytes(&'a [u8]),
Struct,
Tuple,
TupleStruct,
Sequence,
Map,
Set,
Enum,
Option,
Result,
Opaque,
}
impl<'a> Kind<'a> {
pub fn name(&self) -> &'static str {
match self {
Kind::Unit => "()",
Kind::Bool(_) => "bool",
Kind::Char(_) => "char",
Kind::I8(_) => "i8",
Kind::I16(_) => "i16",
Kind::I32(_) => "i32",
Kind::I64(_) => "i64",
Kind::I128(_) => "i128",
Kind::Isize(_) => "isize",
Kind::U8(_) => "u8",
Kind::U16(_) => "u16",
Kind::U32(_) => "u32",
Kind::U64(_) => "u64",
Kind::U128(_) => "u128",
Kind::Usize(_) => "usize",
Kind::F32(_) => "f32",
Kind::F64(_) => "f64",
Kind::Str(_) => "str",
Kind::Bytes(_) => "bytes",
Kind::Struct => "struct",
Kind::Tuple => "tuple",
Kind::TupleStruct => "tuple_struct",
Kind::Sequence => "sequence",
Kind::Map => "map",
Kind::Set => "set",
Kind::Enum => "enum",
Kind::Option => "Option",
Kind::Result => "Result",
Kind::Opaque => "opaque",
}
}
pub fn is_scalar(&self) -> bool {
matches!(
self,
Kind::Unit
| Kind::Bool(_)
| Kind::Char(_)
| Kind::I8(_)
| Kind::I16(_)
| Kind::I32(_)
| Kind::I64(_)
| Kind::I128(_)
| Kind::Isize(_)
| Kind::U8(_)
| Kind::U16(_)
| Kind::U32(_)
| Kind::U64(_)
| Kind::U128(_)
| Kind::Usize(_)
| Kind::F32(_)
| Kind::F64(_)
| Kind::Str(_)
| Kind::Bytes(_)
)
}
}