const FIXSTR_SIZE : u8 = 0 x1f;
const FIXARRAY_SIZE : u8 = 0 x0f;
const FIXMAP_SIZE : u8 = 0 x0f;
/// Format markers.
#[ derive(Clone, Copy, Debug, PartialEq)]
#[ repr(u8)]
pub enum Marker {
FixPos(u8) = 0 x00,
FixNeg(i8) = 0 xe0,
FixMap(u8) = 0 x80,
FixArray(u8) = 0 x90,
FixStr(u8) = 0 xa0,
Null = 0 xc0,
// Marked in MessagePack spec as never used.
Reserved,
False ,
True ,
Bin8,
Bin16,
Bin32,
Ext8,
Ext16,
Ext32,
F32,
F64,
U8,
U16,
U32,
U64,
I8,
I16,
I32,
I64,
FixExt1,
FixExt2,
FixExt4,
FixExt8,
FixExt16,
Str8,
Str16,
Str32,
Array16,
Array32,
Map16,
Map32,
}
impl Marker {
/// Construct a msgpack marker from a single byte.
#[ must_use]
#[ inline]
pub fn from_u8(n: u8) -> Marker {
match n {
0 x00 ..= 0 x7f => Marker::FixPos(n),
0 xe0 ..= 0 xff => Marker::FixNeg(n as i8),
0 x80 ..= 0 x8f => Marker::FixMap(n & FIXMAP_SIZE),
0 x90 ..= 0 x9f => Marker::FixArray(n & FIXARRAY_SIZE),
0 xa0 ..= 0 xbf => Marker::FixStr(n & FIXSTR_SIZE),
0 xc0 => Marker::Null,
// Marked in MessagePack spec as never used.
0 xc1 => Marker::Reserved,
0 xc2 => Marker::False ,
0 xc3 => Marker::True ,
0 xc4 => Marker::Bin8,
0 xc5 => Marker::Bin16,
0 xc6 => Marker::Bin32,
0 xc7 => Marker::Ext8,
0 xc8 => Marker::Ext16,
0 xc9 => Marker::Ext32,
0 xca => Marker::F32,
0 xcb => Marker::F64,
0 xcc => Marker::U8,
0 xcd => Marker::U16,
0 xce => Marker::U32,
0 xcf => Marker::U64,
0 xd0 => Marker::I8,
0 xd1 => Marker::I16,
0 xd2 => Marker::I32,
0 xd3 => Marker::I64,
0 xd4 => Marker::FixExt1,
0 xd5 => Marker::FixExt2,
0 xd6 => Marker::FixExt4,
0 xd7 => Marker::FixExt8,
0 xd8 => Marker::FixExt16,
0 xd9 => Marker::Str8,
0 xda => Marker::Str16,
0 xdb => Marker::Str32,
0 xdc => Marker::Array16,
0 xdd => Marker::Array32,
0 xde => Marker::Map16,
0 xdf => Marker::Map32,
}
}
/// Converts a marker object into a single-byte representation.
#[ must_use]
#[ inline]
pub fn to_u8(&self ) -> u8 {
match *self {
Marker::FixPos(val) => val,
Marker::FixNeg(val) => val as u8,
Marker::Null => 0 xc0,
Marker::True => 0 xc3,
Marker::False => 0 xc2,
Marker::U8 => 0 xcc,
Marker::U16 => 0 xcd,
Marker::U32 => 0 xce,
Marker::U64 => 0 xcf,
Marker::I8 => 0 xd0,
Marker::I16 => 0 xd1,
Marker::I32 => 0 xd2,
Marker::I64 => 0 xd3,
Marker::F32 => 0 xca,
Marker::F64 => 0 xcb,
Marker::FixStr(len) => 0 xa0 | (len & FIXSTR_SIZE),
Marker::Str8 => 0 xd9,
Marker::Str16 => 0 xda,
Marker::Str32 => 0 xdb,
Marker::Bin8 => 0 xc4,
Marker::Bin16 => 0 xc5,
Marker::Bin32 => 0 xc6,
Marker::FixArray(len) => 0 x90 | (len & FIXARRAY_SIZE),
Marker::Array16 => 0 xdc,
Marker::Array32 => 0 xdd,
Marker::FixMap(len) => 0 x80 | (len & FIXMAP_SIZE),
Marker::Map16 => 0 xde,
Marker::Map32 => 0 xdf,
Marker::FixExt1 => 0 xd4,
Marker::FixExt2 => 0 xd5,
Marker::FixExt4 => 0 xd6,
Marker::FixExt8 => 0 xd7,
Marker::FixExt16 => 0 xd8,
Marker::Ext8 => 0 xc7,
Marker::Ext16 => 0 xc8,
Marker::Ext32 => 0 xc9,
Marker::Reserved => 0 xc1,
}
}
}
impl From<u8> for Marker {
#[ inline(always)]
fn from(val: u8) -> Marker {
Marker::from_u8(val)
}
}
impl From<Marker> for u8 {
#[ inline(always)]
fn from(val: Marker) -> Self {
val.to_u8()
}
}
Messung V0.5 in Prozent C=65 H=95 G=81
¤ Dauer der Verarbeitung: 0.11 Sekunden
(vorverarbeitet am 2026-06-18)
¤
*© Formatika GbR, Deutschland