use crate::biblio::{CitArt, PubMedId};
use crate::general::Date;
use serde::{Deserialize, Serialize};
use serde_repr::{Deserialize_repr, Serialize_repr};
#[derive(Clone, Serialize_repr, Deserialize_repr, PartialEq, Debug, Default)]
#[repr(u8)]
pub enum MedlineEntryStatus {
Publisher = 1,
PreMedline,
#[default]
Medline,
}
#[derive(Clone, Serialize, Deserialize, PartialEq, Debug)]
#[serde(rename_all = "kebab-case")]
pub struct MedlineEntry {
pub uid: Option<u64>,
pub em: Date,
pub cit: CitArt,
#[serde(rename = "abstract")]
pub r#abstract: Option<String>,
pub mesh: Option<Vec<MedlineMesh>>,
pub substance: Option<Vec<MedlineRn>>,
pub xref: Option<Vec<MedlineSi>>,
pub idnum: Option<Vec<String>>,
pub gene: Option<Vec<String>>,
pub pmid: Option<PubMedId>,
pub pub_type: Option<Vec<String>>,
pub mlfield: Option<Vec<MedlineField>>,
pub status: MedlineEntryStatus,
}
#[derive(Clone, Serialize, Deserialize, PartialEq, Debug)]
pub struct MedlineMesh {
pub mp: bool,
pub term: String,
pub qual: Option<Vec<MedlineQual>>,
}
#[derive(Clone, Serialize, Deserialize, PartialEq, Debug)]
pub struct MedlineQual {
pub mp: bool,
pub subh: String,
}
#[derive(Clone, Serialize_repr, Deserialize_repr, PartialEq, Debug)]
#[repr(u8)]
pub enum MedlineSiType {
DDBJ = 1,
CarbBank,
EMBL,
HDB,
GenBank,
HGML,
MIM,
MSD,
PDB,
PIR,
PrfSeqDb,
PSD,
SwissProt,
GDB,
}
#[derive(Clone, Serialize_repr, Deserialize_repr, PartialEq, Debug)]
#[repr(u8)]
pub enum MedlineRnType {
NameOnly,
CAS,
EC,
}
#[derive(Clone, Serialize, Deserialize, PartialEq, Debug)]
pub struct MedlineRn {
#[serde(rename = "type")]
pub r#type: MedlineRnType,
pub cit: Option<String>,
pub name: String,
}
#[derive(Clone, Serialize, Deserialize, PartialEq, Debug)]
pub struct MedlineSi {
#[serde(rename = "type")]
pub r#type: MedlineSiType,
pub cit: Option<String>,
}
#[derive(Clone, Serialize_repr, Deserialize_repr, PartialEq, Debug)]
#[repr(u8)]
pub enum MedlineFieldType {
Other,
Comment,
Erratum,
}
#[derive(Clone, Serialize, Deserialize, PartialEq, Debug)]
pub struct MedlineField {
#[serde(rename = "type")]
pub r#type: MedlineFieldType,
pub cit: Option<String>,
pub ids: Option<Vec<DocRef>>,
}
#[derive(Clone, Serialize_repr, Deserialize_repr, PartialEq, Debug)]
#[repr(u8)]
pub enum DocRefType {
Medline = 1,
PubMed,
NCBIGi,
}
#[derive(Clone, Serialize, Deserialize, PartialEq, Debug)]
pub struct DocRef {
#[serde(rename = "type")]
pub r#type: DocRefType,
pub uid: u64,
}