capitol 0.5.1

Parse United States Congress legislative document citations
Documentation
use std::sync::LazyLock;
use std::time::{SystemTime, UNIX_EPOCH};

const FIRST_CONGRESS: usize = 1789;
static CURRENT_YEAR: LazyLock<usize> = LazyLock::new(|| {
    (
        SystemTime::now()
        .duration_since(UNIX_EPOCH)
        .unwrap() // TODO: change to expect?
        .as_secs()
        / 31_536_000 // seconds in year
        + 1970
        // UNIX_EPOCH year
    ) as usize
});
pub static CURRENT_CONGRESS: LazyLock<usize> =
    LazyLock::new(|| (*CURRENT_YEAR - FIRST_CONGRESS) / 2 + 1);
pub const CDG_BASE_URL: &str = "https://www.congress.gov";
pub const GOVINFO_BASE_URL: &str = "https://www.govinfo.gov";
pub const PUBL_SEQUENCES: [&str; 3] = ["pl", "publ", "public law no"];
pub const STATUTE_SEQUENCES: [&str; 1] = ["stat"];

pub const BILL_SEQUENCES: [&str; 2] = ["hr", "s"];
pub const SIMPLE_RESOLUTION_SEQUENCES: [&str; 2] = ["hres", "sres"];
pub const CONCURRENT_RESOLUTION_SEQUENCES: [&str; 2] = ["hconres", "sconres"];
pub const JOINT_RESOLUTION_SEQUENCES: [&str; 2] = ["hjres", "sjres"];
pub static MEASURE_SEQUENCES: LazyLock<Vec<&str>> = LazyLock::new(|| {
    [
        &BILL_SEQUENCES[..],
        &SIMPLE_RESOLUTION_SEQUENCES[..],
        &CONCURRENT_RESOLUTION_SEQUENCES[..],
        &JOINT_RESOLUTION_SEQUENCES[..],
    ]
    .concat()
});

pub const COMMITTEE_REPORT_SEQUENCES: [&str; 4] = ["hrpt", "hrept", "srpt", "srept"];
pub const COMMITTEE_PRINT_SEQUENCES: [&str; 2] = ["hprt", "sprt"];

pub static COMMITTEE_DOCUMENT_SEQUENCES: LazyLock<Vec<&str>> = LazyLock::new(|| {
    [
        &COMMITTEE_REPORT_SEQUENCES[..],
        &COMMITTEE_PRINT_SEQUENCES[..],
    ]
    .concat()
});