use serde::{Deserialize, Serialize};
use std::sync::Arc;
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct BibItem {
pub citation_key: String,
pub title: String,
pub authors: Vec<Vec<String>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub pub_month: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub pub_year: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub summary: Option<String>,
pub url: Option<String>,
pub index: Option<u32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub entry_type: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub doi: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub pages: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub volume: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub issue: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub publisher: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub address: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub isbn: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub issn: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub editor: Option<Vec<Vec<String>>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub edition: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub note: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub organization: Option<String>,
#[serde(skip)]
pub hayagriva_entry: Option<Arc<hayagriva::Entry>>,
}
impl BibItem {
#[allow(dead_code)]
pub fn new(
citation_key: &str,
title: String,
authors: Vec<Vec<String>>,
pub_month: Option<String>,
pub_year: Option<String>,
summary: Option<String>,
url: Option<String>,
) -> BibItem {
BibItem {
citation_key: citation_key.to_string(),
title,
authors,
pub_month,
pub_year,
summary,
url,
index: None,
entry_type: None,
doi: None,
pages: None,
volume: None,
issue: None,
publisher: None,
address: None,
isbn: None,
issn: None,
editor: None,
edition: None,
note: None,
organization: None,
hayagriva_entry: None,
}
}
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Citation {
pub item: BibItem,
pub path: String,
#[serde(default)]
pub variant: String,
}