Struct yasna::BERReaderSet
source · pub struct BERReaderSet<'a, 'b>where
'a: 'b,{ /* private fields */ }
Expand description
A reader object for a set of BER/DER-encoded ASN.1 data.
The main source of this object is the read_set
method from BERReader
.
§Examples
use yasna;
use yasna::tags::{TAG_INTEGER,TAG_BOOLEAN};
let data = &[49, 6, 1, 1, 255, 2, 1, 10];
let asn = yasna::parse_der(data, |reader| {
reader.read_set(|reader| {
let i = reader.next(&[TAG_INTEGER])?.read_i64()?;
let b = reader.next(&[TAG_BOOLEAN])?.read_bool()?;
return Ok((i, b));
})
}).unwrap();
assert_eq!(asn, (10, true));
Implementations§
source§impl<'a, 'b> BERReaderSet<'a, 'b>
impl<'a, 'b> BERReaderSet<'a, 'b>
sourcepub fn next<'c>(&'c mut self, tag_hint: &[Tag]) -> ASN1Result<BERReader<'a, 'c>>
pub fn next<'c>(&'c mut self, tag_hint: &[Tag]) -> ASN1Result<BERReader<'a, 'c>>
Generates a new BERReader
.
This method needs tag_hint
to determine the position of the data.
sourcepub fn read_optional<T, F>(
&mut self,
tag_hint: &[Tag],
callback: F,
) -> ASN1Result<Option<T>>
pub fn read_optional<T, F>( &mut self, tag_hint: &[Tag], callback: F, ) -> ASN1Result<Option<T>>
If there is a set element with a tag in tag_hint
, reads an ASN.1
value from that element and returns Some(_)
.
Otherwise, returns None
.
Used to parse OPTIONAL elements.
§Examples
use yasna;
use yasna::tags::*;
let data = &[49, 3, 1, 1, 255];
let asn = yasna::parse_der(data, |reader| {
reader.read_set(|reader| {
let i = reader.read_optional(&[TAG_INTEGER], |reader| {
reader.read_i64()
})?;
let b = reader.next(&[TAG_BOOLEAN])?.read_bool()?;
return Ok((i, b));
})
}).unwrap();
assert_eq!(asn, (None, true));
sourcepub fn read_default<T, F>(
&mut self,
tag_hint: &[Tag],
default: T,
callback: F,
) -> ASN1Result<T>
pub fn read_default<T, F>( &mut self, tag_hint: &[Tag], default: T, callback: F, ) -> ASN1Result<T>
Similar to read_optional
,
but uses default
if it fails.
T: Eq
is required because it fails in DER mode if the read value
is equal to default
.
Used to parse DEFAULT elements.
§Examples
use yasna;
use yasna::tags::*;
let data = &[49, 3, 1, 1, 255];
let asn = yasna::parse_der(data, |reader| {
reader.read_set(|reader| {
let i = reader.read_default(&[TAG_INTEGER], 10, |reader| {
reader.read_i64()
})?;
let b = reader.next(&[TAG_BOOLEAN])?.read_bool()?;
return Ok((i, b));
})
}).unwrap();
assert_eq!(asn, (10, true));
Trait Implementations§
Auto Trait Implementations§
impl<'a, 'b> Freeze for BERReaderSet<'a, 'b>
impl<'a, 'b> RefUnwindSafe for BERReaderSet<'a, 'b>
impl<'a, 'b> Send for BERReaderSet<'a, 'b>
impl<'a, 'b> Sync for BERReaderSet<'a, 'b>
impl<'a, 'b> Unpin for BERReaderSet<'a, 'b>
impl<'a, 'b> !UnwindSafe for BERReaderSet<'a, 'b>
Blanket Implementations§
source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more