use crate::general::{Date, DbTag, ObjectId};
use crate::seqloc::SeqId;
use serde::{Deserialize, Serialize};
use serde_repr::{Deserialize_repr, Serialize_repr};
#[derive(Clone, Serialize_repr, Deserialize_repr, PartialEq, Debug)]
#[repr(u8)]
pub enum EMBLDbNameCode {
EMBL,
GenBank,
DDBJ,
GenInfo,
MedLine,
SWISSPROT,
PIR,
PDB,
EPD,
ECD,
TFD,
FlyBase,
ProSite,
Enzyme,
MIM,
EcoSeq,
HIV,
Other = 255,
}
#[derive(Clone, Serialize, Deserialize, PartialEq, Debug)]
#[serde(rename_all = "lowercase")]
pub enum EMBLDbName {
Code(EMBLDbNameCode),
Name(String),
}
#[derive(Clone, Serialize, Deserialize, PartialEq, Debug)]
pub struct EMBLXref {
pub dbname: EMBLDbName,
pub id: Vec<ObjectId>,
}
#[derive(Clone, Serialize_repr, Deserialize_repr, PartialEq, Debug, Default)]
#[repr(u8)]
pub enum EMBLBlockClass {
NotSet,
#[default]
Standard,
Unannotated,
Other = 255,
}
#[derive(Clone, Serialize_repr, Deserialize_repr, PartialEq, Debug)]
#[repr(u8)]
pub enum EMBLBlockDiv {
Fun,
Inv,
Mam,
Org,
Pln,
Pri,
Pro,
Rod,
Syn,
Una,
Vrl,
Vrt,
Pat,
Est,
STS,
Other = 255,
}
#[derive(Clone, Serialize, Deserialize, PartialEq, Debug)]
pub struct EMBLBlock {
pub class: EMBLBlockClass,
pub div: EMBLBlockDiv,
pub creation_date: Date,
pub update_date: Date,
pub extra_acc: Option<Vec<String>>,
pub keywords: Option<Vec<String>>,
pub xref: Option<Vec<EMBLXref>>,
}
#[derive(Clone, Serialize_repr, Deserialize_repr, PartialEq, Debug)]
#[repr(u8)]
pub enum SPBlockClass {
NotSet,
Standard,
Prelim,
Other = 255,
}
#[derive(Clone, Serialize, Deserialize, PartialEq, Debug)]
#[serde(rename_all = "kebab-case")]
pub struct SPBlock {
pub class: SPBlockClass,
pub extra_acc: Option<Vec<String>>,
pub imeth: bool,
pub plasnm: Option<Vec<String>>,
pub seqref: Option<Vec<SeqId>>,
pub dbref: Option<Vec<DbTag>>,
pub keywords: Option<Vec<String>>,
pub created: Option<Date>,
pub sequpd: Option<Date>,
pub annotupd: Option<Date>,
}
#[derive(Clone, Serialize, Deserialize, PartialEq, Debug)]
#[serde(rename_all = "kebab-case")]
pub struct PIRBlock {
pub had_punct: Option<bool>,
pub host: Option<String>,
pub source: Option<String>,
pub summary: Option<String>,
pub genetic: Option<String>,
pub includes: Option<String>,
pub placement: Option<String>,
pub superfamily: Option<String>,
pub keywords: Option<Vec<String>>,
pub cross_reference: Option<String>,
pub date: Option<String>,
pub seq_raw: Option<String>,
pub seqref: Option<Vec<SeqId>>,
}
#[derive(Clone, Serialize, Deserialize, PartialEq, Debug)]
#[serde(rename_all = "kebab-case")]
pub struct GBBlock {
pub extra_accessions: Option<Vec<String>>,
pub source: Option<String>,
pub keywords: Option<Vec<String>>,
pub origin: Option<String>,
pub date: Option<String>,
pub entry_date: Option<Date>,
pub div: Option<String>,
pub taxonomy: Option<String>,
}
#[derive(Clone, Serialize, Deserialize, PartialEq, Debug)]
#[serde(rename_all = "kebab-case")]
pub struct PRFBlock {
pub extra_src: Option<PRFExtraSrc>,
pub keywords: Option<Vec<String>>,
}
#[derive(Clone, Serialize, Deserialize, PartialEq, Debug)]
pub struct PRFExtraSrc {
pub host: Option<String>,
pub part: Option<String>,
pub state: Option<String>,
pub strain: Option<String>,
pub taxon: Option<String>,
}
#[derive(Clone, Serialize, Deserialize, PartialEq, Debug)]
#[serde(rename_all = "kebab-case")]
pub struct PDBBlock {
pub deposition: Date,
pub class: String,
pub compound: Vec<String>,
pub source: Vec<String>,
pub exp_method: Option<String>,
pub replace: Option<PDBReplace>,
}
#[derive(Clone, Serialize, Deserialize, PartialEq, Debug)]
pub struct PDBReplace {
pub date: Date,
pub ids: Vec<String>,
}