1use indexmap::IndexMap;
9#[cfg(feature = "schema")]
10use schemars::JsonSchema;
11use serde::{Deserialize, Serialize};
12#[cfg(feature = "bindings")]
13use specta::Type;
14use std::collections::HashMap;
15
16pub mod abbreviation;
18#[macro_use]
20pub mod macros;
21#[allow(missing_docs, reason = "internal derives")]
23pub mod citation;
24#[allow(missing_docs, reason = "internal derives")]
26pub mod reference;
27
28pub use abbreviation::AbbreviationMap;
29pub use citation::{
30 Citation, CitationItem, CitationMode, Citations, IntegralNameState, LocatorType, Position,
31};
32
33#[derive(Debug, Default, Deserialize, Serialize, Clone)]
35#[cfg_attr(feature = "schema", derive(JsonSchema))]
36#[cfg_attr(feature = "bindings", derive(Type))]
37#[serde(rename_all = "kebab-case")]
38pub struct InputBibliography {
39 #[serde(skip_serializing_if = "Option::is_none")]
41 pub info: Option<InputBibliographyInfo>,
42 pub references: Vec<reference::InputReference>,
44 #[serde(skip_serializing_if = "Option::is_none")]
49 #[cfg_attr(
50 feature = "schema",
51 schemars(with = "Option<std::collections::BTreeMap<String, Vec<String>>>")
52 )]
53 pub sets: Option<IndexMap<String, Vec<String>>>,
54 #[serde(skip_serializing_if = "Option::is_none")]
56 #[cfg_attr(feature = "bindings", specta(type = Option<serde_json::Value>))]
57 pub custom: Option<HashMap<String, serde_json::Value>>,
58}
59
60#[derive(Debug, Default, Deserialize, Serialize, Clone)]
62#[cfg_attr(feature = "schema", derive(JsonSchema))]
63#[cfg_attr(feature = "bindings", derive(Type))]
64#[serde(rename_all = "kebab-case")]
65pub struct InputBibliographyInfo {
66 #[serde(skip_serializing_if = "Option::is_none")]
68 pub title: Option<String>,
69 #[serde(skip_serializing_if = "Option::is_none")]
71 pub author: Option<String>,
72}