#![allow(missing_docs)]
use serde::{Deserialize, Serialize};
use std::collections::BTreeMap;
#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
#[serde(deny_unknown_fields)]
pub struct LocalizedText {
pub default: String,
#[serde(default)]
pub translations: BTreeMap<String, String>,
}
impl LocalizedText {
#[must_use]
pub fn plain(text: impl Into<String>) -> Self {
Self {
default: text.into(),
translations: BTreeMap::new(),
}
}
}
#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
#[serde(deny_unknown_fields)]
pub struct PackageMetadata {
pub id: String,
pub name: LocalizedText,
pub version: String,
pub description: Option<LocalizedText>,
pub repository: Option<String>,
pub license: Option<String>,
#[serde(default)]
pub authors: Vec<String>,
}
#[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord, Serialize, Deserialize)]
#[serde(deny_unknown_fields)]
pub struct ExternalName {
#[serde(rename = "typeSystem")]
pub type_system: String,
pub name: String,
}
#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase", deny_unknown_fields)]
pub struct Source {
pub id: String,
pub kind: String,
pub designation: String,
pub title: LocalizedText,
pub publisher: Option<String>,
pub edition: Option<String>,
pub publication_date: Option<String>,
pub url: Option<String>,
}
#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
#[serde(deny_unknown_fields)]
pub struct Locator {
pub kind: String,
pub value: String,
}
#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase", deny_unknown_fields)]
pub struct Citation {
pub id: String,
pub source_id: String,
#[serde(default)]
pub locators: Vec<Locator>,
pub note: Option<LocalizedText>,
}