[][src]Trait domain::base::octets::Parse

pub trait Parse<Ref>: Sized {
    fn parse(parser: &mut Parser<Ref>) -> Result<Self, ParseError>;
fn skip(parser: &mut Parser<Ref>) -> Result<(), ParseError>; }

A type that can extract a value from a parser.

The trait is a companion to Parser<Ref>: it allows a type to use a parser to create a value of itself. Because types may be generic over octets types, the trait is generic over the octets reference of the parser in question. Implementations should use minimal trait bounds matching the parser methods they use.

For types that are generic over an octets sequence, the reference type should be tied to the type’s own type argument. This will avoid having to provide type annotations when simply calling Parse::parse for the type. Typically this will happen via OctetsRef::Range. For instance, a type Foo<Octets> should provide:

This example is not tested
impl<Ref: OctetsRef> Parse<Ref> for Foo<Ref::Range> {
    // etc.
}

Required methods

fn parse(parser: &mut Parser<Ref>) -> Result<Self, ParseError>

Extracts a value from the beginning of parser.

If parsing fails and an error is returned, the parser’s position should be considered to be undefined. If it is supposed to be reused in this case, you should store the position before attempting to parse and seek to that position again before continuing.

fn skip(parser: &mut Parser<Ref>) -> Result<(), ParseError>

Skips over a value of this type at the beginning of parser.

This function is the same as parse but doesn’t return the result. It can be used to check if the content of parser is correct or to skip over unneeded parts of the parser.

Loading content...

Implementations on Foreign Types

impl<T: AsRef<[u8]>> Parse<T> for i8[src]

impl<T: AsRef<[u8]>> Parse<T> for u8[src]

impl<T: AsRef<[u8]>> Parse<T> for i16[src]

impl<T: AsRef<[u8]>> Parse<T> for u16[src]

impl<T: AsRef<[u8]>> Parse<T> for i32[src]

impl<T: AsRef<[u8]>> Parse<T> for u32[src]

impl<Ref, Data> Parse<Ref> for Option<Record<ParsedDname<Ref>, Data>> where
    Ref: OctetsRef,
    Data: ParseRecordData<Ref>, 
[src]

Loading content...

Implementors

impl<Octets: AsRef<[u8]>> Parse<Octets> for OptionHeader[src]

impl<Octets: AsRef<[u8]>> Parse<Octets> for A[src]

impl<Ref> Parse<Ref> for ParsedDname<Ref> where
    Ref: AsRef<[u8]> + Clone
[src]

fn skip(parser: &mut Parser<Ref>) -> Result<(), ParseError>[src]

Skip over a domain name.

This will only check the uncompressed part of the name. If the name is compressed but the compression pointer is invalid or the name pointed to is invalid or too long, the function will still succeed.

If you need to check that the name you are skipping over is valid, you will have to use parse and drop the result.

impl<Ref: OctetsRef> Parse<Ref> for CharStr<Ref::Range>[src]

impl<Ref: OctetsRef> Parse<Ref> for Nsid<Ref::Range>[src]

impl<Ref: OctetsRef> Parse<Ref> for Dau<Ref::Range>[src]

impl<Ref: OctetsRef> Parse<Ref> for Dhu<Ref::Range>[src]

impl<Ref: OctetsRef> Parse<Ref> for N3u<Ref::Range>[src]

impl<Ref: OctetsRef> Parse<Ref> for Chain<Ref::Range>[src]

impl<Ref: OctetsRef> Parse<Ref> for KeyTag<Ref::Range>[src]

impl<Ref: OctetsRef> Parse<Ref> for Opt<Ref::Range>[src]

impl<Ref: OctetsRef> Parse<Ref> for Question<ParsedDname<Ref>>[src]

impl<Ref: OctetsRef> Parse<Ref> for ParsedRecord<Ref>[src]

impl<Ref: OctetsRef> Parse<Ref> for RecordHeader<ParsedDname<Ref>>[src]

impl<Ref: OctetsRef> Parse<Ref> for domain::base::Dname<Ref::Range>[src]

impl<Ref: OctetsRef> Parse<Ref> for Cname<ParsedDname<Ref>>[src]

impl<Ref: OctetsRef> Parse<Ref> for Hinfo<Ref::Range>[src]

impl<Ref: OctetsRef> Parse<Ref> for Mb<ParsedDname<Ref>>[src]

impl<Ref: OctetsRef> Parse<Ref> for Md<ParsedDname<Ref>>[src]

impl<Ref: OctetsRef> Parse<Ref> for Mf<ParsedDname<Ref>>[src]

impl<Ref: OctetsRef> Parse<Ref> for Mg<ParsedDname<Ref>>[src]

impl<Ref: OctetsRef> Parse<Ref> for Minfo<ParsedDname<Ref>>[src]

impl<Ref: OctetsRef> Parse<Ref> for Mr<ParsedDname<Ref>>[src]

impl<Ref: OctetsRef> Parse<Ref> for Mx<ParsedDname<Ref>>[src]

impl<Ref: OctetsRef> Parse<Ref> for Ns<ParsedDname<Ref>>[src]

impl<Ref: OctetsRef> Parse<Ref> for Null<Ref::Range>[src]

impl<Ref: OctetsRef> Parse<Ref> for Ptr<ParsedDname<Ref>>[src]

impl<Ref: OctetsRef> Parse<Ref> for Soa<ParsedDname<Ref>>[src]

impl<Ref: OctetsRef> Parse<Ref> for Txt<Ref::Range>[src]

impl<Ref: OctetsRef> Parse<Ref> for Srv<ParsedDname<Ref>>[src]

impl<Ref: OctetsRef> Parse<Ref> for Tsig<Ref::Range, ParsedDname<Ref>>[src]

impl<Ref: OctetsRef> Parse<Ref> for Dnskey<Ref::Range>[src]

impl<Ref: OctetsRef> Parse<Ref> for Ds<Ref::Range>[src]

impl<Ref: OctetsRef> Parse<Ref> for Nsec<Ref::Range, ParsedDname<Ref>>[src]

impl<Ref: OctetsRef> Parse<Ref> for Rrsig<Ref::Range, ParsedDname<Ref>>[src]

impl<Ref: OctetsRef> Parse<Ref> for RtypeBitmap<Ref::Range>[src]

impl<Ref: OctetsRef> Parse<Ref> for Nsec3<Ref::Range>[src]

impl<Ref: OctetsRef> Parse<Ref> for Nsec3param<Ref::Range>[src]

impl<Ref: OctetsRef> Parse<Ref> for domain::rdata::rfc6672::Dname<ParsedDname<Ref>>[src]

impl<Ref: OctetsRef> Parse<Ref> for Cdnskey<Ref::Range>[src]

impl<Ref: OctetsRef> Parse<Ref> for Cds<Ref::Range>[src]

impl<Ref: AsRef<[u8]>> Parse<Ref> for Class[src]

impl<Ref: AsRef<[u8]>> Parse<Ref> for DigestAlg[src]

impl<Ref: AsRef<[u8]>> Parse<Ref> for Nsec3HashAlg[src]

impl<Ref: AsRef<[u8]>> Parse<Ref> for Opcode[src]

impl<Ref: AsRef<[u8]>> Parse<Ref> for OptionCode[src]

impl<Ref: AsRef<[u8]>> Parse<Ref> for TsigRcode[src]

impl<Ref: AsRef<[u8]>> Parse<Ref> for Rtype[src]

impl<Ref: AsRef<[u8]>> Parse<Ref> for SecAlg[src]

impl<Ref: AsRef<[u8]>> Parse<Ref> for HeaderSection[src]

impl<Ref: AsRef<[u8]>> Parse<Ref> for Expire[src]

impl<Ref: AsRef<[u8]>> Parse<Ref> for TcpKeepalive[src]

impl<Ref: AsRef<[u8]>> Parse<Ref> for Padding[src]

impl<Ref: AsRef<[u8]>> Parse<Ref> for ClientSubnet[src]

impl<Ref: AsRef<[u8]>> Parse<Ref> for Cookie[src]

impl<Ref: AsRef<[u8]>> Parse<Ref> for Time48[src]

impl<Ref: AsRef<[u8]>> Parse<Ref> for Aaaa[src]

impl<T: AsRef<[u8]>> Parse<T> for Ipv4Addr[src]

impl<T: AsRef<[u8]>> Parse<T> for Ipv6Addr[src]

impl<T: AsRef<[u8]>> Parse<T> for Serial[src]

Loading content...