summaryrefslogtreecommitdiffstats
path: root/rust/src/identifiers.rs
diff options
context:
space:
mode:
Diffstat (limited to 'rust/src/identifiers.rs')
-rw-r--r--rust/src/identifiers.rs40
1 files changed, 38 insertions, 2 deletions
diff --git a/rust/src/identifiers.rs b/rust/src/identifiers.rs
index 37305677..11fae56b 100644
--- a/rust/src/identifiers.rs
+++ b/rust/src/identifiers.rs
@@ -595,6 +595,44 @@ fn test_check_release_stage() {
assert!(check_release_stage("draft ").is_err());
}
+pub fn check_withdrawn_status(raw: &str) -> Result<()> {
+ let valid_types = vec![
+ // Didn't have a controlled vocab so made one up
+ "withdrawn", // generic
+ "retracted",
+ "concern",
+ "legal",
+ "safety",
+ "national-security",
+ "spam",
+
+ // potential more-specific statuses
+ //"author-misconduct",
+ //"author-mistake",
+ //"publisher-misconduct",
+ //"publisher-mistake",
+ //"unreliable",
+ ];
+ for good in valid_types {
+ if raw == good {
+ return Ok(());
+ }
+ }
+ Err(FatcatError::NotInControlledVocabulary(
+ "withdrawn_status (controlled vocabulary)".to_string(),
+ raw.to_string(),
+ ))?
+}
+
+#[test]
+fn test_check_withdrawn_status() {
+ assert!(check_withdrawn_status("legal").is_ok());
+ assert!(check_withdrawn_status("withdrawn").is_ok());
+ assert!(check_withdrawn_status("boondogle").is_err());
+ assert!(check_withdrawn_status("").is_err());
+ assert!(check_withdrawn_status("editor ").is_err());
+}
+
pub fn check_contrib_role(raw: &str) -> Result<()> {
let valid_types = vec![
// Citation Style Language official role types
@@ -635,5 +673,3 @@ fn test_check_contrib_role() {
assert!(check_contrib_role("editor ").is_err());
}
-// TODO: make the above checks "more correct"
-// TODO: check ISBN-13