pub trait Reader<'r>: Sized {
Show 19 methods
// Required methods
fn input_len(&self) -> Length;
fn peek_byte(&self) -> Option<u8>;
fn peek_header(&self) -> Result<Header>;
fn position(&self) -> Length;
fn read_slice(&mut self, len: Length) -> Result<&'r [u8]>;
// Provided methods
fn context_specific<T>(
&mut self,
tag_number: TagNumber,
tag_mode: TagMode
) -> Result<Option<T>>
where T: DecodeValue<'r> + FixedTag { ... }
fn decode<T: Decode<'r>>(&mut self) -> Result<T> { ... }
fn error(&mut self, kind: ErrorKind) -> Error { ... }
fn finish<T>(self, value: T) -> Result<T> { ... }
fn is_finished(&self) -> bool { ... }
fn offset(&self) -> Length { ... }
fn peek_tag(&self) -> Result<Tag> { ... }
fn read_byte(&mut self) -> Result<u8> { ... }
fn read_into<'o>(&mut self, buf: &'o mut [u8]) -> Result<&'o [u8]> { ... }
fn read_nested<'n, T, F>(&'n mut self, len: Length, f: F) -> Result<T>
where F: FnOnce(&mut NestedReader<'n, Self>) -> Result<T> { ... }
fn read_vec(&mut self, len: Length) -> Result<Vec<u8>> { ... }
fn remaining_len(&self) -> Length { ... }
fn sequence<'n, F, T>(&'n mut self, f: F) -> Result<T>
where F: FnOnce(&mut NestedReader<'n, Self>) -> Result<T> { ... }
fn tlv_bytes(&mut self) -> Result<&'r [u8]> { ... }
}
Expand description
Reader trait which reads DER-encoded input.
Required Methods§
sourcefn peek_header(&self) -> Result<Header>
fn peek_header(&self) -> Result<Header>
Peek forward in the input data, attempting to decode a Header
from
the data at the current position in the decoder.
Does not modify the decoder’s state.
sourcefn read_slice(&mut self, len: Length) -> Result<&'r [u8]>
fn read_slice(&mut self, len: Length) -> Result<&'r [u8]>
Attempt to read data borrowed directly from the input as a slice, updating the internal cursor position.
Returns
Ok(slice)
on successErr(ErrorKind::Incomplete)
if there is not enough dataErr(ErrorKind::Reader)
if the reader can’t borrow from the input
Provided Methods§
sourcefn context_specific<T>(
&mut self,
tag_number: TagNumber,
tag_mode: TagMode
) -> Result<Option<T>>where
T: DecodeValue<'r> + FixedTag,
fn context_specific<T>( &mut self, tag_number: TagNumber, tag_mode: TagMode ) -> Result<Option<T>>where T: DecodeValue<'r> + FixedTag,
Attempt to decode an ASN.1 CONTEXT-SPECIFIC
field with the
provided TagNumber
.
sourcefn error(&mut self, kind: ErrorKind) -> Error
fn error(&mut self, kind: ErrorKind) -> Error
Return an error with the given ErrorKind
, annotating it with
context about where the error occurred.
sourcefn finish<T>(self, value: T) -> Result<T>
fn finish<T>(self, value: T) -> Result<T>
Finish decoding, returning the given value if there is no remaining data, or an error otherwise
sourcefn is_finished(&self) -> bool
fn is_finished(&self) -> bool
Have we read all of the input data?
sourcefn offset(&self) -> Length
fn offset(&self) -> Length
Offset within the original input stream.
This is used for error reporting, and doesn’t need to be overridden
by any reader implementations (except for the built-in NestedReader
,
which consumes nested input messages)
sourcefn peek_tag(&self) -> Result<Tag>
fn peek_tag(&self) -> Result<Tag>
Peek at the next byte in the decoder and attempt to decode it as a
Tag
value.
Does not modify the decoder’s state.
sourcefn read_into<'o>(&mut self, buf: &'o mut [u8]) -> Result<&'o [u8]>
fn read_into<'o>(&mut self, buf: &'o mut [u8]) -> Result<&'o [u8]>
Attempt to read input data, writing it into the provided buffer, and returning a slice on success.
Returns
Ok(slice)
if there is sufficient dataErr(ErrorKind::Incomplete)
if there is not enough data
sourcefn read_nested<'n, T, F>(&'n mut self, len: Length, f: F) -> Result<T>where
F: FnOnce(&mut NestedReader<'n, Self>) -> Result<T>,
fn read_nested<'n, T, F>(&'n mut self, len: Length, f: F) -> Result<T>where F: FnOnce(&mut NestedReader<'n, Self>) -> Result<T>,
Read nested data of the given length.
sourcefn remaining_len(&self) -> Length
fn remaining_len(&self) -> Length
Get the number of bytes still remaining in the buffer.