// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
// Copyright by contributors to this project.
// SPDX-License-Identifier: (Apache-2.0 OR MIT)
use crate ::{MlsDecode, MlsEncode, MlsSize};
use alloc::vec::Vec;
macro_rules! impl_stdint {
($t:ty) => {
impl MlsSize for $t {
fn mls_encoded_len(&self ) -> usize {
core::mem::size_of::<$t>()
}
}
impl MlsEncode for $t {
fn mls_encode(&self , writer: &mut Vec<u8>) -> Result<(), crate ::Error> {
writer.extend(self .to_be_bytes());
Ok(())
}
}
impl MlsDecode for $t {
fn mls_decode(reader: &mut &[u8]) -> Result<Self , crate ::Error> {
MlsDecode::mls_decode(reader).map(<$t>::from_be_bytes)
}
}
};
}
impl_stdint!(u8);
impl_stdint!(u16);
impl_stdint!(u32);
impl_stdint!(u64);
impl_stdint!(u128);
#[ cfg(test)]
mod tests {
#[ cfg(target_arch = "wasm32" )]
use wasm_bindgen_test::wasm_bindgen_test as test;
use crate ::{MlsDecode, MlsEncode};
use alloc::vec;
#[ test]
fn u8_round_trip() {
let serialized = 42 u8.mls_encode_to_vec().unwrap();
assert_eq!(serialized, vec![42 u8]);
let recovered = u8::mls_decode(&mut &*serialized).unwrap();
assert_eq!(recovered, 42 u8);
}
#[ test]
fn u16_round_trip() {
let serialized = 1024 u16.mls_encode_to_vec().unwrap();
assert_eq!(serialized, vec![4 , 0 ]);
let recovered = u16::mls_decode(&mut &*serialized).unwrap();
assert_eq!(recovered, 1024 u16);
}
#[ test]
fn u32_round_trip() {
let serialized = 1000000 u32.mls_encode_to_vec().unwrap();
assert_eq!(serialized, vec![0 , 15 , 66 , 64 ]);
let recovered = u32::mls_decode(&mut &*serialized).unwrap();
assert_eq!(recovered, 1000000 u32);
}
#[ test]
fn u64_round_trip() {
let serialized = 100000000000 u64.mls_encode_to_vec().unwrap();
assert_eq!(serialized, vec![0 , 0 , 0 , 23 , 72 , 118 , 232 , 0 ]);
let recovered = u64::mls_decode(&mut &*serialized).unwrap();
assert_eq!(recovered, 100000000000 u64);
}
#[ test]
fn u128_round_trip() {
let serialized = 10000000000000000 u128.mls_encode_to_vec().unwrap();
assert_eq!(
serialized,
vec![0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 35 , 134 , 242 , 111 , 193 , 0 , 0 ]
);
let recovered = u128::mls_decode(&mut &*serialized).unwrap();
assert_eq!(recovered, 10000000000000000 u128);
}
}
Messung V0.5 in Prozent C=82 H=96 G=89
¤ Dauer der Verarbeitung: 0.10 Sekunden
(vorverarbeitet am 2026-06-19)
¤
*© Formatika GbR, Deutschland