Skip to main content

commonmeta_schema/
lib.rs

1#![forbid(unsafe_code)]
2
3/// Embedded Commonmeta schema v1.0rc1.
4pub const COMMONMETA_SCHEMA_V1_0RC1: &str =
5    include_str!("../schemas/commonmeta_v1.0rc1.json");
6
7/// Embedded Commonmeta schema v1.0rc2.
8pub const COMMONMETA_SCHEMA_V1_0RC2: &str =
9    include_str!("../schemas/commonmeta_v1.0rc2.json");
10
11/// Embedded Commonmeta journal article fixture.
12pub const COMMONMETA_FIXTURE_JOURNAL_ARTICLE: &str =
13    include_str!("../fixtures/commonmeta/journal_article.json");
14
15/// Return an embedded schema by Commonmeta version string.
16///
17/// Currently supported: "1.0rc1", "1.0rc2".
18pub fn schema(version: &str) -> Option<&'static str> {
19    match version {
20        "1.0rc1" => Some(COMMONMETA_SCHEMA_V1_0RC1),
21        "1.0rc2" => Some(COMMONMETA_SCHEMA_V1_0RC2),
22        _ => None,
23    }
24}
25
26/// Return an embedded Commonmeta fixture by name.
27///
28/// Currently supported: "journal_article".
29pub fn fixture(name: &str) -> Option<&'static str> {
30    match name {
31        "journal_article" => Some(COMMONMETA_FIXTURE_JOURNAL_ARTICLE),
32        _ => None,
33    }
34}
35
36#[cfg(test)]
37mod tests {
38    use super::{fixture, schema};
39
40    #[test]
41    fn known_version_is_available() {
42        assert!(schema("1.0rc1").is_some());
43        assert!(schema("1.0rc2").is_some());
44    }
45
46    #[test]
47    fn unknown_version_is_none() {
48        assert!(schema("nope").is_none());
49    }
50
51    #[test]
52    fn known_fixture_is_available() {
53        assert!(fixture("journal_article").is_some());
54    }
55
56    #[test]
57    fn unknown_fixture_is_none() {
58        assert!(fixture("nope").is_none());
59    }
60}