From 664808cb9a668af031513f1171ccf159c7c45b83 Mon Sep 17 00:00:00 2001 From: Bruce D'Arcus Date: Tue, 27 Jun 2023 14:25:38 -0400 Subject: [PATCH] feat(bib): identifiers Signed-off-by: Bruce D'Arcus --- bibliography/src/reference.rs | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/bibliography/src/reference.rs b/bibliography/src/reference.rs index 8fb379a..a90bdae 100644 --- a/bibliography/src/reference.rs +++ b/bibliography/src/reference.rs @@ -34,6 +34,8 @@ use serde::{Deserialize, Serialize}; use std::fmt; use style::{locale::MonthList, options::Config}; use url::Url; +use fmt::Display; +use std::fmt::Formatter; //use icu::calendar::DateTime; #[derive(Debug, Deserialize, Serialize, Clone, JsonSchema, PartialEq)] @@ -136,6 +138,26 @@ impl InputReference { } } +/// A value that could be either a number or a string. +// Borrowed from Hayagriva +#[derive(Clone, Debug, PartialEq, Eq, JsonSchema, Deserialize, Serialize)] +#[serde(untagged)] +pub enum NumOrStr { + /// It's a number! + Number(i64), + /// It's a string! + Str(String), +} + +impl Display for NumOrStr { + fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), std::fmt::Error> { + match self { + Self::Number(i) => write!(f, "{}", i), + Self::Str(s) => write!(f, "{}", s), + } + } +} + #[derive(Debug, Deserialize, Serialize, Clone, JsonSchema, PartialEq)] /// A monograph, such as a book or a report, is a monolithic work published or produced as a complete entity. pub struct Monograph { @@ -149,6 +171,9 @@ pub struct Monograph { pub url: Option, pub accessed: Option, pub note: Option, + pub isbn: Option, + pub doi: Option, + pub edition: Option, } #[derive(Debug, Deserialize, Serialize, Clone, JsonSchema, PartialEq)] @@ -164,6 +189,7 @@ pub struct Collection { pub url: Option, pub accessed: Option, pub note: Option, + pub issn: Option, } #[derive(Debug, Deserialize, Serialize, Clone, JsonSchema, PartialEq)] @@ -191,6 +217,10 @@ pub struct SerialComponent { pub url: Option, pub accessed: Option, pub note: Option, + pub doi: Option, + pub pages: Option, + pub volume: Option, + pub issue: Option, } #[derive(Debug, Deserialize, Serialize, Clone, JsonSchema, PartialEq)] @@ -244,6 +274,7 @@ pub struct MonographComponent { pub url: Option, pub accessed: Option, pub note: Option, + pub doi: Option, } pub type RefID = String; @@ -273,6 +304,7 @@ pub enum MonographType { #[derive(Debug, Default, Deserialize, Serialize, Clone, JsonSchema, PartialEq)] #[non_exhaustive] #[serde(rename_all = "kebab-case")] +// TODO merge into refactor pub enum RefType { #[default] Article,