deep-time 0.1.0-beta.19

High-precision, no-std, no-alloc date-time library, leap-seconds, time scales, relativistic time, and a powerful date & duration parser
Documentation
#[cfg(feature = "parse")]
pub mod en_alloc;

#[cfg(feature = "parse")]
pub(crate) use en_alloc::*;

use crate::FormatNames;

pub(crate) const EN_WEEKDAYS_FULL: [&[u8]; 7] = byte_arrays![
    "Sunday",
    "Monday",
    "Tuesday",
    "Wednesday",
    "Thursday",
    "Friday",
    "Saturday"
];

pub(crate) const EN_WEEKDAYS_ABBR: [&[u8]; 7] =
    byte_arrays!["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"];

pub(crate) const EN_MONTHS_FULL: [&[u8]; 12] = byte_arrays![
    "January",
    "February",
    "March",
    "April",
    "May",
    "June",
    "July",
    "August",
    "September",
    "October",
    "November",
    "December"
];

pub(crate) const EN_MONTHS_ABBR: [&[u8]; 12] = byte_arrays![
    "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"
];

pub(crate) static EN_NAMES: FormatNames = FormatNames {
    weekdays_full: &EN_WEEKDAYS_FULL,
    weekdays_abbr: &EN_WEEKDAYS_ABBR,
    months_full: &EN_MONTHS_FULL,
    months_abbr: &EN_MONTHS_ABBR,
};

/// bytes **must** be len >= 3
#[inline(always)]
pub(crate) fn parse_month_name_abbrev(bytes: &[u8]) -> Option<u8> {
    let candidate = [
        bytes[0].to_ascii_lowercase(),
        bytes[1].to_ascii_lowercase(),
        bytes[2].to_ascii_lowercase(),
    ];
    match &candidate {
        b"jan" => Some(1),
        b"feb" => Some(2),
        b"mar" => Some(3),
        b"apr" => Some(4),
        b"may" => Some(5),
        b"jun" => Some(6),
        b"jul" => Some(7),
        b"aug" => Some(8),
        b"sep" => Some(9),
        b"oct" => Some(10),
        b"nov" => Some(11),
        b"dec" => Some(12),
        _ => None,
    }
}