use crate::{Tag, Tagged}; #[derive(Debug)] pub struct ConstInt { buffer: [u8; 10], n: usize, } // XXX only ToBer/ToDer trait supported? impl Tagged for ConstInt { const TAG: Tag = Tag::Integer; } #[derive(Debug)] pub struct IntBuilder {} impl IntBuilder { pub const fn build(&self, i: u64) -> ConstInt { let b = i.to_be_bytes(); let mut out = [0u8; 10]; out[0] = 0x4; let src_len = b.len(); let mut src_index = 0; while src_index < src_len && b[src_index] == 0 { src_index += 1; } out[1] = (src_len - src_index) as u8; let mut dst_index = 2; while src_index < src_len { out[dst_index] = b[src_index]; src_index += 1; dst_index += 1; } // XXX will not work: we need to allocate a Vec // also, we cannot just store the bytes (there are extra zeroes at end) // Integer::new(&out[..dst_index]) ConstInt { buffer: out, n: dst_index, } } }