use indexmap::IndexMap;
#[cfg(feature = "schema")]
use schemars::JsonSchema;
use serde::{Deserialize, Serialize};
#[cfg(feature = "bindings")]
use specta::Type;
use std::collections::HashMap;
pub mod abbreviation;
#[macro_use]
pub mod macros;
#[allow(missing_docs, reason = "internal derives")]
pub mod citation;
#[allow(missing_docs, reason = "internal derives")]
pub mod reference;
pub use abbreviation::AbbreviationMap;
pub use citation::{
Citation, CitationItem, CitationMode, Citations, IntegralNameState, LocatorType, Position,
};
#[derive(Debug, Default, Deserialize, Serialize, Clone)]
#[cfg_attr(feature = "schema", derive(JsonSchema))]
#[cfg_attr(feature = "bindings", derive(Type))]
#[serde(rename_all = "kebab-case")]
pub struct InputBibliography {
#[serde(skip_serializing_if = "Option::is_none")]
pub info: Option<InputBibliographyInfo>,
pub references: Vec<reference::InputReference>,
#[serde(skip_serializing_if = "Option::is_none")]
#[cfg_attr(
feature = "schema",
schemars(with = "Option<std::collections::BTreeMap<String, Vec<String>>>")
)]
pub sets: Option<IndexMap<String, Vec<String>>>,
#[serde(skip_serializing_if = "Option::is_none")]
#[cfg_attr(feature = "bindings", specta(type = Option<serde_json::Value>))]
pub custom: Option<HashMap<String, serde_json::Value>>,
}
#[derive(Debug, Default, Deserialize, Serialize, Clone)]
#[cfg_attr(feature = "schema", derive(JsonSchema))]
#[cfg_attr(feature = "bindings", derive(Type))]
#[serde(rename_all = "kebab-case")]
pub struct InputBibliographyInfo {
#[serde(skip_serializing_if = "Option::is_none")]
pub title: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub author: Option<String>,
}