Crate viaspf_record

source ·
Expand description

A library containing a data model and parser for Sender Policy Framework (SPF) records.

The data structures in this library are modeled after the ABNF in RFC 7208, section 12.

§Usage

The main top-level data structure in this module is the SpfRecord struct. SpfRecord represents a syntactically valid SPF record. An SpfRecord can be constructed programmatically or parsed from a string:

use std::net::Ipv4Addr;
use viaspf_record::*;

let spf_record = "v=spf1 mx ip4:12.34.56.78/24 -all".parse();

assert_eq!(
    spf_record,
    Ok(SpfRecord {
        terms: vec![
            Term::Directive(Directive {
                qualifier: None,
                mechanism: Mechanism::Mx(Mx {
                    domain_spec: None,
                    prefix_len: None,
                }),
            }),
            Term::Directive(Directive {
                qualifier: None,
                mechanism: Mechanism::Ip4(Ip4 {
                    addr: Ipv4Addr::new(12, 34, 56, 78),
                    prefix_len: Some(Ip4CidrLength::new(24).unwrap()),
                }),
            }),
            Term::Directive(Directive {
                qualifier: Some(Qualifier::Fail),
                mechanism: Mechanism::All,
            }),
        ],
    })
);

Also provided as a top-level data structure is the ExplainString struct. It can be parsed from a string in the same way.

SPF record data may be printed via Display. The string representations are the canonical SPF string representations. Thus roundtripping through parsing and printing is possible:

use viaspf_record::SpfRecord;

let record_str = "v=spf1 mx -all";
assert_eq!(record_str.parse::<SpfRecord>()?.to_string(), record_str);

Structs§

Enums§