use core::fmt;
use crate::de::SizeHint;
#[derive(Debug, Clone, Copy)]
#[non_exhaustive]
pub(crate) enum TypeHint {
Empty,
Bool,
Char,
Number(NumberHint),
Bytes(SizeHint),
String(SizeHint),
Sequence(SizeHint),
Map(SizeHint),
Variant,
Option,
}
impl fmt::Display for TypeHint {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
TypeHint::Empty => write!(f, "empty"),
TypeHint::Bool => write!(f, "bool"),
TypeHint::Char => write!(f, "char"),
TypeHint::Number(number) => number.fmt(f),
TypeHint::Bytes(size) => write!(f, "bytes with length {size}"),
TypeHint::String(size) => write!(f, "string with length {size}"),
TypeHint::Sequence(size) => write!(f, "sequence with length {size}"),
TypeHint::Map(size) => write!(f, "map with length {size}"),
TypeHint::Variant => write!(f, "variant"),
TypeHint::Option => write!(f, "option"),
}
}
}
#[derive(Debug, Clone, Copy)]
#[non_exhaustive]
pub(crate) enum NumberHint {
U8,
U16,
U32,
U64,
U128,
I8,
I16,
I32,
I64,
I128,
Usize,
Isize,
F32,
F64,
}
impl fmt::Display for NumberHint {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
NumberHint::U8 => write!(f, "u8"),
NumberHint::U16 => write!(f, "u16"),
NumberHint::U32 => write!(f, "u32"),
NumberHint::U64 => write!(f, "u64"),
NumberHint::U128 => write!(f, "u128"),
NumberHint::I8 => write!(f, "i8"),
NumberHint::I16 => write!(f, "i16"),
NumberHint::I32 => write!(f, "i32"),
NumberHint::I64 => write!(f, "i64"),
NumberHint::I128 => write!(f, "i128"),
NumberHint::Usize => write!(f, "usize"),
NumberHint::Isize => write!(f, "isize"),
NumberHint::F32 => write!(f, "f32"),
NumberHint::F64 => write!(f, "f64"),
}
}
}