pub fn nested<'a, F, R>(
input: &mut Reader<'a>,
tag: Tag,
decoder: F
) -> Result<R>
Expand description
Return the value of the given tag and apply a decoding function to it.
extern crate derp;
extern crate untrusted;
use derp::Tag;
use untrusted::Input;
const NESTED: &'static [u8] = &[
0x30, 0x14, // seq
0x30, 0x0c, // seq
0x02, 0x04, 0x0a, 0x0b, 0x0c, 0x0d, // x
0x02, 0x04, 0x1a, 0x1b, 0x1c, 0x1d, // y
0x02, 0x04, 0x01, 0x02, 0x03, 0x04, // z
];
fn main () {
let input = Input::from(NESTED);
let (x, y, z) = input.read_all(derp::Error::Read, |input| {
derp::nested(input, Tag::Sequence, |input| {
let (x, y) = derp::nested(input, Tag::Sequence, |input| {
let x = derp::positive_integer(input)?;
let y = derp::positive_integer(input)?;
Ok((x, y))
})?;
let z = derp::positive_integer(input)?;
Ok((x, y, z))
})
}).unwrap();
assert_eq!(x, Input::from(&[0x0a, 0x0b, 0x0c, 0x0d]));
assert_eq!(y, Input::from(&[0x1a, 0x1b, 0x1c, 0x1d]));
assert_eq!(z, Input::from(&[0x01, 0x02, 0x03, 0x04]));
}