Macro bsn1::constructed_ber [−][src]
macro_rules! constructed_ber { ($id:expr $(, ($id_n:expr, $contents_n:expr))*) => { ... }; ($id:expr $(, ($id_n:expr, $contents_n:expr))*,) => { ... }; }
Expand description
Builds a Ber
instance representing Constructed BER effectively.
Formula
constructed_ber!(id: &IdRef [, (id_1, contents_1) [, (id_2, contents_2) [...]]]) => Ber
id_n
and contents_n
must be bounded on AsRef<[u8]>
.
Examples
Empty contents.
use bsn1::{Ber, IdRef}; let id = IdRef::sequence(); let expected = Ber::new(id, &[]); let ber = constructed_ber!(id); assert_eq!(expected, ber);
Sequence of 2 BERs.
use bsn1::{contents, Ber, BerRef, IdRef}; use std::convert::TryFrom; let id = IdRef::sequence(); let id1 = IdRef::octet_string(); let contents1: [u8; 3] = [1, 2, 3]; let id2 = IdRef::integer(); let contents2 = contents::from_integer(10); let ber = constructed_ber!(id, (id1.to_owned(), contents1), (id2, &contents2)); assert_eq!(id, ber.id()); let bytes = ber.contents(); let ber1 = <&BerRef>::try_from(bytes).unwrap(); assert_eq!(id1, ber1.id()); assert_eq!(contents1, ber1.contents()); let bytes = &bytes[ber1.as_ref().len()..]; let ber2 = <&BerRef>::try_from(bytes).unwrap(); assert_eq!(id2, ber2.id()); assert_eq!(contents2.as_ref(), ber2.contents());