adstxt 0.1.1

This library provides a parser for ads.txt.
Documentation
use adstxt::*;

#[test]
fn test_placeholder() {
    assert_eq!(AdsTxt::parse_lines("placeholder.example.com, placeholder, DIRECT, placeholder"), vec![
        LineData::Record {
            record: Record {
                domain: "placeholder.example.com",
                account_id: "placeholder",
                relation: Relation::Direct,
                authority_id: Some("placeholder"),
            },
            extension: None,
            comment: None
        }
    ]);
}

#[test]
fn test_single_system_direct() {
    assert_eq!(AdsTxt::parse_lines("greenadexchange.com, XF7342, DIRECT, 5jyxf8k54"), vec![LineData::Record {
        record: Record {
            domain: "greenadexchange.com",
            account_id: "XF7342",
            relation: Relation::Direct,
            authority_id: Some("5jyxf8k54"),
        },
        extension: None,
        comment: None
    }]);
}

#[test]
fn test_single_system_reseller() {
    assert_eq!(AdsTxt::parse_lines("redssp.com, 57013, RESELLER"), vec![LineData::Record {
        record: Record { domain: "redssp.com", account_id: "57013", relation: Relation::Reseller, authority_id: None },
        extension: None,
        comment: None
    }]);
}

#[test]
fn test_multiple_systems_and_resellers() {
    assert_eq!(
        AdsTxt::parse_lines(
            r###"# Ads.txt file for example.com:
greenadexchange.com, 12345, DIRECT, d75815a79
silverssp.com, 9675, RESELLER, f496211
blueadexchange.com, XF436, DIRECT
orangeexchange.com, 45678, RESELLER
silverssp.com, ABE679, RESELLER"###
        ),
        vec![
            LineData::Comment(Comment("# Ads.txt file for example.com:")),
            LineData::Record {
                record: Record {
                    domain: "greenadexchange.com",
                    account_id: "12345",
                    relation: Relation::Direct,
                    authority_id: Some("d75815a79"),
                },
                extension: None,
                comment: None
            },
            LineData::Record {
                record: Record {
                    domain: "silverssp.com",
                    account_id: "9675",
                    relation: Relation::Reseller,
                    authority_id: Some("f496211"),
                },
                extension: None,
                comment: None
            },
            LineData::Record {
                record: Record {
                    domain: "blueadexchange.com",
                    account_id: "XF436",
                    relation: Relation::Direct,
                    authority_id: None,
                },
                extension: None,
                comment: None
            },
            LineData::Record {
                record: Record {
                    domain: "orangeexchange.com",
                    account_id: "45678",
                    relation: Relation::Reseller,
                    authority_id: None,
                },
                extension: None,
                comment: None
            },
            LineData::Record {
                record: Record {
                    domain: "silverssp.com",
                    account_id: "ABE679",
                    relation: Relation::Reseller,
                    authority_id: None,
                },
                extension: None,
                comment: None
            },
        ]
    );
}

#[test]
fn test_contact_records() {
    assert_eq!(
        AdsTxt::parse_lines(
            r###"# Ads.txt file for example.com:
greenadexchange.com, 12345, DIRECT, d75815a79
blueadexchange.com, XF436, DIRECT
contact=adops@example.com
contact=http://example.com/contact-us"###
        ),
        vec![
            LineData::Comment(Comment("# Ads.txt file for example.com:")),
            LineData::Record {
                record: Record {
                    domain: "greenadexchange.com",
                    account_id: "12345",
                    relation: Relation::Direct,
                    authority_id: Some("d75815a79"),
                },
                extension: None,
                comment: None
            },
            LineData::Record {
                record: Record {
                    domain: "blueadexchange.com",
                    account_id: "XF436",
                    relation: Relation::Direct,
                    authority_id: None,
                },
                extension: None,
                comment: None
            },
            LineData::Variable {
                variable: Variable { name: "contact", value: "adops@example.com" },
                extension: None,
                comment: None
            },
            LineData::Variable {
                variable: Variable { name: "contact", value: "http://example.com/contact-us" },
                extension: None,
                comment: None
            },
        ]
    );
}

#[test]
fn test_subdomain_referral() {
    assert_eq!(
        AdsTxt::parse_lines(
            r###"# Ads.txt file for example.com:
greenadexchange.com, 12345, DIRECT, d75815a79
blueadexchange.com, XF436, DIRECT
subdomain=divisionone.example.com"###
        ),
        vec![
            LineData::Comment(Comment("# Ads.txt file for example.com:")),
            LineData::Record {
                record: Record {
                    domain: "greenadexchange.com",
                    account_id: "12345",
                    relation: Relation::Direct,
                    authority_id: Some("d75815a79"),
                },
                extension: None,
                comment: None
            },
            LineData::Record {
                record: Record {
                    domain: "blueadexchange.com",
                    account_id: "XF436",
                    relation: Relation::Direct,
                    authority_id: None,
                },
                extension: None,
                comment: None
            },
            LineData::Variable {
                variable: Variable { name: "subdomain", value: "divisionone.example.com" },
                extension: None,
                comment: None
            },
        ]
    );
}