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§
- An a mechanism.
- Macro delimiter characters.
- A directive.
- A domain specification.
- An exists mechanism.
- An explain string.
- An exp modifier.
- An include mechanism.
- An ip4 mechanism.
- An IPv4 CIDR prefix length.
- An ip6 mechanism.
- An IPv6 CIDR prefix length.
- A macro.
- A literal part of a macro string.
- A macro string.
- An mx mechanism.
- A modifier name.
- An error indicating that SPF record data could not be parsed.
- A ptr mechanism.
- A redirect modifier.
- An SPF record.
- An unknown modifier.
Enums§
- A combined IPv4 and/or IPv6 CIDR prefix length.
- An escape sequence in a macro string.
- A part of an explain string.
- A part of a macro string that may be expanded.
- The kind of a macro (macro letter).
- A part of a macro string.
- A mechanism.
- A modifier.
- A qualifier.
- A term.