viaspf-record

Crates.ioviaspf-record
lib.rsviaspf-record
version0.5.1
sourcesrc
created_at2022-01-20 08:46:28.518802
updated_at2024-05-06 07:08:10.204549
descriptionData model and parser for Sender Policy Framework (SPF) records
homepage
repositoryhttps://codeberg.org/glts/viaspf
max_upload_size
id517573
size130,235
(glts)

documentation

README

viaspf-record

The viaspf-record library contains a data model and parser for SPF records. SPF records are described in the Sender Policy Framework specification, version 1 (RFC 7208).

The data structures in this library constitute a complete and faithful encoding of the ABNF in RFC 7208, section 12. Extensive checking ensures correctness and conformance with the specification.

This library is used in viaspf, where you can find a complete implementation of SPF, including APIs for performing SPF queries. The viaspf-record library is a stand-alone product and could also be used in other projects.

The minimum supported Rust version is 1.65.0.

Usage

This is a Rust library. Include viaspf-record in Cargo.toml as usual.

The 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,
            }),
        ],
    })
);

Refer to the API documentation for details.

Licence

Copyright © 2020–2024 David Bürgin

This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with this program. If not, see https://www.gnu.org/licenses/.

Commit count: 0

cargo fmt