pub mod api;
mod parser;
use crate::ParseError;
use api::Edtf;
use parser::ParsedEdtf;
impl ParsedEdtf {
fn validate(self) -> Result<Edtf, ParseError> {
Ok(match self {
Self::Scientific(scientific) => Edtf::Scientific(scientific.validate()?),
})
}
}
#[cfg(test)]
mod test {
use super::api::ScientificYear;
use super::*;
#[test]
fn scientific_l2() {
assert_eq!(
Edtf::parse("Y17E7"),
Ok(Edtf::Scientific(ScientificYear::new(17, 7, 0)))
);
assert_eq!(
Edtf::parse("Y17E7S3"),
Ok(Edtf::Scientific(ScientificYear::new(17, 7, 3)))
);
assert_eq!(
Edtf::parse("Y-17E7"),
Ok(Edtf::Scientific(ScientificYear::new(-17, 7, 0)))
);
assert_eq!(
Edtf::parse("Y-17E7S3"),
Ok(Edtf::Scientific(ScientificYear::new(-17, 7, 3)))
);
assert_eq!(
Edtf::parse("Y1745E1S3"),
Ok(Edtf::Scientific(ScientificYear::new(1745, 1, 3)))
);
assert_eq!(
Edtf::parse("Y157900S3"),
Ok(Edtf::Scientific(ScientificYear::new(157900, 0, 3)))
);
assert_eq!(
Edtf::parse("Y-157900"),
Ok(Edtf::Scientific(ScientificYear::new(-157900, 0, 0)))
);
assert_eq!(
Edtf::parse("Y-157900S3"),
Ok(Edtf::Scientific(ScientificYear::new(-157900, 0, 3)))
);
assert_eq!(
Edtf::parse("Y157900E3"),
Ok(Edtf::Scientific(ScientificYear::new(157900, 3, 0)))
);
assert_eq!(
Edtf::parse("Y157900E3S3"),
Ok(Edtf::Scientific(ScientificYear::new(157900, 3, 3)))
);
assert_eq!(
Edtf::parse("Y-157900E3"),
Ok(Edtf::Scientific(ScientificYear::new(-157900, 3, 0)))
);
assert_eq!(
Edtf::parse("Y-157900E3S3"),
Ok(Edtf::Scientific(ScientificYear::new(-157900, 3, 3)))
);
assert_eq!(Edtf::parse("Y1745"), Err(ParseError::Invalid));
assert_eq!(Edtf::parse("Y1745S3"), Err(ParseError::Invalid));
assert_eq!(Edtf::parse("Y17E200"), Err(ParseError::Invalid));
assert_eq!(Edtf::parse("Y12345S7"), Err(ParseError::Invalid));
assert_eq!(Edtf::parse("Y1745E0S3"), Err(ParseError::Invalid));
assert_eq!(
Edtf::parse("1234S2"),
Ok(Edtf::Scientific(ScientificYear::new(1234, 0, 2)))
);
assert_eq!(
Edtf::parse("-1234S2"),
Ok(Edtf::Scientific(ScientificYear::new(-1234, 0, 2)))
);
}
}