use crate::time::Time;
use apr_sys::apr_date_checkmask;
pub fn checkmask(data: &str, mask: &str) -> bool {
let (data, mask) = (
alloc::ffi::CString::new(data).unwrap(),
alloc::ffi::CString::new(mask).unwrap(),
);
unsafe {
apr_date_checkmask(
data.as_ptr() as *const core::ffi::c_char,
mask.as_ptr() as *const core::ffi::c_char,
) != 0
}
}
pub fn parse_http(data: &str) -> Option<Time> {
let data = alloc::ffi::CString::new(data).unwrap();
let rv = unsafe { apr_sys::apr_date_parse_http(data.as_ptr() as *const core::ffi::c_char) };
if rv == 0 {
None
} else {
Some(Time::from(rv))
}
}
pub fn parse_rfc(data: &str) -> Option<Time> {
let data = alloc::ffi::CString::new(data).unwrap();
let rv = unsafe { apr_sys::apr_date_parse_rfc(data.as_ptr() as *const core::ffi::c_char) };
if rv == 0 {
None
} else {
Some(Time::from(rv))
}
}
#[test]
fn test_parse_http() {
let expected = Time::from(784111777000000);
assert_eq!(parse_http("Sun, 06 Nov 1994 08:49:37 GMT"), Some(expected));
assert_eq!(parse_http("Sunday, 06-Nov-94 08:49:37 GMT"), Some(expected));
assert_eq!(parse_http("Sun Nov 6 08:49:37 1994"), Some(expected));
}
#[test]
fn test_parse_http_invalid() {
assert_eq!(parse_http("WTAF"), None);
}
#[test]
fn test_parse_rfc() {
let expected = Time::from(784111777000000);
assert_eq!(parse_rfc("Sun, 06 Nov 1994 08:49:37 GMT"), Some(expected)); assert_eq!(parse_rfc("Sunday, 06-Nov-94 08:49:37 GMT"), Some(expected)); assert_eq!(parse_rfc("Sun Nov 6 08:49:37 1994"), Some(expected)); assert_eq!(parse_rfc("Sun, 6 Nov 1994 08:49:37 GMT"), Some(expected)); assert_eq!(parse_rfc("Sun, 06 Nov 94 08:49:37 GMT"), Some(expected)); assert_eq!(parse_rfc("Sun, 6 Nov 94 08:49:37 GMT"), Some(expected)); let expected_without_secs = Time::from(784111740000000);
assert_eq!(
parse_rfc("Sun, 06 Nov 94 08:49 GMT"),
Some(expected_without_secs)
); assert_eq!(
parse_rfc("Sun, 6 Nov 94 08:49 GMT"),
Some(expected_without_secs)
); assert_eq!(parse_rfc("Sun, 06 Nov 94 8:49:37 GMT"), Some(expected)); assert_eq!(parse_rfc("Sun, 6 Nov 94 8:49:37 GMT"), Some(expected)); }