use crate::pbs;
#[derive(Clone, Debug, serde::Serialize, serde::Deserialize, utoipa::ToSchema)]
pub struct ClinvarComment {
pub value: String,
pub data_source: Option<String>,
pub r#type: Option<ClinvarCommentType>,
}
impl TryFrom<pbs::clinvar_data::clinvar_public::Comment> for ClinvarComment {
type Error = anyhow::Error;
fn try_from(value: pbs::clinvar_data::clinvar_public::Comment) -> Result<Self, Self::Error> {
Ok(Self {
value: value.value,
data_source: value.data_source,
r#type: value
.r#type
.map(|t| {
ClinvarCommentType::try_from(
pbs::clinvar_data::clinvar_public::CommentType::try_from(t)?,
)
})
.transpose()?,
})
}
}
#[derive(Clone, Debug, serde::Serialize, serde::Deserialize, utoipa::ToSchema)]
pub struct ClinvarXref {
pub db: String,
pub id: String,
pub r#type: Option<String>,
pub url: Option<String>,
pub status: Option<ClinvarStatus>,
}
impl TryFrom<pbs::clinvar_data::clinvar_public::Xref> for ClinvarXref {
type Error = anyhow::Error;
fn try_from(value: pbs::clinvar_data::clinvar_public::Xref) -> Result<Self, Self::Error> {
Ok(ClinvarXref {
db: value.db,
id: value.id,
r#type: value.r#type,
url: value.url,
status: value
.status
.map(|status| {
ClinvarStatus::try_from(pbs::clinvar_data::clinvar_public::Status::try_from(
status,
)?)
})
.transpose()?,
})
}
}
#[derive(Clone, Debug, serde::Serialize, serde::Deserialize, utoipa::ToSchema)]
pub struct ClinvarCitation {
pub ids: Vec<ClinvarIdType>,
pub url: Option<String>,
pub citation_text: Option<String>,
pub r#type: Option<String>,
pub abbrev: Option<String>,
}
impl TryFrom<pbs::clinvar_data::clinvar_public::Citation> for ClinvarCitation {
type Error = anyhow::Error;
fn try_from(value: pbs::clinvar_data::clinvar_public::Citation) -> Result<Self, Self::Error> {
Ok(ClinvarCitation {
ids: value
.ids
.into_iter()
.map(ClinvarIdType::try_from)
.collect::<Result<Vec<_>, _>>()?,
url: value.url,
citation_text: value.citation_text,
r#type: value.r#type,
abbrev: value.abbrev,
})
}
}
#[derive(Clone, Debug, serde::Serialize, serde::Deserialize, utoipa::ToSchema)]
pub struct ClinvarIdType {
pub value: String,
pub source: String,
}
impl From<pbs::clinvar_data::clinvar_public::citation::IdType> for ClinvarIdType {
fn from(value: pbs::clinvar_data::clinvar_public::citation::IdType) -> Self {
ClinvarIdType {
value: value.value,
source: value.source,
}
}
}
#[derive(Clone, Debug, serde::Serialize, serde::Deserialize, utoipa::ToSchema)]
pub struct ClinvarBaseAttribute {
pub value: Option<String>,
pub integer_value: Option<i64>,
pub date_value: Option<chrono::DateTime<chrono::Utc>>,
}
impl TryFrom<pbs::clinvar_data::clinvar_public::BaseAttribute> for ClinvarBaseAttribute {
type Error = anyhow::Error;
fn try_from(
value: pbs::clinvar_data::clinvar_public::BaseAttribute,
) -> Result<Self, Self::Error> {
Ok(ClinvarBaseAttribute {
value: value.value,
integer_value: value.integer_value,
date_value: value.date_value.map(|x| {
chrono::DateTime::<chrono::Utc>::from_timestamp(x.seconds, x.nanos as u32)
.unwrap_or_default()
}),
})
}
}
#[derive(Clone, Debug, serde::Serialize, serde::Deserialize, utoipa::ToSchema)]
pub struct ClinvarHgvsNucleotideExpression {
pub expression: String,
pub sequence_type: Option<ClinvarNucleotideSequence>,
pub sequence_accession_version: Option<String>,
pub sequence_accession: Option<String>,
pub sequence_version: Option<i32>,
pub change: Option<String>,
pub assembly: Option<String>,
pub submitted: Option<String>,
pub mane_select: Option<bool>,
pub mane_plus_clinical: Option<bool>,
}
impl TryFrom<pbs::clinvar_data::clinvar_public::HgvsNucleotideExpression>
for ClinvarHgvsNucleotideExpression
{
type Error = anyhow::Error;
fn try_from(
value: pbs::clinvar_data::clinvar_public::HgvsNucleotideExpression,
) -> Result<Self, Self::Error> {
Ok(ClinvarHgvsNucleotideExpression {
expression: value.expression,
sequence_type: value
.sequence_type
.map(|sequence_type| {
ClinvarNucleotideSequence::try_from(
pbs::clinvar_data::clinvar_public::NucleotideSequence::try_from(
sequence_type,
)?,
)
})
.transpose()?,
sequence_accession_version: value.sequence_accession_version,
sequence_accession: value.sequence_accession,
sequence_version: value.sequence_version,
change: value.change,
assembly: value.assembly,
submitted: value.submitted,
mane_select: value.mane_select,
mane_plus_clinical: value.mane_plus_clinical,
})
}
}
#[derive(Clone, Debug, serde::Serialize, serde::Deserialize, utoipa::ToSchema)]
pub struct ClinvarHgvsProteinExpression {
pub expression: String,
pub sequence_accession_version: Option<String>,
pub sequence_accession: Option<String>,
pub sequence_version: Option<i32>,
pub change: Option<String>,
}
impl TryFrom<pbs::clinvar_data::clinvar_public::HgvsProteinExpression>
for ClinvarHgvsProteinExpression
{
type Error = anyhow::Error;
fn try_from(
value: pbs::clinvar_data::clinvar_public::HgvsProteinExpression,
) -> Result<Self, Self::Error> {
Ok(ClinvarHgvsProteinExpression {
expression: value.expression,
sequence_accession_version: value.sequence_accession_version,
sequence_accession: value.sequence_accession,
sequence_version: value.sequence_version,
change: value.change,
})
}
}
#[derive(Clone, Debug, serde::Serialize, serde::Deserialize, utoipa::ToSchema)]
pub struct ClinvarHgvsExpression {
pub nucleotide_expression: Option<ClinvarHgvsNucleotideExpression>,
pub protein_expression: Option<ClinvarHgvsProteinExpression>,
pub molecular_consequences: Vec<ClinvarXref>,
pub r#type: ClinvarHgvsType,
pub assembly: Option<String>,
}
impl TryFrom<pbs::clinvar_data::clinvar_public::HgvsExpression> for ClinvarHgvsExpression {
type Error = anyhow::Error;
fn try_from(
value: pbs::clinvar_data::clinvar_public::HgvsExpression,
) -> Result<Self, Self::Error> {
Ok(ClinvarHgvsExpression {
nucleotide_expression: value
.nucleotide_expression
.map(|x| x.try_into())
.transpose()?,
protein_expression: value.protein_expression.map(|x| x.try_into()).transpose()?,
molecular_consequences: value
.molecular_consequences
.into_iter()
.map(|x| x.try_into())
.collect::<Result<_, _>>()?,
r#type: ClinvarHgvsType::try_from(
pbs::clinvar_data::clinvar_public::HgvsType::try_from(value.r#type)?,
)?,
assembly: value.assembly,
})
}
}
#[derive(Clone, Debug, serde::Serialize, serde::Deserialize, utoipa::ToSchema)]
pub struct ClinvarSoftware {
pub name: String,
pub version: Option<String>,
pub purpose: Option<String>,
}
impl TryFrom<pbs::clinvar_data::clinvar_public::Software> for ClinvarSoftware {
type Error = anyhow::Error;
fn try_from(value: pbs::clinvar_data::clinvar_public::Software) -> Result<Self, Self::Error> {
Ok(ClinvarSoftware {
name: value.name,
version: value.version,
purpose: value.purpose,
})
}
}
#[derive(Clone, Debug, serde::Serialize, serde::Deserialize, utoipa::ToSchema)]
pub struct ClinvarDescriptionHistory {
pub description: String,
pub dated: Option<chrono::DateTime<chrono::Utc>>,
}
impl TryFrom<pbs::clinvar_data::clinvar_public::DescriptionHistory> for ClinvarDescriptionHistory {
type Error = anyhow::Error;
fn try_from(
value: pbs::clinvar_data::clinvar_public::DescriptionHistory,
) -> Result<Self, Self::Error> {
Ok(ClinvarDescriptionHistory {
description: value.description,
dated: value.dated.map(|x| {
chrono::DateTime::<chrono::Utc>::from_timestamp(x.seconds, x.nanos as u32)
.unwrap_or_default()
}),
})
}
}
#[derive(Clone, Debug, serde::Serialize, serde::Deserialize, utoipa::ToSchema)]
pub struct ClinvarGenericSetElement {
pub value: String,
pub r#type: String,
pub citations: Vec<ClinvarCitation>,
pub xrefs: Vec<ClinvarXref>,
pub comments: Vec<ClinvarComment>,
}
impl TryFrom<pbs::clinvar_data::clinvar_public::GenericSetElement> for ClinvarGenericSetElement {
type Error = anyhow::Error;
fn try_from(
value: pbs::clinvar_data::clinvar_public::GenericSetElement,
) -> Result<Self, Self::Error> {
Ok(ClinvarGenericSetElement {
value: value.value,
r#type: value.r#type,
citations: value
.citations
.into_iter()
.map(|x| x.try_into())
.collect::<Result<_, _>>()?,
xrefs: value
.xrefs
.into_iter()
.map(|x| x.try_into())
.collect::<Result<_, _>>()?,
comments: value
.comments
.into_iter()
.map(|x| x.try_into())
.collect::<Result<_, _>>()?,
})
}
}
#[derive(Clone, Debug, serde::Serialize, serde::Deserialize, utoipa::ToSchema)]
pub struct ClinvarAttributeSetElement {
pub attribute: Option<ClinvarAttribute>,
pub xrefs: Vec<ClinvarXref>,
pub citations: Vec<ClinvarCitation>,
pub comments: Vec<ClinvarComment>,
}
impl TryFrom<pbs::clinvar_data::clinvar_public::AttributeSetElement>
for ClinvarAttributeSetElement
{
type Error = anyhow::Error;
fn try_from(
value: pbs::clinvar_data::clinvar_public::AttributeSetElement,
) -> Result<Self, Self::Error> {
Ok(ClinvarAttributeSetElement {
attribute: value.attribute.map(|x| x.try_into()).transpose()?,
xrefs: value
.xrefs
.into_iter()
.map(|x| x.try_into())
.collect::<Result<_, _>>()?,
citations: value
.citations
.into_iter()
.map(|x| x.try_into())
.collect::<Result<_, _>>()?,
comments: value
.comments
.into_iter()
.map(|x| x.try_into())
.collect::<Result<_, _>>()?,
})
}
}
#[derive(Clone, Debug, serde::Serialize, serde::Deserialize, utoipa::ToSchema)]
pub struct ClinvarAttribute {
pub base: Option<ClinvarBaseAttribute>,
pub r#type: String,
}
impl TryFrom<pbs::clinvar_data::clinvar_public::attribute_set_element::Attribute>
for ClinvarAttribute
{
type Error = anyhow::Error;
fn try_from(
value: pbs::clinvar_data::clinvar_public::attribute_set_element::Attribute,
) -> Result<Self, Self::Error> {
Ok(ClinvarAttribute {
base: value.base.map(|x| x.try_into()).transpose()?,
r#type: value.r#type,
})
}
}
#[derive(Clone, Debug, serde::Serialize, serde::Deserialize, utoipa::ToSchema)]
pub struct ClinvarTrait {
pub names: Vec<ClinvarGenericSetElement>,
pub symbols: Vec<ClinvarGenericSetElement>,
pub attributes: Vec<ClinvarAttributeSetElement>,
pub trait_relationships: Vec<ClinvarTraitRelationship>,
pub citations: Vec<ClinvarCitation>,
pub xrefs: Vec<ClinvarXref>,
pub comments: Vec<ClinvarComment>,
pub sources: Vec<String>,
}
impl TryFrom<pbs::clinvar_data::clinvar_public::Trait> for ClinvarTrait {
type Error = anyhow::Error;
fn try_from(value: pbs::clinvar_data::clinvar_public::Trait) -> Result<Self, Self::Error> {
Ok(ClinvarTrait {
names: value
.names
.into_iter()
.map(|x| x.try_into())
.collect::<Result<_, _>>()?,
symbols: value
.symbols
.into_iter()
.map(|x| x.try_into())
.collect::<Result<_, _>>()?,
attributes: value
.attributes
.into_iter()
.map(|x| x.try_into())
.collect::<Result<_, _>>()?,
trait_relationships: value
.trait_relationships
.into_iter()
.map(|x| x.try_into())
.collect::<Result<_, _>>()?,
citations: value
.citations
.into_iter()
.map(|x| x.try_into())
.collect::<Result<_, _>>()?,
xrefs: value
.xrefs
.into_iter()
.map(|x| x.try_into())
.collect::<Result<_, _>>()?,
comments: value
.comments
.into_iter()
.map(|x| x.try_into())
.collect::<Result<_, _>>()?,
sources: value.sources,
})
}
}
#[derive(Clone, Debug, serde::Serialize, serde::Deserialize, utoipa::ToSchema)]
pub struct ClinvarTraitRelationship {
pub names: Vec<ClinvarGenericSetElement>,
pub citations: Vec<ClinvarCitation>,
pub xrefs: Vec<ClinvarXref>,
pub comments: Vec<ClinvarComment>,
pub sources: Vec<String>,
pub r#type: ClinvarTraitRelationshipType,
}
impl TryFrom<pbs::clinvar_data::clinvar_public::r#trait::TraitRelationship>
for ClinvarTraitRelationship
{
type Error = anyhow::Error;
fn try_from(
value: pbs::clinvar_data::clinvar_public::r#trait::TraitRelationship,
) -> Result<Self, Self::Error> {
Ok(ClinvarTraitRelationship {
names: value
.names
.into_iter()
.map(|x| x.try_into())
.collect::<Result<_, _>>()?,
citations: value
.citations
.into_iter()
.map(|x| x.try_into())
.collect::<Result<_, _>>()?,
xrefs: value
.xrefs
.into_iter()
.map(|x| x.try_into())
.collect::<Result<_, _>>()?,
comments: value
.comments
.into_iter()
.map(|x| x.try_into())
.collect::<Result<_, _>>()?,
sources: value.sources,
r#type: ClinvarTraitRelationshipType::try_from(
pbs::clinvar_data::clinvar_public::r#trait::r#trait_relationship::Type::try_from(
value.r#type,
)?,
)?,
})
}
}
#[derive(
Clone,
Copy,
Debug,
PartialEq,
Eq,
Hash,
PartialOrd,
Ord,
serde::Serialize,
serde::Deserialize,
strum::Display,
strum::EnumString,
utoipa::ToSchema,
)]
#[serde(rename_all = "snake_case")]
#[strum(serialize_all = "snake_case")]
pub enum ClinvarTraitRelationshipType {
Phenotype,
Subphenotype,
DrugResponseAndDisease,
CoOccuringCondition,
FindingMember,
}
impl TryFrom<pbs::clinvar_data::clinvar_public::r#trait::r#trait_relationship::Type>
for ClinvarTraitRelationshipType
{
type Error = anyhow::Error;
fn try_from(
value: pbs::clinvar_data::clinvar_public::r#trait::r#trait_relationship::Type,
) -> Result<Self, Self::Error> {
match value {
pbs::clinvar_data::clinvar_public::r#trait::r#trait_relationship::Type::Phenotype => {
Ok(ClinvarTraitRelationshipType::Phenotype)
}
pbs::clinvar_data::clinvar_public::r#trait::r#trait_relationship::Type::Subphenotype => {
Ok(ClinvarTraitRelationshipType::Subphenotype)
}
pbs::clinvar_data::clinvar_public::r#trait::r#trait_relationship::Type::DrugResponseAndDisease => {
Ok(ClinvarTraitRelationshipType::DrugResponseAndDisease)
}
pbs::clinvar_data::clinvar_public::r#trait::r#trait_relationship::Type::CoOccuringCondition => {
Ok(ClinvarTraitRelationshipType::CoOccuringCondition)
}
pbs::clinvar_data::clinvar_public::r#trait::r#trait_relationship::Type::FindingMember => {
Ok(ClinvarTraitRelationshipType::FindingMember)
}
_ => Err(anyhow::anyhow!(
"Invalid value for TraitRelationshipType: {:?}",
value
)),
}
}
}
#[derive(Clone, Debug, serde::Serialize, serde::Deserialize, utoipa::ToSchema)]
pub struct ClinvarIndication {
pub traits: Vec<ClinvarTrait>,
pub names: Vec<ClinvarGenericSetElement>,
pub attributes: Vec<ClinvarAttributeSetElement>,
pub xrefs: Vec<ClinvarXref>,
pub citations: Vec<ClinvarCitation>,
pub comments: Vec<ClinvarComment>,
pub r#type: ClinvarIndicationType,
}
impl TryFrom<pbs::clinvar_data::clinvar_public::Indication> for ClinvarIndication {
type Error = anyhow::Error;
fn try_from(value: pbs::clinvar_data::clinvar_public::Indication) -> Result<Self, Self::Error> {
Ok(ClinvarIndication {
traits: value
.traits
.into_iter()
.map(|x| x.try_into())
.collect::<Result<_, _>>()?,
names: value
.names
.into_iter()
.map(|x| x.try_into())
.collect::<Result<_, _>>()?,
attributes: value
.attributes
.into_iter()
.map(|x| x.try_into())
.collect::<Result<_, _>>()?,
xrefs: value
.xrefs
.into_iter()
.map(|x| x.try_into())
.collect::<Result<_, _>>()?,
citations: value
.citations
.into_iter()
.map(|x| x.try_into())
.collect::<Result<_, _>>()?,
comments: value
.comments
.into_iter()
.map(|x| x.try_into())
.collect::<Result<_, _>>()?,
r#type: ClinvarIndicationType::try_from(
pbs::clinvar_data::clinvar_public::indication::Type::try_from(value.r#type)?,
)?,
})
}
}
#[derive(
Clone,
Copy,
Debug,
PartialEq,
Eq,
Hash,
PartialOrd,
Ord,
serde::Serialize,
serde::Deserialize,
strum::Display,
strum::EnumString,
utoipa::ToSchema,
)]
#[serde(rename_all = "snake_case")]
#[strum(serialize_all = "snake_case")]
pub enum ClinvarIndicationType {
Indication,
}
impl TryFrom<pbs::clinvar_data::clinvar_public::indication::Type> for ClinvarIndicationType {
type Error = anyhow::Error;
fn try_from(
value: pbs::clinvar_data::clinvar_public::indication::Type,
) -> Result<Self, Self::Error> {
match value {
pbs::clinvar_data::clinvar_public::indication::Type::Indication => {
Ok(ClinvarIndicationType::Indication)
}
_ => Err(anyhow::anyhow!(
"Invalid value for IndicationType: {:?}",
value
)),
}
}
}
#[derive(Clone, Debug, serde::Serialize, serde::Deserialize, utoipa::ToSchema)]
pub struct ClinvarTraitSet {
pub traits: Vec<ClinvarTrait>,
pub names: Vec<ClinvarGenericSetElement>,
pub symbols: Vec<ClinvarGenericSetElement>,
pub attributes: Vec<ClinvarAttributeSetElement>,
pub xrefs: Vec<ClinvarXref>,
pub citations: Vec<ClinvarCitation>,
pub comments: Vec<ClinvarComment>,
pub r#type: ClinvarTraitSetType,
pub date_last_evaluated: Option<chrono::DateTime<chrono::Utc>>,
pub id: Option<i64>,
pub contributes_to_aggregate_classification: Option<bool>,
pub lower_level_of_evidence: Option<bool>,
pub multiple_condition_explanation: Option<String>,
}
impl TryFrom<pbs::clinvar_data::clinvar_public::TraitSet> for ClinvarTraitSet {
type Error = anyhow::Error;
fn try_from(value: pbs::clinvar_data::clinvar_public::TraitSet) -> Result<Self, Self::Error> {
Ok(ClinvarTraitSet {
traits: value
.traits
.into_iter()
.map(|x| x.try_into())
.collect::<Result<_, _>>()?,
names: value
.names
.into_iter()
.map(|x| x.try_into())
.collect::<Result<_, _>>()?,
symbols: value
.symbols
.into_iter()
.map(|x| x.try_into())
.collect::<Result<_, _>>()?,
attributes: value
.attributes
.into_iter()
.map(|x| x.try_into())
.collect::<Result<_, _>>()?,
xrefs: value
.xrefs
.into_iter()
.map(|x| x.try_into())
.collect::<Result<_, _>>()?,
citations: value
.citations
.into_iter()
.map(|x| x.try_into())
.collect::<Result<_, _>>()?,
comments: value
.comments
.into_iter()
.map(|x| x.try_into())
.collect::<Result<_, _>>()?,
r#type: ClinvarTraitSetType::try_from(
pbs::clinvar_data::clinvar_public::trait_set::Type::try_from(value.r#type)?,
)?,
date_last_evaluated: value.date_last_evaluated.map(|x| {
chrono::DateTime::<chrono::Utc>::from_timestamp(x.seconds, x.nanos as u32)
.unwrap_or_default()
}),
id: value.id,
contributes_to_aggregate_classification: value.contributes_to_aggregate_classification,
lower_level_of_evidence: value.lower_level_of_evidence,
multiple_condition_explanation: value.multiple_condition_explanation,
})
}
}
#[derive(
Clone,
Copy,
Debug,
PartialEq,
Eq,
Hash,
PartialOrd,
Ord,
serde::Serialize,
serde::Deserialize,
strum::Display,
strum::EnumString,
utoipa::ToSchema,
)]
#[serde(rename_all = "snake_case")]
#[strum(serialize_all = "snake_case")]
pub enum ClinvarTraitSetType {
Disease,
DrugResponse,
Finding,
PhenotypeInstruction,
TraitChoice,
}
impl TryFrom<pbs::clinvar_data::clinvar_public::trait_set::Type> for ClinvarTraitSetType {
type Error = anyhow::Error;
fn try_from(
value: pbs::clinvar_data::clinvar_public::trait_set::Type,
) -> Result<Self, Self::Error> {
match value {
pbs::clinvar_data::clinvar_public::trait_set::Type::Disease => {
Ok(ClinvarTraitSetType::Disease)
}
pbs::clinvar_data::clinvar_public::trait_set::Type::DrugResponse => {
Ok(ClinvarTraitSetType::DrugResponse)
}
pbs::clinvar_data::clinvar_public::trait_set::Type::Finding => {
Ok(ClinvarTraitSetType::Finding)
}
pbs::clinvar_data::clinvar_public::trait_set::Type::PhenotypeInstruction => {
Ok(ClinvarTraitSetType::PhenotypeInstruction)
}
pbs::clinvar_data::clinvar_public::trait_set::Type::TraitChoice => {
Ok(ClinvarTraitSetType::TraitChoice)
}
_ => Err(anyhow::anyhow!(
"Invalid value for TraitSetType: {:?}",
value
)),
}
}
}
#[derive(Clone, Debug, serde::Serialize, serde::Deserialize, utoipa::ToSchema)]
pub struct ClinvarAggregatedGermlineClassification {
pub review_status: ClinvarAggregateGermlineReviewStatus,
pub description: Option<String>,
pub explanation: Option<ClinvarComment>,
pub xrefs: Vec<ClinvarXref>,
pub citations: Vec<ClinvarCitation>,
pub comments: Vec<ClinvarComment>,
pub history_records: Vec<ClinvarDescriptionHistory>,
pub conditions: Vec<ClinvarTraitSet>,
pub date_last_evaluated: Option<chrono::DateTime<chrono::Utc>>,
pub date_created: Option<chrono::DateTime<chrono::Utc>>,
pub most_recent_submission: Option<chrono::DateTime<chrono::Utc>>,
pub number_of_submitters: Option<i32>,
pub number_of_submissions: Option<i32>,
}
impl TryFrom<pbs::clinvar_data::clinvar_public::AggregatedGermlineClassification>
for ClinvarAggregatedGermlineClassification
{
type Error = anyhow::Error;
fn try_from(
value: pbs::clinvar_data::clinvar_public::AggregatedGermlineClassification,
) -> Result<Self, Self::Error> {
Ok(ClinvarAggregatedGermlineClassification {
review_status: ClinvarAggregateGermlineReviewStatus::try_from(
pbs::clinvar_data::clinvar_public::AggregateGermlineReviewStatus::try_from(
value.review_status,
)?,
)?,
description: value.description,
explanation: value.explanation.map(|x| x.try_into()).transpose()?,
xrefs: value
.xrefs
.into_iter()
.map(|x| x.try_into())
.collect::<Result<_, _>>()?,
citations: value
.citations
.into_iter()
.map(|x| x.try_into())
.collect::<Result<_, _>>()?,
comments: value
.comments
.into_iter()
.map(|x| x.try_into())
.collect::<Result<_, _>>()?,
history_records: value
.history_records
.into_iter()
.map(|x| x.try_into())
.collect::<Result<_, _>>()?,
conditions: value
.conditions
.into_iter()
.map(|x| x.try_into())
.collect::<Result<_, _>>()?,
date_last_evaluated: value.date_last_evaluated.map(|x| {
chrono::DateTime::<chrono::Utc>::from_timestamp(x.seconds, x.nanos as u32)
.unwrap_or_default()
}),
date_created: value.date_created.map(|x| {
chrono::DateTime::<chrono::Utc>::from_timestamp(x.seconds, x.nanos as u32)
.unwrap_or_default()
}),
most_recent_submission: value.most_recent_submission.map(|x| {
chrono::DateTime::<chrono::Utc>::from_timestamp(x.seconds, x.nanos as u32)
.unwrap_or_default()
}),
number_of_submitters: value.number_of_submitters,
number_of_submissions: value.number_of_submissions,
})
}
}
#[derive(Clone, Debug, serde::Serialize, serde::Deserialize, utoipa::ToSchema)]
pub struct ClinvarAggregatedSomaticClinicalImpact {
pub review_status: ClinvarAggregateSomaticClinicalImpactReviewStatus,
pub description: Option<String>,
pub xrefs: Vec<ClinvarXref>,
pub citations: Vec<ClinvarCitation>,
pub comments: Vec<ClinvarComment>,
pub history_records: Vec<ClinvarDescriptionHistory>,
pub conditions: Vec<ClinvarTraitSet>,
pub date_last_evaluated: Option<chrono::DateTime<chrono::Utc>>,
pub date_created: Option<chrono::DateTime<chrono::Utc>>,
pub most_recent_submission: Option<chrono::DateTime<chrono::Utc>>,
pub number_of_submitters: Option<i32>,
pub number_of_submissions: Option<i32>,
}
impl TryFrom<pbs::clinvar_data::clinvar_public::AggregatedSomaticClinicalImpact>
for ClinvarAggregatedSomaticClinicalImpact
{
type Error = anyhow::Error;
fn try_from(
value: pbs::clinvar_data::clinvar_public::AggregatedSomaticClinicalImpact,
) -> Result<Self, Self::Error> {
Ok(ClinvarAggregatedSomaticClinicalImpact {
review_status: ClinvarAggregateSomaticClinicalImpactReviewStatus::try_from(
pbs::clinvar_data::clinvar_public::AggregateSomaticClinicalImpactReviewStatus::try_from(
value.review_status,
)?,
)?,
description: value.description,
xrefs: value
.xrefs
.into_iter()
.map(|x| x.try_into())
.collect::<Result<_, _>>()?,
citations: value
.citations
.into_iter()
.map(|x| x.try_into())
.collect::<Result<_, _>>()?,
comments: value
.comments
.into_iter()
.map(|x| x.try_into())
.collect::<Result<_, _>>()?,
history_records: value
.history_records
.into_iter()
.map(|x| x.try_into())
.collect::<Result<_, _>>()?,
conditions: value
.conditions
.into_iter()
.map(|x| x.try_into())
.collect::<Result<_, _>>()?,
date_last_evaluated: value.date_last_evaluated.map(|x| {
chrono::DateTime::<chrono::Utc>::from_timestamp(x.seconds, x.nanos as u32)
.unwrap_or_default()
}),
date_created: value.date_created.map(|x| {
chrono::DateTime::<chrono::Utc>::from_timestamp(x.seconds, x.nanos as u32)
.unwrap_or_default()
}),
most_recent_submission: value.most_recent_submission.map(|x| {
chrono::DateTime::<chrono::Utc>::from_timestamp(x.seconds, x.nanos as u32)
.unwrap_or_default()
}),
number_of_submitters: value.number_of_submitters,
number_of_submissions: value.number_of_submissions,
})
}
}
#[derive(Clone, Debug, serde::Serialize, serde::Deserialize, utoipa::ToSchema)]
pub struct ClinvarAggregatedOncogenicityClassification {
pub review_status: ClinvarAggregateOncogenicityReviewStatus,
pub description: Option<String>,
pub xrefs: Vec<ClinvarXref>,
pub citations: Vec<ClinvarCitation>,
pub comments: Vec<ClinvarComment>,
pub history_records: Vec<ClinvarDescriptionHistory>,
pub conditions: Vec<ClinvarTraitSet>,
pub date_last_evaluated: Option<chrono::DateTime<chrono::Utc>>,
pub date_created: Option<chrono::DateTime<chrono::Utc>>,
pub most_recent_submission: Option<chrono::DateTime<chrono::Utc>>,
pub number_of_submitters: Option<i32>,
pub number_of_submissions: Option<i32>,
}
impl TryFrom<pbs::clinvar_data::clinvar_public::AggregatedOncogenicityClassification>
for ClinvarAggregatedOncogenicityClassification
{
type Error = anyhow::Error;
fn try_from(
value: pbs::clinvar_data::clinvar_public::AggregatedOncogenicityClassification,
) -> Result<Self, Self::Error> {
Ok(ClinvarAggregatedOncogenicityClassification {
review_status: ClinvarAggregateOncogenicityReviewStatus::try_from(
pbs::clinvar_data::clinvar_public::AggregateOncogenicityReviewStatus::try_from(
value.review_status,
)?,
)?,
description: value.description,
xrefs: value
.xrefs
.into_iter()
.map(|x| x.try_into())
.collect::<Result<_, _>>()?,
citations: value
.citations
.into_iter()
.map(|x| x.try_into())
.collect::<Result<_, _>>()?,
comments: value
.comments
.into_iter()
.map(|x| x.try_into())
.collect::<Result<_, _>>()?,
history_records: value
.history_records
.into_iter()
.map(|x| x.try_into())
.collect::<Result<_, _>>()?,
conditions: value
.conditions
.into_iter()
.map(|x| x.try_into())
.collect::<Result<_, _>>()?,
date_last_evaluated: value.date_last_evaluated.map(|x| {
chrono::DateTime::<chrono::Utc>::from_timestamp(x.seconds, x.nanos as u32)
.unwrap_or_default()
}),
date_created: value.date_created.map(|x| {
chrono::DateTime::<chrono::Utc>::from_timestamp(x.seconds, x.nanos as u32)
.unwrap_or_default()
}),
most_recent_submission: value.most_recent_submission.map(|x| {
chrono::DateTime::<chrono::Utc>::from_timestamp(x.seconds, x.nanos as u32)
.unwrap_or_default()
}),
number_of_submitters: value.number_of_submitters,
number_of_submissions: value.number_of_submissions,
})
}
}
#[derive(Clone, Debug, serde::Serialize, serde::Deserialize, utoipa::ToSchema)]
pub struct ClinvarAggregateClassificationSet {
pub germline_classification: Option<ClinvarAggregatedGermlineClassification>,
pub somatic_clinical_impact: Option<ClinvarAggregatedSomaticClinicalImpact>,
pub oncogenicity_classification: Option<ClinvarAggregatedOncogenicityClassification>,
}
impl TryFrom<pbs::clinvar_data::clinvar_public::AggregateClassificationSet>
for ClinvarAggregateClassificationSet
{
type Error = anyhow::Error;
fn try_from(
value: pbs::clinvar_data::clinvar_public::AggregateClassificationSet,
) -> Result<Self, Self::Error> {
Ok(ClinvarAggregateClassificationSet {
germline_classification: value
.germline_classification
.map(|x| x.try_into())
.transpose()?,
somatic_clinical_impact: value
.somatic_clinical_impact
.map(|x| x.try_into())
.transpose()?,
oncogenicity_classification: value
.oncogenicity_classification
.map(|x| x.try_into())
.transpose()?,
})
}
}
#[derive(Clone, Debug, serde::Serialize, serde::Deserialize, utoipa::ToSchema)]
pub struct ClinvarClinicalSignificance {
pub review_status: Option<ClinvarSubmitterReviewStatus>,
pub description: Option<String>,
pub explanation: Option<ClinvarComment>,
pub xrefs: Vec<ClinvarXref>,
pub citations: Vec<ClinvarCitation>,
pub comments: Vec<ClinvarComment>,
pub date_last_evaluated: Option<chrono::DateTime<chrono::Utc>>,
}
impl TryFrom<pbs::clinvar_data::clinvar_public::ClinicalSignificance>
for ClinvarClinicalSignificance
{
type Error = anyhow::Error;
fn try_from(
value: pbs::clinvar_data::clinvar_public::ClinicalSignificance,
) -> Result<Self, Self::Error> {
Ok(ClinvarClinicalSignificance {
review_status: value
.review_status
.map(|review_status| {
ClinvarSubmitterReviewStatus::try_from(
pbs::clinvar_data::clinvar_public::SubmitterReviewStatus::try_from(
review_status,
)?,
)
})
.transpose()?,
description: value.description,
explanation: value.explanation.map(|x| x.try_into()).transpose()?,
xrefs: value
.xrefs
.into_iter()
.map(|x| x.try_into())
.collect::<Result<_, _>>()?,
citations: value
.citations
.into_iter()
.map(|x| x.try_into())
.collect::<Result<_, _>>()?,
comments: value
.comments
.into_iter()
.map(|x| x.try_into())
.collect::<Result<_, _>>()?,
date_last_evaluated: value.date_last_evaluated.map(|x| {
chrono::DateTime::<chrono::Utc>::from_timestamp(x.seconds, x.nanos as u32)
.unwrap_or_default()
}),
})
}
}
#[derive(Clone, Debug, serde::Serialize, serde::Deserialize, utoipa::ToSchema)]
pub struct ClinvarAlleleDescription {
pub name: String,
pub relative_orientation: Option<ClinvarRelativeOrientation>,
pub zygosity: Option<ClinvarZygosity>,
pub clinical_significance: Option<ClinvarClinicalSignificance>,
}
impl TryFrom<pbs::clinvar_data::clinvar_public::AlleleDescription> for ClinvarAlleleDescription {
type Error = anyhow::Error;
fn try_from(
value: pbs::clinvar_data::clinvar_public::AlleleDescription,
) -> Result<Self, Self::Error> {
Ok(ClinvarAlleleDescription {
name: value.name,
relative_orientation: value
.relative_orientation
.map(|relative_orientation|
ClinvarRelativeOrientation::try_from(
pbs::clinvar_data::clinvar_public::allele_description::RelativeOrientation::try_from(relative_orientation)?
)
)
.transpose()?,
zygosity: value.zygosity .map(|zygosity| {
ClinvarZygosity::try_from(pbs::clinvar_data::clinvar_public::Zygosity::try_from(
zygosity,
)?)
})
.transpose()?,
clinical_significance: value
.clinical_significance
.map(|x| x.try_into())
.transpose()?,
})
}
}
#[derive(
Clone,
Copy,
Debug,
PartialEq,
Eq,
Hash,
PartialOrd,
Ord,
serde::Serialize,
serde::Deserialize,
strum::Display,
strum::EnumString,
utoipa::ToSchema,
)]
#[serde(rename_all = "snake_case")]
#[strum(serialize_all = "snake_case")]
pub enum ClinvarRelativeOrientation {
Cis,
Trans,
Unknown,
}
impl TryFrom<pbs::clinvar_data::clinvar_public::allele_description::RelativeOrientation>
for ClinvarRelativeOrientation
{
type Error = anyhow::Error;
fn try_from(
value: pbs::clinvar_data::clinvar_public::allele_description::RelativeOrientation,
) -> Result<Self, Self::Error> {
match value {
pbs::clinvar_data::clinvar_public::allele_description::RelativeOrientation::Cis => {
Ok(ClinvarRelativeOrientation::Cis)
}
pbs::clinvar_data::clinvar_public::allele_description::RelativeOrientation::Trans => {
Ok(ClinvarRelativeOrientation::Trans)
}
pbs::clinvar_data::clinvar_public::allele_description::RelativeOrientation::Unknown => {
Ok(ClinvarRelativeOrientation::Unknown)
}
_ => Err(anyhow::anyhow!(
"Invalid value for RelativeOrientation: {:?}",
value
)),
}
}
}
#[derive(Clone, Debug, serde::Serialize, serde::Deserialize, utoipa::ToSchema)]
pub struct ClinvarRecordHistory {
pub comment: Option<ClinvarComment>,
pub accession: String,
pub version: i32,
pub date_changed: Option<chrono::DateTime<chrono::Utc>>,
pub variation_id: Option<i64>,
}
impl TryFrom<pbs::clinvar_data::clinvar_public::RecordHistory> for ClinvarRecordHistory {
type Error = anyhow::Error;
fn try_from(
record_history: pbs::clinvar_data::clinvar_public::RecordHistory,
) -> Result<Self, anyhow::Error> {
Ok(Self {
comment: record_history.comment.map(|x| x.try_into()).transpose()?,
accession: record_history.accession,
version: record_history.version,
date_changed: record_history.date_changed.map(|x| {
chrono::DateTime::<chrono::Utc>::from_timestamp(x.seconds, x.nanos as u32)
.unwrap_or_default()
}),
variation_id: record_history.variation_id,
})
}
}
#[derive(Clone, Debug, serde::Serialize, serde::Deserialize, utoipa::ToSchema)]
pub struct ClinvarClassificationScv {
pub review_status: ClinvarSubmitterReviewStatus,
pub germline_classification: Option<String>,
pub somatic_clinical_impact: Option<ClinvarClassificationScvSomaticClinicalImpact>,
pub oncogenicity_classification: Option<String>,
pub explanation_of_classification: Option<String>,
pub classification_scores: Vec<ClinvarClassificationScore>,
pub xrefs: Vec<ClinvarXref>,
pub citations: Vec<ClinvarCitation>,
pub comments: Vec<ClinvarComment>,
pub date_last_evaluated: Option<chrono::DateTime<chrono::Utc>>,
}
impl TryFrom<pbs::clinvar_data::clinvar_public::ClassificationScv> for ClinvarClassificationScv {
type Error = anyhow::Error;
fn try_from(
classification_scv: pbs::clinvar_data::clinvar_public::ClassificationScv,
) -> Result<Self, Self::Error> {
Ok(Self {
review_status: ClinvarSubmitterReviewStatus::try_from(
pbs::clinvar_data::clinvar_public::SubmitterReviewStatus::try_from(
classification_scv.review_status,
)?,
)?,
germline_classification: classification_scv.germline_classification,
somatic_clinical_impact: classification_scv.somatic_clinical_impact.map(|x| x.into()),
oncogenicity_classification: classification_scv.oncogenicity_classification,
explanation_of_classification: classification_scv.explanation_of_classification,
classification_scores: classification_scv
.classification_scores
.into_iter()
.map(|x| x.into())
.collect(),
xrefs: classification_scv
.xrefs
.into_iter()
.map(|x| x.try_into())
.collect::<Result<Vec<_>, _>>()?,
citations: classification_scv
.citations
.into_iter()
.map(|x| x.try_into())
.collect::<Result<Vec<_>, _>>()?,
comments: classification_scv
.comments
.into_iter()
.map(|x| x.try_into())
.collect::<Result<Vec<_>, _>>()?,
date_last_evaluated: classification_scv.date_last_evaluated.map(|x| {
chrono::DateTime::<chrono::Utc>::from_timestamp(x.seconds, x.nanos as u32)
.unwrap_or_default()
}),
})
}
}
#[derive(Clone, Debug, serde::Serialize, serde::Deserialize, utoipa::ToSchema)]
pub struct ClinvarClassificationScvSomaticClinicalImpact {
pub value: String,
pub clinical_impact_assertion_type: Option<String>,
pub clinical_impact_clinical_significance: Option<String>,
pub drug_for_therapeutic_assertion: Option<String>,
}
impl From<pbs::clinvar_data::clinvar_public::classification_scv::SomaticClinicalImpact>
for ClinvarClassificationScvSomaticClinicalImpact
{
fn from(
classification_scv_somatic_clinical_impact: pbs::clinvar_data::clinvar_public::classification_scv::SomaticClinicalImpact,
) -> Self {
Self {
value: classification_scv_somatic_clinical_impact.value,
clinical_impact_assertion_type: classification_scv_somatic_clinical_impact
.clinical_impact_assertion_type,
clinical_impact_clinical_significance: classification_scv_somatic_clinical_impact
.clinical_impact_clinical_significance,
drug_for_therapeutic_assertion: classification_scv_somatic_clinical_impact
.drug_for_therapeutic_assertion,
}
}
}
#[derive(Clone, Debug, serde::Serialize, serde::Deserialize, utoipa::ToSchema)]
pub struct ClinvarClassificationScore {
pub value: f64,
pub r#type: Option<String>,
}
impl From<pbs::clinvar_data::clinvar_public::classification_scv::ClassificationScore>
for ClinvarClassificationScore
{
fn from(
classification_score: pbs::clinvar_data::clinvar_public::classification_scv::ClassificationScore,
) -> Self {
Self {
value: classification_score.value,
r#type: classification_score.r#type,
}
}
}
#[derive(Clone, Debug, serde::Serialize, serde::Deserialize, utoipa::ToSchema)]
pub struct ClinvarSubmitterIdentifiers {
pub submitter_name: String,
pub org_id: i64,
pub org_category: String,
pub org_abbreviation: Option<String>,
}
impl From<pbs::clinvar_data::clinvar_public::SubmitterIdentifiers> for ClinvarSubmitterIdentifiers {
fn from(
submitter_identifiers: pbs::clinvar_data::clinvar_public::SubmitterIdentifiers,
) -> Self {
Self {
submitter_name: submitter_identifiers.submitter_name,
org_id: submitter_identifiers.org_id,
org_category: submitter_identifiers.org_category,
org_abbreviation: submitter_identifiers.org_abbreviation,
}
}
}
#[derive(Clone, Debug, serde::Serialize, serde::Deserialize, utoipa::ToSchema)]
pub struct ClinvarSpecies {
pub name: String,
pub taxonomy_id: Option<i32>,
}
impl From<pbs::clinvar_data::clinvar_public::Species> for ClinvarSpecies {
fn from(species: pbs::clinvar_data::clinvar_public::Species) -> Self {
Self {
name: species.name,
taxonomy_id: species.taxonomy_id,
}
}
}
#[derive(Clone, Debug, serde::Serialize, serde::Deserialize, utoipa::ToSchema)]
pub struct ClinvarClassifiedCondition {
pub value: String,
pub db: Option<String>,
pub id: Option<String>,
}
impl TryFrom<pbs::clinvar_data::clinvar_public::ClassifiedCondition>
for ClinvarClassifiedCondition
{
type Error = anyhow::Error;
fn try_from(
value: pbs::clinvar_data::clinvar_public::ClassifiedCondition,
) -> Result<Self, Self::Error> {
Ok(ClinvarClassifiedCondition {
value: value.value,
db: value.db,
id: value.id,
})
}
}
#[derive(Clone, Debug, serde::Serialize, serde::Deserialize, utoipa::ToSchema)]
pub struct ClinvarClinicalAssertionRecordHistory {
pub comment: Option<ClinvarComment>,
pub accession: String,
pub version: Option<i32>,
pub date_changed: Option<chrono::DateTime<chrono::Utc>>,
}
impl TryFrom<pbs::clinvar_data::clinvar_public::ClinicalAssertionRecordHistory>
for ClinvarClinicalAssertionRecordHistory
{
type Error = anyhow::Error;
fn try_from(
value: pbs::clinvar_data::clinvar_public::ClinicalAssertionRecordHistory,
) -> Result<Self, Self::Error> {
Ok(ClinvarClinicalAssertionRecordHistory {
comment: value.comment.map(|x| x.try_into()).transpose()?,
accession: value.accession,
version: value.version,
date_changed: value.date_changed.map(|x| {
chrono::DateTime::<chrono::Utc>::from_timestamp(x.seconds, x.nanos as u32)
.unwrap_or_default()
}),
})
}
}
#[derive(Clone, Debug, serde::Serialize, serde::Deserialize, utoipa::ToSchema)]
pub struct ClinvarFunctionalConsequence {
pub xrefs: Vec<ClinvarXref>,
pub citations: Vec<ClinvarCitation>,
pub comments: Vec<ClinvarComment>,
pub value: String,
}
impl TryFrom<pbs::clinvar_data::clinvar_public::FunctionalConsequence>
for ClinvarFunctionalConsequence
{
type Error = anyhow::Error;
fn try_from(
value: pbs::clinvar_data::clinvar_public::FunctionalConsequence,
) -> Result<Self, Self::Error> {
Ok(ClinvarFunctionalConsequence {
xrefs: value
.xrefs
.into_iter()
.map(|x| x.try_into())
.collect::<Result<_, _>>()?,
citations: value
.citations
.into_iter()
.map(|x| x.try_into())
.collect::<Result<_, _>>()?,
comments: value
.comments
.into_iter()
.map(|x| x.try_into())
.collect::<Result<_, _>>()?,
value: value.value,
})
}
}
#[derive(Clone, Debug, serde::Serialize, serde::Deserialize, utoipa::ToSchema)]
pub struct ClinvarGeneralCitations {
pub xrefs: Vec<ClinvarXref>,
pub citations: Vec<ClinvarCitation>,
}
impl TryFrom<pbs::clinvar_data::clinvar_public::GeneralCitations> for ClinvarGeneralCitations {
type Error = anyhow::Error;
fn try_from(
value: pbs::clinvar_data::clinvar_public::GeneralCitations,
) -> Result<Self, Self::Error> {
Ok(ClinvarGeneralCitations {
xrefs: value
.xrefs
.into_iter()
.map(|x| x.try_into())
.collect::<Result<_, _>>()?,
citations: value
.citations
.into_iter()
.map(|x| x.try_into())
.collect::<Result<_, _>>()?,
})
}
}
#[derive(Clone, Debug, serde::Serialize, serde::Deserialize, utoipa::ToSchema)]
pub struct ClinvarCooccurrence {
pub zygosity: Option<ClinvarZygosity>,
pub allele_descriptions: Vec<ClinvarAlleleDescription>,
pub count: Option<i32>,
}
impl TryFrom<pbs::clinvar_data::clinvar_public::Cooccurrence> for ClinvarCooccurrence {
type Error = anyhow::Error;
fn try_from(
value: pbs::clinvar_data::clinvar_public::Cooccurrence,
) -> Result<Self, Self::Error> {
Ok(ClinvarCooccurrence {
zygosity: value
.zygosity
.map(|zygosity| {
ClinvarZygosity::try_from(
pbs::clinvar_data::clinvar_public::Zygosity::try_from(zygosity)?,
)
})
.transpose()?,
allele_descriptions: value
.allele_descriptions
.into_iter()
.map(|x| x.try_into())
.collect::<Result<_, _>>()?,
count: value.count,
})
}
}
#[derive(Clone, Debug, serde::Serialize, serde::Deserialize, utoipa::ToSchema)]
pub struct ClinvarSubmitter {
pub submitter_identifiers: Option<ClinvarSubmitterIdentifiers>,
pub r#type: ClinvarSubmitterType,
}
impl TryFrom<pbs::clinvar_data::clinvar_public::Submitter> for ClinvarSubmitter {
type Error = anyhow::Error;
fn try_from(value: pbs::clinvar_data::clinvar_public::Submitter) -> Result<Self, Self::Error> {
Ok(ClinvarSubmitter {
submitter_identifiers: value.submitter_identifiers.map(|x| x.into()),
r#type: ClinvarSubmitterType::try_from(
pbs::clinvar_data::clinvar_public::submitter::Type::try_from(value.r#type)?,
)?,
})
}
}
#[derive(
Clone,
Copy,
Debug,
PartialEq,
Eq,
Hash,
PartialOrd,
Ord,
serde::Serialize,
serde::Deserialize,
strum::Display,
strum::EnumString,
utoipa::ToSchema,
)]
#[serde(rename_all = "snake_case")]
#[strum(serialize_all = "snake_case")]
pub enum ClinvarSubmitterType {
Primary,
Secondary,
Behalf,
}
impl TryFrom<pbs::clinvar_data::clinvar_public::submitter::Type> for ClinvarSubmitterType {
type Error = anyhow::Error;
fn try_from(
value: pbs::clinvar_data::clinvar_public::submitter::Type,
) -> Result<Self, Self::Error> {
match value {
pbs::clinvar_data::clinvar_public::submitter::Type::Primary => {
Ok(ClinvarSubmitterType::Primary)
}
pbs::clinvar_data::clinvar_public::submitter::Type::Secondary => {
Ok(ClinvarSubmitterType::Secondary)
}
pbs::clinvar_data::clinvar_public::submitter::Type::Behalf => {
Ok(ClinvarSubmitterType::Behalf)
}
_ => Err(anyhow::anyhow!(
"Invalid value for SubmitterType: {:?}",
value
)),
}
}
}
#[derive(Clone, Debug, serde::Serialize, serde::Deserialize, utoipa::ToSchema)]
pub struct ClinvarDosageSensitivity {
pub value: String,
pub last_evaluated: Option<chrono::DateTime<chrono::Utc>>,
pub clingen: Option<String>,
}
impl TryFrom<pbs::clinvar_data::clinvar_public::DosageSensitivity> for ClinvarDosageSensitivity {
type Error = anyhow::Error;
fn try_from(
value: pbs::clinvar_data::clinvar_public::DosageSensitivity,
) -> Result<Self, Self::Error> {
Ok(ClinvarDosageSensitivity {
value: value.value,
last_evaluated: value.last_evaluated.map(|x| {
chrono::DateTime::<chrono::Utc>::from_timestamp(x.seconds, x.nanos as u32)
.unwrap_or_default()
}),
clingen: value.clingen,
})
}
}
#[derive(Clone, Debug, serde::Serialize, serde::Deserialize, utoipa::ToSchema)]
pub struct ClinvarOtherName {
pub value: String,
pub r#type: Option<String>,
}
impl TryFrom<pbs::clinvar_data::clinvar_public::OtherName> for ClinvarOtherName {
type Error = anyhow::Error;
fn try_from(value: pbs::clinvar_data::clinvar_public::OtherName) -> Result<Self, Self::Error> {
Ok(ClinvarOtherName {
value: value.value,
r#type: value.r#type,
})
}
}
#[derive(Clone, Debug, serde::Serialize, serde::Deserialize, utoipa::ToSchema)]
pub struct ClinvarDeletedScv {
pub accession: String,
pub version: i32,
pub date_deleted: Option<chrono::DateTime<chrono::Utc>>,
}
impl TryFrom<pbs::clinvar_data::clinvar_public::DeletedScv> for ClinvarDeletedScv {
type Error = anyhow::Error;
fn try_from(value: pbs::clinvar_data::clinvar_public::DeletedScv) -> Result<Self, Self::Error> {
Ok(ClinvarDeletedScv {
accession: value.accession,
version: value.version,
date_deleted: value.date_deleted.map(|x| {
chrono::DateTime::<chrono::Utc>::from_timestamp(x.seconds, x.nanos as u32)
.unwrap_or_default()
}),
})
}
}
#[derive(Clone, Debug, serde::Serialize, serde::Deserialize, utoipa::ToSchema)]
pub struct ClinvarLocation {
pub cytogenetic_locations: Vec<String>,
pub sequence_locations: Vec<ClinvarSequenceLocation>,
pub gene_locations: Vec<String>,
pub xrefs: Vec<ClinvarXref>,
}
impl TryFrom<pbs::clinvar_data::clinvar_public::Location> for ClinvarLocation {
type Error = anyhow::Error;
fn try_from(value: pbs::clinvar_data::clinvar_public::Location) -> Result<Self, Self::Error> {
Ok(ClinvarLocation {
cytogenetic_locations: value.cytogenetic_locations,
sequence_locations: value
.sequence_locations
.into_iter()
.map(|x| x.try_into())
.collect::<Result<_, _>>()?,
gene_locations: value.gene_locations,
xrefs: value
.xrefs
.into_iter()
.map(|x| x.try_into())
.collect::<Result<_, _>>()?,
})
}
}
#[derive(Clone, Debug, serde::Serialize, serde::Deserialize, utoipa::ToSchema)]
pub struct ClinvarSequenceLocation {
pub for_display: Option<bool>,
pub assembly: String,
pub chr: ClinvarChromosome,
pub accession: Option<String>,
pub outer_start: Option<u32>,
pub inner_start: Option<u32>,
pub start: Option<u32>,
pub stop: Option<u32>,
pub inner_stop: Option<u32>,
pub outer_stop: Option<u32>,
pub display_start: Option<u32>,
pub display_stop: Option<u32>,
pub strand: Option<String>,
pub variant_length: Option<u32>,
pub reference_allele: Option<String>,
pub alternate_allele: Option<String>,
pub assembly_accession_version: Option<String>,
pub assembly_status: Option<ClinvarAssemblyStatus>,
pub position_vcf: Option<u32>,
pub reference_allele_vcf: Option<String>,
pub alternate_allele_vcf: Option<String>,
pub for_display_length: Option<u32>,
}
impl TryFrom<pbs::clinvar_data::clinvar_public::location::SequenceLocation>
for ClinvarSequenceLocation
{
type Error = anyhow::Error;
fn try_from(
value: pbs::clinvar_data::clinvar_public::location::SequenceLocation,
) -> Result<Self, Self::Error> {
Ok(ClinvarSequenceLocation {
for_display: value.for_display,
assembly: value.assembly,
chr: ClinvarChromosome::try_from(
pbs::clinvar_data::clinvar_public::Chromosome::try_from(
value.chr
)?
)?,
accession: value.accession,
outer_start: value.outer_start,
inner_start: value.inner_start,
start: value.start,
stop: value.stop,
inner_stop: value.inner_stop,
outer_stop: value.outer_stop,
display_start: value.display_start,
display_stop: value.display_stop,
strand: value.strand,
variant_length: value.variant_length,
reference_allele: value.reference_allele,
alternate_allele: value.alternate_allele,
assembly_accession_version: value.assembly_accession_version,
assembly_status: value.assembly_status.map(|assembly_status|
ClinvarAssemblyStatus::try_from(
pbs::clinvar_data::clinvar_public::location::sequence_location::AssemblyStatus::try_from(assembly_status)?
)
).transpose()?,
position_vcf: value.position_vcf,
reference_allele_vcf: value.reference_allele_vcf,
alternate_allele_vcf: value.alternate_allele_vcf,
for_display_length: value.for_display_length,
})
}
}
#[derive(
Clone,
Copy,
Debug,
PartialEq,
Eq,
Hash,
PartialOrd,
Ord,
serde::Serialize,
serde::Deserialize,
strum::Display,
strum::EnumString,
utoipa::ToSchema,
)]
#[serde(rename_all = "snake_case")]
#[strum(serialize_all = "snake_case")]
pub enum ClinvarAssemblyStatus {
Current,
Previous,
}
impl TryFrom<pbs::clinvar_data::clinvar_public::location::sequence_location::AssemblyStatus>
for ClinvarAssemblyStatus
{
type Error = anyhow::Error;
fn try_from(
value: pbs::clinvar_data::clinvar_public::location::sequence_location::AssemblyStatus,
) -> Result<Self, Self::Error> {
match value {
pbs::clinvar_data::clinvar_public::location::sequence_location::AssemblyStatus::Current => {
Ok(ClinvarAssemblyStatus::Current)
}
pbs::clinvar_data::clinvar_public::location::sequence_location::AssemblyStatus::Previous => {
Ok(ClinvarAssemblyStatus::Previous)
}
_ => Err(anyhow::anyhow!("Unknown AssemblyStatus value: {:?}", value)),
}
}
}
#[derive(Clone, Debug, serde::Serialize, serde::Deserialize, utoipa::ToSchema)]
pub struct ClinvarScv {
pub title: Option<String>,
pub accession: String,
pub version: i32,
}
impl From<pbs::clinvar_data::clinvar_public::Scv> for ClinvarScv {
fn from(value: pbs::clinvar_data::clinvar_public::Scv) -> Self {
ClinvarScv {
title: value.title,
accession: value.accession,
version: value.version,
}
}
}
#[derive(Clone, Debug, serde::Serialize, serde::Deserialize, utoipa::ToSchema)]
pub struct ClinvarFamilyData {
pub family_history: Option<String>,
pub num_families: Option<i32>,
pub num_families_with_variant: Option<i32>,
pub num_families_with_segregation_observed: Option<i32>,
pub pedigree_id: Option<String>,
pub segregation_observed: Option<String>,
}
impl From<pbs::clinvar_data::clinvar_public::FamilyData> for ClinvarFamilyData {
fn from(value: pbs::clinvar_data::clinvar_public::FamilyData) -> Self {
ClinvarFamilyData {
family_history: value.family_history,
num_families: value.num_families,
num_families_with_variant: value.num_families_with_variant,
num_families_with_segregation_observed: value.num_families_with_segregation_observed,
pedigree_id: value.pedigree_id,
segregation_observed: value.segregation_observed,
}
}
}
#[derive(Clone, Debug, serde::Serialize, serde::Deserialize, utoipa::ToSchema)]
pub struct ClinvarSample {
pub sample_description: Option<ClinvarSampleDescription>,
pub origin: Option<ClinvarOrigin>,
pub ethnicity: Option<String>,
pub geographic_origin: Option<String>,
pub tissue: Option<String>,
pub somatic_variant_in_normal_tissue: Option<ClinvarSomaticVariantInNormalTissue>,
pub somatic_variant_allele_fraction: Option<String>,
pub cell_line: Option<String>,
pub species: Option<ClinvarSpecies>,
pub ages: Vec<ClinvarAge>,
pub strain: Option<String>,
pub affected_status: Option<ClinvarAffectedStatus>,
pub numer_tested: Option<i32>,
pub number_males: Option<i32>,
pub number_females: Option<i32>,
pub number_chr_tested: Option<i32>,
pub gender: Option<ClinvarGender>,
pub family_data: Option<ClinvarFamilyData>,
pub proband: Option<String>,
pub indication: Option<ClinvarIndication>,
pub citations: Vec<ClinvarCitation>,
pub xrefs: Vec<ClinvarXref>,
pub comments: Vec<ClinvarComment>,
pub source_type: Option<ClinvarSampleSourceType>,
}
impl TryFrom<pbs::clinvar_data::clinvar_public::Sample> for ClinvarSample {
type Error = anyhow::Error;
fn try_from(value: pbs::clinvar_data::clinvar_public::Sample) -> Result<Self, Self::Error> {
Ok(ClinvarSample {
sample_description: value
.sample_description
.map(ClinvarSampleDescription::try_from)
.transpose()?,
origin: value.origin.map(|origin| ClinvarOrigin::try_from(
pbs::clinvar_data::clinvar_public::Origin::try_from(origin)?
)).transpose()?,
ethnicity: value.ethnicity,
geographic_origin: value.geographic_origin,
tissue: value.tissue,
somatic_variant_in_normal_tissue: value
.somatic_variant_in_normal_tissue
.map(|somatic_variant_in_normal_tissue|
ClinvarSomaticVariantInNormalTissue::try_from(
pbs::clinvar_data::clinvar_public::sample::SomaticVariantInNormalTissue::try_from(
somatic_variant_in_normal_tissue,
)?
)
)
.transpose()?,
somatic_variant_allele_fraction: value.somatic_variant_allele_fraction,
cell_line: value.cell_line,
species: value.species.map(ClinvarSpecies::try_from).transpose()?,
ages: value
.ages
.into_iter()
.map(ClinvarAge::try_from)
.collect::<Result<Vec<_>, _>>()?,
strain: value.strain,
affected_status: value
.affected_status
.map(|affected_status| {
ClinvarAffectedStatus::try_from(
pbs::clinvar_data::clinvar_public::sample::AffectedStatus::try_from(
affected_status,
)?,
)
})
.transpose()?,
numer_tested: value.numer_tested,
number_males: value.number_males,
number_females: value.number_females,
number_chr_tested: value.number_chr_tested,
gender: value
.gender
.map(|gender| {
ClinvarGender::try_from(pbs::clinvar_data::clinvar_public::sample::Gender::try_from(
gender,
)?)
})
.transpose()?,
family_data: value.family_data.map(ClinvarFamilyData::try_from).transpose()?,
proband: value.proband,
indication: value.indication.map(ClinvarIndication::try_from).transpose()?,
citations: value
.citations
.into_iter()
.map(ClinvarCitation::try_from)
.collect::<Result<Vec<_>, _>>()?,
xrefs: value
.xrefs
.into_iter()
.map(ClinvarXref::try_from)
.collect::<Result<Vec<_>, _>>()?,
comments: value
.comments
.into_iter()
.map(ClinvarComment::try_from)
.collect::<Result<Vec<_>, _>>()?,
source_type: value
.source_type
.map(|source_type| {
ClinvarSampleSourceType::try_from(
pbs::clinvar_data::clinvar_public::sample::SourceType::try_from(
source_type,
)?,
)
})
.transpose()?,
})
}
}
#[derive(Clone, Debug, serde::Serialize, serde::Deserialize, utoipa::ToSchema)]
pub struct ClinvarSampleDescription {
pub description: Option<ClinvarComment>,
pub citation: Option<ClinvarCitation>,
}
impl TryFrom<pbs::clinvar_data::clinvar_public::sample::SampleDescription>
for ClinvarSampleDescription
{
type Error = anyhow::Error;
fn try_from(
value: pbs::clinvar_data::clinvar_public::sample::SampleDescription,
) -> Result<Self, Self::Error> {
Ok(ClinvarSampleDescription {
description: value
.description
.map(ClinvarComment::try_from)
.transpose()?,
citation: value.citation.map(ClinvarCitation::try_from).transpose()?,
})
}
}
#[derive(Clone, Debug, serde::Serialize, serde::Deserialize, utoipa::ToSchema)]
pub struct ClinvarAge {
pub value: i32,
pub unit: ClinvarAgeUnit,
pub r#type: ClinvarAgeType,
}
impl TryFrom<pbs::clinvar_data::clinvar_public::sample::Age> for ClinvarAge {
type Error = anyhow::Error;
fn try_from(
value: pbs::clinvar_data::clinvar_public::sample::Age,
) -> Result<Self, Self::Error> {
Ok(ClinvarAge {
value: value.value,
unit: ClinvarAgeUnit::try_from(
pbs::clinvar_data::clinvar_public::sample::AgeUnit::try_from(value.unit)?,
)?,
r#type: ClinvarAgeType::try_from(
pbs::clinvar_data::clinvar_public::sample::AgeType::try_from(value.r#type)?,
)?,
})
}
}
#[derive(
Clone,
Copy,
Debug,
PartialEq,
Eq,
Hash,
PartialOrd,
Ord,
serde::Serialize,
serde::Deserialize,
strum::Display,
strum::EnumString,
utoipa::ToSchema,
)]
#[serde(rename_all = "snake_case")]
#[strum(serialize_all = "snake_case")]
pub enum ClinvarSomaticVariantInNormalTissue {
Present,
Absent,
NotTested,
}
impl TryFrom<pbs::clinvar_data::clinvar_public::sample::SomaticVariantInNormalTissue>
for ClinvarSomaticVariantInNormalTissue
{
type Error = anyhow::Error;
fn try_from(
value: pbs::clinvar_data::clinvar_public::sample::SomaticVariantInNormalTissue,
) -> Result<Self, Self::Error> {
Ok(match value {
pbs::clinvar_data::clinvar_public::sample::SomaticVariantInNormalTissue::Present => {
ClinvarSomaticVariantInNormalTissue::Present
}
pbs::clinvar_data::clinvar_public::sample::SomaticVariantInNormalTissue::Absent => {
ClinvarSomaticVariantInNormalTissue::Absent
}
pbs::clinvar_data::clinvar_public::sample::SomaticVariantInNormalTissue::NotTested => {
ClinvarSomaticVariantInNormalTissue::NotTested
}
_ => anyhow::bail!("Invalid sample::SomaticVariantInNormalTissue {:?}", value),
})
}
}
#[derive(
Clone,
Copy,
Debug,
PartialEq,
Eq,
Hash,
PartialOrd,
Ord,
serde::Serialize,
serde::Deserialize,
strum::Display,
strum::EnumString,
utoipa::ToSchema,
)]
#[serde(rename_all = "snake_case")]
#[strum(serialize_all = "snake_case")]
pub enum ClinvarAgeUnit {
Days,
Weeks,
Months,
Years,
WeeksGestation,
MonthsGestation,
}
impl TryFrom<pbs::clinvar_data::clinvar_public::sample::AgeUnit> for ClinvarAgeUnit {
type Error = anyhow::Error;
fn try_from(
value: pbs::clinvar_data::clinvar_public::sample::AgeUnit,
) -> Result<Self, Self::Error> {
Ok(match value {
pbs::clinvar_data::clinvar_public::sample::AgeUnit::Days => ClinvarAgeUnit::Days,
pbs::clinvar_data::clinvar_public::sample::AgeUnit::Weeks => ClinvarAgeUnit::Weeks,
pbs::clinvar_data::clinvar_public::sample::AgeUnit::Months => ClinvarAgeUnit::Months,
pbs::clinvar_data::clinvar_public::sample::AgeUnit::Years => ClinvarAgeUnit::Years,
pbs::clinvar_data::clinvar_public::sample::AgeUnit::WeeksGestation => {
ClinvarAgeUnit::WeeksGestation
}
pbs::clinvar_data::clinvar_public::sample::AgeUnit::MonthsGestation => {
ClinvarAgeUnit::MonthsGestation
}
_ => anyhow::bail!("Invalid sample::AgeUnit {:?}", value),
})
}
}
#[derive(
Clone,
Copy,
Debug,
PartialEq,
Eq,
Hash,
PartialOrd,
Ord,
serde::Serialize,
serde::Deserialize,
strum::Display,
strum::EnumString,
utoipa::ToSchema,
)]
#[serde(rename_all = "snake_case")]
#[strum(serialize_all = "snake_case")]
pub enum ClinvarAgeType {
Minimum,
Maximum,
Single,
}
impl TryFrom<pbs::clinvar_data::clinvar_public::sample::AgeType> for ClinvarAgeType {
type Error = anyhow::Error;
fn try_from(
value: pbs::clinvar_data::clinvar_public::sample::AgeType,
) -> Result<Self, Self::Error> {
Ok(match value {
pbs::clinvar_data::clinvar_public::sample::AgeType::Minimum => ClinvarAgeType::Minimum,
pbs::clinvar_data::clinvar_public::sample::AgeType::Maximum => ClinvarAgeType::Maximum,
pbs::clinvar_data::clinvar_public::sample::AgeType::Single => ClinvarAgeType::Single,
_ => anyhow::bail!("Invalid sample::AgeType {:?}", value),
})
}
}
#[derive(
Clone,
Copy,
Debug,
PartialEq,
Eq,
Hash,
PartialOrd,
Ord,
serde::Serialize,
serde::Deserialize,
strum::Display,
strum::EnumString,
utoipa::ToSchema,
)]
#[serde(rename_all = "snake_case")]
#[strum(serialize_all = "snake_case")]
pub enum ClinvarAffectedStatus {
Yes,
No,
NotProvided,
Unknown,
NotApplicable,
}
impl TryFrom<pbs::clinvar_data::clinvar_public::sample::AffectedStatus> for ClinvarAffectedStatus {
type Error = anyhow::Error;
fn try_from(
value: pbs::clinvar_data::clinvar_public::sample::AffectedStatus,
) -> Result<Self, Self::Error> {
Ok(match value {
pbs::clinvar_data::clinvar_public::sample::AffectedStatus::Yes => {
ClinvarAffectedStatus::Yes
}
pbs::clinvar_data::clinvar_public::sample::AffectedStatus::No => {
ClinvarAffectedStatus::No
}
pbs::clinvar_data::clinvar_public::sample::AffectedStatus::NotProvided => {
ClinvarAffectedStatus::NotProvided
}
pbs::clinvar_data::clinvar_public::sample::AffectedStatus::Unknown => {
ClinvarAffectedStatus::Unknown
}
pbs::clinvar_data::clinvar_public::sample::AffectedStatus::NotApplicable => {
ClinvarAffectedStatus::NotApplicable
}
_ => anyhow::bail!("Invalid sample::AffectedStatus {:?}", value),
})
}
}
#[derive(
Clone,
Copy,
Debug,
PartialEq,
Eq,
Hash,
PartialOrd,
Ord,
serde::Serialize,
serde::Deserialize,
strum::Display,
strum::EnumString,
utoipa::ToSchema,
)]
#[serde(rename_all = "snake_case")]
#[strum(serialize_all = "snake_case")]
pub enum ClinvarGender {
Male,
Female,
Mixed,
}
impl TryFrom<pbs::clinvar_data::clinvar_public::sample::Gender> for ClinvarGender {
type Error = anyhow::Error;
fn try_from(
value: pbs::clinvar_data::clinvar_public::sample::Gender,
) -> Result<Self, Self::Error> {
Ok(match value {
pbs::clinvar_data::clinvar_public::sample::Gender::Male => ClinvarGender::Male,
pbs::clinvar_data::clinvar_public::sample::Gender::Female => ClinvarGender::Female,
pbs::clinvar_data::clinvar_public::sample::Gender::Mixed => ClinvarGender::Mixed,
_ => anyhow::bail!("Invalid sample::Gender {:?}", value),
})
}
}
#[derive(
Clone,
Copy,
Debug,
PartialEq,
Eq,
Hash,
PartialOrd,
Ord,
serde::Serialize,
serde::Deserialize,
strum::Display,
strum::EnumString,
utoipa::ToSchema,
)]
#[serde(rename_all = "snake_case")]
#[strum(serialize_all = "snake_case")]
pub enum ClinvarSampleSourceType {
SubmitterGenerated,
DataMining,
}
impl TryFrom<pbs::clinvar_data::clinvar_public::sample::SourceType> for ClinvarSampleSourceType {
type Error = anyhow::Error;
fn try_from(
value: pbs::clinvar_data::clinvar_public::sample::SourceType,
) -> Result<Self, Self::Error> {
match value {
pbs::clinvar_data::clinvar_public::sample::SourceType::SubmitterGenerated => {
Ok(ClinvarSampleSourceType::SubmitterGenerated)
}
pbs::clinvar_data::clinvar_public::sample::SourceType::DataMining => {
Ok(ClinvarSampleSourceType::DataMining)
}
_ => Err(anyhow::anyhow!(
"Invalid value for sample::SourceType: {:?}",
value
)),
}
}
}
#[derive(Clone, Debug, serde::Serialize, serde::Deserialize, utoipa::ToSchema)]
pub struct ClinvarMethod {
pub name_platform: Option<String>,
pub type_platform: Option<String>,
pub purpose: Option<String>,
pub result_type: Option<ClinvarResultType>,
pub min_reported: Option<String>,
pub max_reported: Option<String>,
pub reference_standard: Option<String>,
pub citations: Vec<ClinvarCitation>,
pub xrefs: Vec<ClinvarXref>,
pub description: Option<String>,
pub software: Vec<ClinvarSoftware>,
pub source_type: Option<ClinvarMethodSourceType>,
pub method_type: ClinvarMethodListType,
pub method_attributes: Vec<ClinvarMethodAttribute>,
pub obs_method_attributes: Vec<ClinvarObsMethodAttribute>,
}
impl TryFrom<pbs::clinvar_data::clinvar_public::Method> for ClinvarMethod {
type Error = anyhow::Error;
fn try_from(value: pbs::clinvar_data::clinvar_public::Method) -> Result<Self, Self::Error> {
Ok(Self {
name_platform: value.name_platform,
type_platform: value.type_platform,
purpose: value.purpose,
result_type: value
.result_type
.map(|result_type| {
ClinvarResultType::try_from(
pbs::clinvar_data::clinvar_public::method::ResultType::try_from(
result_type,
)?,
)
})
.transpose()?,
min_reported: value.min_reported,
max_reported: value.max_reported,
reference_standard: value.reference_standard,
citations: value
.citations
.into_iter()
.map(TryInto::try_into)
.collect::<Result<Vec<_>, _>>()?,
xrefs: value
.xrefs
.into_iter()
.map(TryInto::try_into)
.collect::<Result<Vec<_>, _>>()?,
description: value.description,
software: value
.software
.into_iter()
.map(TryInto::try_into)
.collect::<Result<Vec<_>, _>>()?,
source_type: value
.source_type
.map(|source_type| {
ClinvarMethodSourceType::try_from(
pbs::clinvar_data::clinvar_public::method::SourceType::try_from(
source_type,
)?,
)
})
.transpose()?,
method_type: ClinvarMethodListType::try_from(
pbs::clinvar_data::clinvar_public::MethodListType::try_from(value.method_type)?,
)?,
method_attributes: value
.method_attributes
.into_iter()
.map(TryInto::try_into)
.collect::<Result<Vec<_>, _>>()?,
obs_method_attributes: value
.obs_method_attributes
.into_iter()
.map(TryInto::try_into)
.collect::<Result<Vec<_>, _>>()?,
})
}
}
#[derive(Clone, Debug, serde::Serialize, serde::Deserialize, utoipa::ToSchema)]
pub struct ClinvarMethodAttribute {
pub base: Option<ClinvarBaseAttribute>,
pub r#type: ClinvarMethodAttributeType,
}
impl TryFrom<pbs::clinvar_data::clinvar_public::method::MethodAttribute>
for ClinvarMethodAttribute
{
type Error = anyhow::Error;
fn try_from(
value: pbs::clinvar_data::clinvar_public::method::MethodAttribute,
) -> Result<Self, Self::Error> {
Ok(Self {
base: value.base.map(TryInto::try_into).transpose()?,
r#type: ClinvarMethodAttributeType::try_from(
pbs::clinvar_data::clinvar_public::method::method_attribute::AttributeType::try_from(
value.r#type
)?
)?
})
}
}
#[derive(
Clone,
Copy,
Debug,
PartialEq,
Eq,
Hash,
PartialOrd,
Ord,
serde::Serialize,
serde::Deserialize,
strum::Display,
strum::EnumString,
utoipa::ToSchema,
)]
#[serde(rename_all = "snake_case")]
#[strum(serialize_all = "snake_case")]
pub enum ClinvarMethodAttributeType {
Location,
ControlsAppropriate,
MethodAppropriate,
TestName,
StructVarMethodType,
ProbeAccession,
}
impl TryFrom<pbs::clinvar_data::clinvar_public::method::method_attribute::AttributeType>
for ClinvarMethodAttributeType
{
type Error = anyhow::Error;
fn try_from(
value: pbs::clinvar_data::clinvar_public::method::method_attribute::AttributeType,
) -> Result<Self, Self::Error> {
match value {
pbs::clinvar_data::clinvar_public::method::method_attribute::AttributeType::Location => Ok(ClinvarMethodAttributeType::Location),
pbs::clinvar_data::clinvar_public::method::method_attribute::AttributeType::ControlsAppropriate => {
Ok(ClinvarMethodAttributeType::ControlsAppropriate)
}
pbs::clinvar_data::clinvar_public::method::method_attribute::AttributeType::MethodAppropriate => {
Ok(ClinvarMethodAttributeType::MethodAppropriate)
}
pbs::clinvar_data::clinvar_public::method::method_attribute::AttributeType::TestName => Ok(ClinvarMethodAttributeType::TestName),
pbs::clinvar_data::clinvar_public::method::method_attribute::AttributeType::StructVarMethodType => {
Ok(ClinvarMethodAttributeType::StructVarMethodType)
}
pbs::clinvar_data::clinvar_public::method::method_attribute::AttributeType::ProbeAccession => {
Ok(ClinvarMethodAttributeType::ProbeAccession)
}
_ => anyhow::bail!("Invalid AttributeType {:?}", value)
}
}
}
#[derive(Clone, Debug, serde::Serialize, serde::Deserialize, utoipa::ToSchema)]
pub struct ClinvarObsMethodAttribute {
pub base: Option<ClinvarBaseAttribute>,
pub r#type: ClinvarObsMethodAttributeType,
pub comments: Vec<ClinvarComment>,
}
impl TryFrom<pbs::clinvar_data::clinvar_public::method::ObsMethodAttribute>
for ClinvarObsMethodAttribute
{
type Error = anyhow::Error;
fn try_from(
value: pbs::clinvar_data::clinvar_public::method::ObsMethodAttribute,
) -> Result<Self, Self::Error> {
Ok(Self {
base: value.base.map(TryInto::try_into).transpose()?,
r#type: ClinvarObsMethodAttributeType::try_from(
pbs::clinvar_data::clinvar_public::method::obs_method_attribute::AttributeType::try_from(
value.r#type,
)?,
)?,
comments: value
.comments
.into_iter()
.map(TryInto::try_into)
.collect::<Result<Vec<_>, _>>()?,
})
}
}
#[derive(
Clone,
Copy,
Debug,
PartialEq,
Eq,
Hash,
PartialOrd,
Ord,
serde::Serialize,
serde::Deserialize,
strum::Display,
strum::EnumString,
utoipa::ToSchema,
)]
#[serde(rename_all = "snake_case")]
#[strum(serialize_all = "snake_case")]
pub enum ClinvarObsMethodAttributeType {
MethodResult,
TestingLaboratory,
}
impl TryFrom<pbs::clinvar_data::clinvar_public::method::obs_method_attribute::AttributeType>
for ClinvarObsMethodAttributeType
{
type Error = anyhow::Error;
fn try_from(
value: pbs::clinvar_data::clinvar_public::method::obs_method_attribute::AttributeType,
) -> Result<Self, Self::Error> {
match value {
pbs::clinvar_data::clinvar_public::method::obs_method_attribute::AttributeType::MethodResult => Ok(ClinvarObsMethodAttributeType::MethodResult),
pbs::clinvar_data::clinvar_public::method::obs_method_attribute::AttributeType::TestingLaboratory => Ok(ClinvarObsMethodAttributeType::TestingLaboratory),
_ => anyhow::bail!("Invalid obs_method_attribute::AttributeType: {:?}", value),
}
}
}
#[derive(
Clone,
Copy,
Debug,
PartialEq,
Eq,
Hash,
PartialOrd,
Ord,
serde::Serialize,
serde::Deserialize,
strum::Display,
strum::EnumString,
utoipa::ToSchema,
)]
#[serde(rename_all = "snake_case")]
#[strum(serialize_all = "snake_case")]
pub enum ClinvarResultType {
NumberOfOccurrences,
PValue,
OddsRatio,
VariantCall,
}
impl TryFrom<pbs::clinvar_data::clinvar_public::method::ResultType> for ClinvarResultType {
type Error = anyhow::Error;
fn try_from(
value: pbs::clinvar_data::clinvar_public::method::ResultType,
) -> Result<Self, Self::Error> {
match value {
pbs::clinvar_data::clinvar_public::method::ResultType::NumberOfOccurrences => {
Ok(ClinvarResultType::NumberOfOccurrences)
}
pbs::clinvar_data::clinvar_public::method::ResultType::PValue => {
Ok(ClinvarResultType::PValue)
}
pbs::clinvar_data::clinvar_public::method::ResultType::OddsRatio => {
Ok(ClinvarResultType::OddsRatio)
}
pbs::clinvar_data::clinvar_public::method::ResultType::VariantCall => {
Ok(ClinvarResultType::VariantCall)
}
_ => anyhow::bail!("Invalid method::ResultType {:?}", value),
}
}
}
#[derive(
Clone,
Copy,
Debug,
PartialEq,
Eq,
Hash,
PartialOrd,
Ord,
serde::Serialize,
serde::Deserialize,
strum::Display,
strum::EnumString,
utoipa::ToSchema,
)]
#[serde(rename_all = "snake_case")]
#[strum(serialize_all = "snake_case")]
pub enum ClinvarMethodSourceType {
SubmitterGenerated,
DataMining,
DataReview,
}
impl TryFrom<pbs::clinvar_data::clinvar_public::method::SourceType> for ClinvarMethodSourceType {
type Error = anyhow::Error;
fn try_from(
value: pbs::clinvar_data::clinvar_public::method::SourceType,
) -> Result<Self, Self::Error> {
match value {
pbs::clinvar_data::clinvar_public::method::SourceType::SubmitterGenerated => {
Ok(ClinvarMethodSourceType::SubmitterGenerated)
}
pbs::clinvar_data::clinvar_public::method::SourceType::DataMining => {
Ok(ClinvarMethodSourceType::DataMining)
}
pbs::clinvar_data::clinvar_public::method::SourceType::DataReview => {
Ok(ClinvarMethodSourceType::DataReview)
}
_ => anyhow::bail!("Invalid method::SourceType {:?}", value),
}
}
}
#[derive(Clone, Debug, serde::Serialize, serde::Deserialize, utoipa::ToSchema)]
pub struct ClinvarAlleleScv {
pub genes: Vec<ClinvarAlleleScvGene>,
pub name: Option<ClinvarOtherName>,
pub variant_type: Option<String>,
pub location: Option<ClinvarLocation>,
pub other_names: Vec<ClinvarOtherName>,
pub protein_changes: Vec<String>,
pub xrefs: Vec<ClinvarXref>,
pub citations: Vec<ClinvarCitation>,
pub comments: Vec<ClinvarComment>,
pub molecular_consequences: Vec<ClinvarMolecularConsequence>,
pub functional_consequences: Vec<ClinvarFunctionalConsequence>,
pub attributes: Vec<ClinvarAttributeSetElement>,
pub allele_id: Option<i64>,
}
impl TryFrom<pbs::clinvar_data::clinvar_public::AlleleScv> for ClinvarAlleleScv {
type Error = anyhow::Error;
fn try_from(value: pbs::clinvar_data::clinvar_public::AlleleScv) -> Result<Self, Self::Error> {
Ok(Self {
genes: value
.genes
.into_iter()
.map(TryInto::try_into)
.collect::<Result<Vec<_>, _>>()?,
name: value.name.map(TryInto::try_into).transpose()?,
variant_type: value.variant_type,
location: value.location.map(TryInto::try_into).transpose()?,
other_names: value
.other_names
.into_iter()
.map(TryInto::try_into)
.collect::<Result<Vec<_>, _>>()?,
protein_changes: value.protein_changes,
xrefs: value
.xrefs
.into_iter()
.map(TryInto::try_into)
.collect::<Result<Vec<_>, _>>()?,
citations: value
.citations
.into_iter()
.map(TryInto::try_into)
.collect::<Result<Vec<_>, _>>()?,
comments: value
.comments
.into_iter()
.map(TryInto::try_into)
.collect::<Result<Vec<_>, _>>()?,
molecular_consequences: value
.molecular_consequences
.into_iter()
.map(TryInto::try_into)
.collect::<Result<Vec<_>, _>>()?,
functional_consequences: value
.functional_consequences
.into_iter()
.map(TryInto::try_into)
.collect::<Result<Vec<_>, _>>()?,
attributes: value
.attributes
.into_iter()
.map(TryInto::try_into)
.collect::<Result<Vec<_>, _>>()?,
allele_id: value.allele_id,
})
}
}
#[derive(Clone, Debug, serde::Serialize, serde::Deserialize, utoipa::ToSchema)]
pub struct ClinvarAlleleScvGene {
pub name: Option<String>,
pub properties: Vec<String>,
pub xrefs: Vec<ClinvarXref>,
pub symbol: Option<String>,
pub relationship_type: Option<ClinvarGeneVariantRelationship>,
}
impl TryFrom<pbs::clinvar_data::clinvar_public::allele_scv::Gene> for ClinvarAlleleScvGene {
type Error = anyhow::Error;
fn try_from(
value: pbs::clinvar_data::clinvar_public::allele_scv::Gene,
) -> Result<Self, Self::Error> {
Ok(Self {
name: value.name,
properties: value.properties,
xrefs: value
.xrefs
.into_iter()
.map(TryInto::try_into)
.collect::<Result<Vec<_>, _>>()?,
symbol: value.symbol,
relationship_type: value
.relationship_type
.map(|relationship_type| {
ClinvarGeneVariantRelationship::try_from(
pbs::clinvar_data::clinvar_public::GeneVariantRelationship::try_from(
relationship_type,
)?,
)
})
.transpose()?,
})
}
}
#[derive(Clone, Debug, serde::Serialize, serde::Deserialize, utoipa::ToSchema)]
pub struct ClinvarMolecularConsequence {
pub xrefs: Vec<ClinvarXref>,
pub citations: Vec<ClinvarCitation>,
pub comments: Vec<ClinvarComment>,
pub rs: Option<i64>,
pub hgvs: Option<String>,
pub so_id: Option<String>,
pub function: String,
}
impl TryFrom<pbs::clinvar_data::clinvar_public::allele_scv::MolecularConsequence>
for ClinvarMolecularConsequence
{
type Error = anyhow::Error;
fn try_from(
value: pbs::clinvar_data::clinvar_public::allele_scv::MolecularConsequence,
) -> Result<Self, Self::Error> {
Ok(Self {
xrefs: value
.xrefs
.into_iter()
.map(TryInto::try_into)
.collect::<Result<Vec<_>, _>>()?,
citations: value
.citations
.into_iter()
.map(TryInto::try_into)
.collect::<Result<Vec<_>, _>>()?,
comments: value
.comments
.into_iter()
.map(TryInto::try_into)
.collect::<Result<Vec<_>, _>>()?,
rs: value.rs,
hgvs: value.hgvs,
so_id: value.so_id,
function: value.function,
})
}
}
#[derive(Clone, Debug, serde::Serialize, serde::Deserialize, utoipa::ToSchema)]
pub struct ClinvarHaplotypeScv {
pub simple_alleles: Vec<ClinvarAlleleScv>,
pub name: Option<String>,
pub other_names: Vec<ClinvarOtherName>,
pub classifications: Option<ClinvarAggregateClassificationSet>,
pub functional_consequences: Vec<ClinvarFunctionalConsequence>,
pub attributes: Vec<ClinvarAttributeSetElement>,
pub citations: Vec<ClinvarCitation>,
pub xrefs: Vec<ClinvarXref>,
pub comments: Vec<ClinvarComment>,
pub variation_id: Option<i64>,
pub number_of_copies: Option<i32>,
pub number_of_chromosomes: Option<i32>,
}
impl TryFrom<pbs::clinvar_data::clinvar_public::HaplotypeScv> for ClinvarHaplotypeScv {
type Error = anyhow::Error;
fn try_from(
value: pbs::clinvar_data::clinvar_public::HaplotypeScv,
) -> Result<Self, Self::Error> {
Ok(Self {
simple_alleles: value
.simple_alleles
.into_iter()
.map(TryInto::try_into)
.collect::<Result<Vec<_>, _>>()?,
name: value.name,
other_names: value
.other_names
.into_iter()
.map(TryInto::try_into)
.collect::<Result<Vec<_>, _>>()?,
classifications: value.classifications.map(TryInto::try_into).transpose()?,
functional_consequences: value
.functional_consequences
.into_iter()
.map(TryInto::try_into)
.collect::<Result<Vec<_>, _>>()?,
attributes: value
.attributes
.into_iter()
.map(TryInto::try_into)
.collect::<Result<Vec<_>, _>>()?,
citations: value
.citations
.into_iter()
.map(TryInto::try_into)
.collect::<Result<Vec<_>, _>>()?,
xrefs: value
.xrefs
.into_iter()
.map(TryInto::try_into)
.collect::<Result<Vec<_>, _>>()?,
comments: value
.comments
.into_iter()
.map(TryInto::try_into)
.collect::<Result<Vec<_>, _>>()?,
variation_id: value.variation_id,
number_of_copies: value.number_of_copies,
number_of_chromosomes: value.number_of_chromosomes,
})
}
}
#[derive(Clone, Debug, serde::Serialize, serde::Deserialize, utoipa::ToSchema)]
pub struct ClinvarGenotypeScv {
pub simple_alleles: Vec<ClinvarAlleleScv>,
pub haplotypes: Vec<ClinvarHaplotypeScv>,
pub name: Option<String>,
pub other_names: Vec<ClinvarOtherName>,
pub variation_type: ClinvarVariationType,
pub functional_consequences: Vec<ClinvarFunctionalConsequence>,
pub attributes: Vec<ClinvarAttributeSetElement>,
pub citations: Vec<ClinvarCitation>,
pub xrefs: Vec<ClinvarXref>,
pub comments: Vec<ClinvarComment>,
pub variation_id: Option<i64>,
}
impl TryFrom<pbs::clinvar_data::clinvar_public::GenotypeScv> for ClinvarGenotypeScv {
type Error = anyhow::Error;
fn try_from(
value: pbs::clinvar_data::clinvar_public::GenotypeScv,
) -> Result<Self, Self::Error> {
Ok(Self {
simple_alleles: value
.simple_alleles
.into_iter()
.map(TryInto::try_into)
.collect::<Result<Vec<_>, _>>()?,
haplotypes: value
.haplotypes
.into_iter()
.map(TryInto::try_into)
.collect::<Result<Vec<_>, _>>()?,
name: value.name,
other_names: value
.other_names
.into_iter()
.map(TryInto::try_into)
.collect::<Result<Vec<_>, _>>()?,
variation_type: ClinvarVariationType::try_from(
pbs::clinvar_data::clinvar_public::VariationType::try_from(value.variation_type)?,
)?,
functional_consequences: value
.functional_consequences
.into_iter()
.map(TryInto::try_into)
.collect::<Result<Vec<_>, _>>()?,
attributes: value
.attributes
.into_iter()
.map(TryInto::try_into)
.collect::<Result<Vec<_>, _>>()?,
citations: value
.citations
.into_iter()
.map(TryInto::try_into)
.collect::<Result<Vec<_>, _>>()?,
xrefs: value
.xrefs
.into_iter()
.map(TryInto::try_into)
.collect::<Result<Vec<_>, _>>()?,
comments: value
.comments
.into_iter()
.map(TryInto::try_into)
.collect::<Result<Vec<_>, _>>()?,
variation_id: value.variation_id,
})
}
}
#[derive(Clone, Debug, serde::Serialize, serde::Deserialize, utoipa::ToSchema)]
pub struct ClinvarObservedIn {
pub sample: Option<ClinvarSample>,
pub observed_data: Vec<ClinvarObservedData>,
pub cooccurrence_sets: Vec<ClinvarCooccurrence>,
pub trait_set: Option<ClinvarTraitSet>,
pub citations: Vec<ClinvarCitation>,
pub xrefs: Vec<ClinvarXref>,
pub comments: Vec<ClinvarComment>,
}
impl TryFrom<pbs::clinvar_data::clinvar_public::ObservedIn> for ClinvarObservedIn {
type Error = anyhow::Error;
fn try_from(value: pbs::clinvar_data::clinvar_public::ObservedIn) -> Result<Self, Self::Error> {
Ok(Self {
sample: value.sample.map(TryInto::try_into).transpose()?,
observed_data: value
.observed_data
.into_iter()
.map(TryInto::try_into)
.collect::<Result<Vec<_>, _>>()?,
cooccurrence_sets: value
.cooccurrence_sets
.into_iter()
.map(TryInto::try_into)
.collect::<Result<Vec<_>, _>>()?,
trait_set: value.trait_set.map(TryInto::try_into).transpose()?,
citations: value
.citations
.into_iter()
.map(TryInto::try_into)
.collect::<Result<Vec<_>, _>>()?,
xrefs: value
.xrefs
.into_iter()
.map(TryInto::try_into)
.collect::<Result<Vec<_>, _>>()?,
comments: value
.comments
.into_iter()
.map(TryInto::try_into)
.collect::<Result<Vec<_>, _>>()?,
})
}
}
#[derive(Clone, Debug, serde::Serialize, serde::Deserialize, utoipa::ToSchema)]
pub struct ClinvarObservedDataAttribute {
pub base: Option<ClinvarBaseAttribute>,
pub r#type: ClinvarObservedDataAttributeType,
}
impl TryFrom<pbs::clinvar_data::clinvar_public::observed_in::ObservedDataAttribute>
for ClinvarObservedDataAttribute
{
type Error = anyhow::Error;
fn try_from(
value: pbs::clinvar_data::clinvar_public::observed_in::ObservedDataAttribute,
) -> Result<Self, Self::Error> {
Ok(Self {
base: value.base.map(TryInto::try_into).transpose()?,
r#type: ClinvarObservedDataAttributeType::try_from(
pbs::clinvar_data::clinvar_public::observed_in::observed_data_attribute::Type::try_from(
value.r#type
)?
)?,
})
}
}
#[derive(
Clone,
Copy,
Debug,
PartialEq,
Eq,
Hash,
PartialOrd,
Ord,
serde::Serialize,
serde::Deserialize,
strum::Display,
strum::EnumString,
utoipa::ToSchema,
)]
#[serde(rename_all = "snake_case")]
#[strum(serialize_all = "snake_case")]
pub enum ClinvarObservedDataAttributeType {
Description,
VariantAlleles,
SubjectsWithVariant,
SubjectsWithDifferentCausativeVariant,
VariantChromosomes,
IndependentObservations,
SingleHeterozygous,
CompoundHeterozygous,
Homozygous,
Hemizygous,
NumberMosaic,
ObservedUnspecified,
AlleleFrequency,
SecondaryFinding,
GenotypeAndMoiConsistent,
UnaffectedFamilyMemberWithCausativeVariant,
HetParentTransmitNormalAllele,
CosegregatingFamilies,
InformativeMeioses,
SampleLocalId,
SampleVariantId,
FamilyHistory,
NumFamiliesWithVariant,
NumFamiliesWithSegregationObserved,
SegregationObserved,
}
impl TryFrom<pbs::clinvar_data::clinvar_public::observed_in::observed_data_attribute::Type>
for ClinvarObservedDataAttributeType
{
type Error = anyhow::Error;
fn try_from(
value: pbs::clinvar_data::clinvar_public::observed_in::observed_data_attribute::Type,
) -> Result<Self, Self::Error> {
Ok(match value {
pbs::clinvar_data::clinvar_public::observed_in::observed_data_attribute::Type::Description => {
ClinvarObservedDataAttributeType::Description
}
pbs::clinvar_data::clinvar_public::observed_in::observed_data_attribute::Type::VariantAlleles => {
ClinvarObservedDataAttributeType::VariantAlleles
}
pbs::clinvar_data::clinvar_public::observed_in::observed_data_attribute::Type::SubjectsWithVariant => {
ClinvarObservedDataAttributeType::SubjectsWithVariant
}
pbs::clinvar_data::clinvar_public::observed_in::observed_data_attribute::Type::SubjectsWithDifferentCausativeVariant => {
ClinvarObservedDataAttributeType::SubjectsWithDifferentCausativeVariant
}
pbs::clinvar_data::clinvar_public::observed_in::observed_data_attribute::Type::VariantChromosomes => {
ClinvarObservedDataAttributeType::VariantChromosomes
}
pbs::clinvar_data::clinvar_public::observed_in::observed_data_attribute::Type::IndependentObservations => {
ClinvarObservedDataAttributeType::IndependentObservations
}
pbs::clinvar_data::clinvar_public::observed_in::observed_data_attribute::Type::SingleHeterozygous => {
ClinvarObservedDataAttributeType::SingleHeterozygous
}
pbs::clinvar_data::clinvar_public::observed_in::observed_data_attribute::Type::CompoundHeterozygous => {
ClinvarObservedDataAttributeType::CompoundHeterozygous
}
pbs::clinvar_data::clinvar_public::observed_in::observed_data_attribute::Type::Homozygous => {
ClinvarObservedDataAttributeType::Homozygous
}
pbs::clinvar_data::clinvar_public::observed_in::observed_data_attribute::Type::Hemizygous => {
ClinvarObservedDataAttributeType::Hemizygous
}
pbs::clinvar_data::clinvar_public::observed_in::observed_data_attribute::Type::NumberMosaic => {
ClinvarObservedDataAttributeType::NumberMosaic
}
pbs::clinvar_data::clinvar_public::observed_in::observed_data_attribute::Type::ObservedUnspecified => {
ClinvarObservedDataAttributeType::ObservedUnspecified
}
pbs::clinvar_data::clinvar_public::observed_in::observed_data_attribute::Type::AlleleFrequency => {
ClinvarObservedDataAttributeType::AlleleFrequency
}
pbs::clinvar_data::clinvar_public::observed_in::observed_data_attribute::Type::SecondaryFinding => {
ClinvarObservedDataAttributeType::SecondaryFinding
}
pbs::clinvar_data::clinvar_public::observed_in::observed_data_attribute::Type::GenotypeAndMoiConsistent => {
ClinvarObservedDataAttributeType::GenotypeAndMoiConsistent
}
pbs::clinvar_data::clinvar_public::observed_in::observed_data_attribute::Type::UnaffectedFamilyMemberWithCausativeVariant => {
ClinvarObservedDataAttributeType::UnaffectedFamilyMemberWithCausativeVariant
}
pbs::clinvar_data::clinvar_public::observed_in::observed_data_attribute::Type::HetParentTransmitNormalAllele => {
ClinvarObservedDataAttributeType::HetParentTransmitNormalAllele
}
pbs::clinvar_data::clinvar_public::observed_in::observed_data_attribute::Type::CosegregatingFamilies => {
ClinvarObservedDataAttributeType::CosegregatingFamilies
}
pbs::clinvar_data::clinvar_public::observed_in::observed_data_attribute::Type::InformativeMeioses => {
ClinvarObservedDataAttributeType::InformativeMeioses
}
pbs::clinvar_data::clinvar_public::observed_in::observed_data_attribute::Type::SampleLocalId => {
ClinvarObservedDataAttributeType::SampleLocalId
}
pbs::clinvar_data::clinvar_public::observed_in::observed_data_attribute::Type::SampleVariantId => {
ClinvarObservedDataAttributeType::SampleVariantId
}
pbs::clinvar_data::clinvar_public::observed_in::observed_data_attribute::Type::FamilyHistory => {
ClinvarObservedDataAttributeType::FamilyHistory
}
pbs::clinvar_data::clinvar_public::observed_in::observed_data_attribute::Type::NumFamiliesWithVariant => {
ClinvarObservedDataAttributeType::NumFamiliesWithVariant
}
pbs::clinvar_data::clinvar_public::observed_in::observed_data_attribute::Type::NumFamiliesWithSegregationObserved => {
ClinvarObservedDataAttributeType::NumFamiliesWithSegregationObserved
}
pbs::clinvar_data::clinvar_public::observed_in::observed_data_attribute::Type::SegregationObserved => {
ClinvarObservedDataAttributeType::SegregationObserved
}
_ => anyhow::bail!("Invalid observed_data_attribute::Type: {:?}", value)
})
}
}
#[derive(Clone, Debug, serde::Serialize, serde::Deserialize, utoipa::ToSchema)]
pub struct ClinvarObservedData {
pub attributes: Vec<ClinvarObservedDataAttribute>,
pub severity: Option<ClinvarSeverity>,
pub citations: Vec<ClinvarCitation>,
pub xrefs: Vec<ClinvarXref>,
pub comments: Vec<ClinvarComment>,
}
impl TryFrom<pbs::clinvar_data::clinvar_public::observed_in::ObservedData> for ClinvarObservedData {
type Error = anyhow::Error;
fn try_from(
value: pbs::clinvar_data::clinvar_public::observed_in::ObservedData,
) -> Result<Self, Self::Error> {
Ok(Self {
attributes: value
.attributes
.into_iter()
.map(ClinvarObservedDataAttribute::try_from)
.collect::<Result<Vec<_>, _>>()?,
severity: value
.severity
.map(|severity| {
ClinvarSeverity::try_from(
pbs::clinvar_data::clinvar_public::Severity::try_from(severity)?,
)
})
.transpose()?,
citations: value
.citations
.into_iter()
.map(ClinvarCitation::try_from)
.collect::<Result<Vec<_>, _>>()?,
xrefs: value
.xrefs
.into_iter()
.map(ClinvarXref::try_from)
.collect::<Result<Vec<_>, _>>()?,
comments: value
.comments
.into_iter()
.map(ClinvarComment::try_from)
.collect::<Result<Vec<_>, _>>()?,
})
}
}
#[derive(
Clone,
Copy,
Debug,
PartialEq,
Eq,
Hash,
PartialOrd,
Ord,
serde::Serialize,
serde::Deserialize,
strum::Display,
strum::EnumString,
utoipa::ToSchema,
)]
#[serde(rename_all = "snake_case")]
#[strum(serialize_all = "snake_case")]
pub enum ClinvarMethodType {
LiteratureOnly,
ReferencePopulation,
CaseControl,
ClinicalTesting,
InVitro,
InVivo,
InferredFromSource,
Research,
}
impl TryFrom<pbs::clinvar_data::clinvar_public::observed_in::MethodType> for ClinvarMethodType {
type Error = anyhow::Error;
fn try_from(
value: pbs::clinvar_data::clinvar_public::observed_in::MethodType,
) -> Result<Self, Self::Error> {
Ok(match value {
pbs::clinvar_data::clinvar_public::observed_in::MethodType::LiteratureOnly => {
ClinvarMethodType::LiteratureOnly
}
pbs::clinvar_data::clinvar_public::observed_in::MethodType::ReferencePopulation => {
ClinvarMethodType::ReferencePopulation
}
pbs::clinvar_data::clinvar_public::observed_in::MethodType::CaseControl => {
ClinvarMethodType::CaseControl
}
pbs::clinvar_data::clinvar_public::observed_in::MethodType::ClinicalTesting => {
ClinvarMethodType::ClinicalTesting
}
pbs::clinvar_data::clinvar_public::observed_in::MethodType::InVitro => {
ClinvarMethodType::InVitro
}
pbs::clinvar_data::clinvar_public::observed_in::MethodType::InVivo => {
ClinvarMethodType::InVivo
}
pbs::clinvar_data::clinvar_public::observed_in::MethodType::InferredFromSource => {
ClinvarMethodType::InferredFromSource
}
pbs::clinvar_data::clinvar_public::observed_in::MethodType::Research => {
ClinvarMethodType::Research
}
_ => anyhow::bail!("Invalid observed_in::MethodType: {:?}", value),
})
}
}
#[derive(Clone, Debug, serde::Serialize, serde::Deserialize, utoipa::ToSchema)]
pub struct ClinvarClinicalAssertion {
pub clinvar_submission_id: Option<ClinvarSubmissionId>,
pub clinvar_accession: Option<ClinvarAccession>,
pub additional_submitters: Vec<ClinvarSubmitter>,
pub record_status: ClinvarClinicalAssertionRecordStatus,
pub replaces: Vec<String>,
pub replaceds: Vec<ClinvarClinicalAssertionRecordHistory>,
pub classifications: Option<ClinvarClassificationScv>,
pub assertion: ClinvarAssertion,
pub attributes: Vec<ClinvarClinicalAssertionAttributeSetElement>,
pub observed_ins: Vec<ClinvarObservedIn>,
pub simple_allele: Option<ClinvarAlleleScv>,
pub haplotype: Option<ClinvarHaplotypeScv>,
pub genotype: Option<ClinvarGenotypeScv>,
pub trait_set: Option<ClinvarTraitSet>,
pub citations: Vec<ClinvarCitation>,
pub study_name: Option<String>,
pub study_description: Option<String>,
pub comments: Vec<ClinvarComment>,
pub submission_names: Vec<String>,
pub date_created: Option<chrono::DateTime<chrono::Utc>>,
pub date_last_updated: Option<chrono::DateTime<chrono::Utc>>,
pub submission_date: Option<chrono::DateTime<chrono::Utc>>,
pub id: Option<u64>,
pub fda_recognized_database: Option<bool>,
}
impl TryFrom<pbs::clinvar_data::clinvar_public::ClinicalAssertion> for ClinvarClinicalAssertion {
type Error = anyhow::Error;
fn try_from(
value: pbs::clinvar_data::clinvar_public::ClinicalAssertion,
) -> Result<Self, Self::Error> {
Ok(Self {
clinvar_submission_id: value.clinvar_submission_id.map(ClinvarSubmissionId::from),
clinvar_accession: value
.clinvar_accession
.map(ClinvarAccession::try_from)
.transpose()?,
additional_submitters: value
.additional_submitters
.into_iter()
.map(ClinvarSubmitter::try_from)
.collect::<Result<Vec<_>, _>>()?,
record_status: ClinvarClinicalAssertionRecordStatus::try_from(
pbs::clinvar_data::clinvar_public::clinical_assertion::RecordStatus::try_from(
value.record_status,
)?,
)?,
replaces: value.replaces,
replaceds: value
.replaceds
.into_iter()
.map(ClinvarClinicalAssertionRecordHistory::try_from)
.collect::<Result<Vec<_>, _>>()?,
classifications: value
.classifications
.map(ClinvarClassificationScv::try_from)
.transpose()?,
assertion: ClinvarAssertion::try_from(
pbs::clinvar_data::clinvar_public::Assertion::try_from(value.assertion)?,
)?,
attributes: value
.attributes
.into_iter()
.map(ClinvarClinicalAssertionAttributeSetElement::try_from)
.collect::<Result<Vec<_>, _>>()?,
observed_ins: value
.observed_ins
.into_iter()
.map(ClinvarObservedIn::try_from)
.collect::<Result<Vec<_>, _>>()?,
simple_allele: value
.simple_allele
.map(ClinvarAlleleScv::try_from)
.transpose()?,
haplotype: value
.haplotype
.map(ClinvarHaplotypeScv::try_from)
.transpose()?,
genotype: value
.genotype
.map(ClinvarGenotypeScv::try_from)
.transpose()?,
trait_set: value.trait_set.map(ClinvarTraitSet::try_from).transpose()?,
citations: value
.citations
.into_iter()
.map(ClinvarCitation::try_from)
.collect::<Result<Vec<_>, _>>()?,
study_name: value.study_name,
study_description: value.study_description,
comments: value
.comments
.into_iter()
.map(ClinvarComment::try_from)
.collect::<Result<Vec<_>, _>>()?,
submission_names: value.submission_names,
date_created: value.date_created.map(|x| {
chrono::DateTime::<chrono::Utc>::from_timestamp(x.seconds, x.nanos as u32)
.unwrap_or_default()
}),
date_last_updated: value.date_last_updated.map(|x| {
chrono::DateTime::<chrono::Utc>::from_timestamp(x.seconds, x.nanos as u32)
.unwrap_or_default()
}),
submission_date: value.submission_date.map(|x| {
chrono::DateTime::<chrono::Utc>::from_timestamp(x.seconds, x.nanos as u32)
.unwrap_or_default()
}),
id: value.id,
fda_recognized_database: value.fda_recognized_database,
})
}
}
#[derive(Clone, Debug, serde::Serialize, serde::Deserialize, utoipa::ToSchema)]
pub struct ClinvarSubmissionId {
pub local_key: String,
pub title: Option<String>,
pub local_key_is_submitted: Option<bool>,
pub submitted_assembly: Option<String>,
}
impl From<pbs::clinvar_data::clinvar_public::clinical_assertion::ClinvarSubmissionId>
for ClinvarSubmissionId
{
fn from(
value: pbs::clinvar_data::clinvar_public::clinical_assertion::ClinvarSubmissionId,
) -> Self {
Self {
local_key: value.local_key,
title: value.title,
local_key_is_submitted: value.local_key_is_submitted,
submitted_assembly: value.submitted_assembly,
}
}
}
#[derive(Clone, Debug, serde::Serialize, serde::Deserialize, utoipa::ToSchema)]
pub struct ClinvarClinicalAssertionAttributeSetElement {
pub attribute: Option<ClinvarBaseAttribute>,
pub r#type: ClinvarAttributeSetElementType,
pub xrefs: Vec<ClinvarXref>,
pub citations: Vec<ClinvarCitation>,
pub comments: Vec<ClinvarComment>,
}
impl TryFrom<pbs::clinvar_data::clinvar_public::clinical_assertion::AttributeSetElement>
for ClinvarClinicalAssertionAttributeSetElement
{
type Error = anyhow::Error;
fn try_from(
value: pbs::clinvar_data::clinvar_public::clinical_assertion::AttributeSetElement,
) -> Result<Self, Self::Error> {
Ok(Self {
attribute: value.attribute.map(ClinvarBaseAttribute::try_from).transpose()?,
r#type: ClinvarAttributeSetElementType::try_from(
pbs::clinvar_data::clinvar_public::clinical_assertion::attribute_set_element::Type::try_from(
value.r#type
)?
)?,
xrefs: value
.xrefs
.into_iter()
.map(ClinvarXref::try_from)
.collect::<Result<Vec<_>, _>>()?,
citations: value
.citations
.into_iter()
.map(ClinvarCitation::try_from)
.collect::<Result<Vec<_>, _>>()?,
comments: value
.comments
.into_iter()
.map(ClinvarComment::try_from)
.collect::<Result<Vec<_>, _>>()?,
})
}
}
#[derive(
Clone,
Copy,
Debug,
PartialEq,
Eq,
Hash,
PartialOrd,
Ord,
serde::Serialize,
serde::Deserialize,
strum::Display,
strum::EnumString,
utoipa::ToSchema,
)]
#[serde(rename_all = "snake_case")]
#[strum(serialize_all = "snake_case")]
pub enum ClinvarAttributeSetElementType {
ModeOfInheritance,
Penetrance,
AgeOfOnset,
Severity,
ClassificationHistory,
SeverityDescription,
AssertionMethod,
}
impl TryFrom<pbs::clinvar_data::clinvar_public::clinical_assertion::attribute_set_element::Type>
for ClinvarAttributeSetElementType
{
type Error = anyhow::Error;
fn try_from(
value: pbs::clinvar_data::clinvar_public::clinical_assertion::attribute_set_element::Type,
) -> Result<Self, Self::Error> {
match value {
pbs::clinvar_data::clinvar_public::clinical_assertion::attribute_set_element::Type::ModeOfInheritance => Ok(Self::ModeOfInheritance),
pbs::clinvar_data::clinvar_public::clinical_assertion::attribute_set_element::Type::Penetrance => Ok(Self::Penetrance),
pbs::clinvar_data::clinvar_public::clinical_assertion::attribute_set_element::Type::AgeOfOnset => Ok(Self::AgeOfOnset),
pbs::clinvar_data::clinvar_public::clinical_assertion::attribute_set_element::Type::Severity => Ok(Self::Severity),
pbs::clinvar_data::clinvar_public::clinical_assertion::attribute_set_element::Type::ClassificationHistory => Ok(Self::ClassificationHistory),
pbs::clinvar_data::clinvar_public::clinical_assertion::attribute_set_element::Type::SeverityDescription => Ok(Self::SeverityDescription),
pbs::clinvar_data::clinvar_public::clinical_assertion::attribute_set_element::Type::AssertionMethod => Ok(Self::AssertionMethod),
_ => anyhow::bail!("Invalid attribute_set_element::Type {:?}", value)
}
}
}
#[derive(Clone, Debug, serde::Serialize, serde::Deserialize, utoipa::ToSchema)]
pub struct ClinvarAccession {
pub accession: String,
pub version: i32,
pub submitter_identifiers: Option<ClinvarSubmitterIdentifiers>,
pub date_updated: Option<chrono::DateTime<chrono::Utc>>,
pub date_created: Option<chrono::DateTime<chrono::Utc>>,
}
impl TryFrom<pbs::clinvar_data::clinvar_public::clinical_assertion::ClinvarAccession>
for ClinvarAccession
{
type Error = anyhow::Error;
fn try_from(
value: pbs::clinvar_data::clinvar_public::clinical_assertion::ClinvarAccession,
) -> Result<Self, Self::Error> {
Ok(Self {
accession: value.accession,
version: value.version,
submitter_identifiers: value
.submitter_identifiers
.map(ClinvarSubmitterIdentifiers::try_from)
.transpose()?,
date_updated: value.date_updated.map(|ts| {
chrono::DateTime::<chrono::Utc>::from_timestamp(ts.seconds, ts.nanos as u32)
.unwrap_or_default()
}),
date_created: value.date_created.map(|ts| {
chrono::DateTime::<chrono::Utc>::from_timestamp(ts.seconds, ts.nanos as u32)
.unwrap_or_default()
}),
})
}
}
#[derive(
Clone,
Copy,
Debug,
PartialEq,
Eq,
Hash,
PartialOrd,
Ord,
serde::Serialize,
serde::Deserialize,
strum::Display,
strum::EnumString,
utoipa::ToSchema,
)]
#[serde(rename_all = "snake_case")]
#[strum(serialize_all = "snake_case")]
pub enum ClinvarClinicalAssertionRecordStatus {
Current,
Replaced,
Removed,
}
impl TryFrom<pbs::clinvar_data::clinvar_public::clinical_assertion::RecordStatus>
for ClinvarClinicalAssertionRecordStatus
{
type Error = anyhow::Error;
fn try_from(
value: pbs::clinvar_data::clinvar_public::clinical_assertion::RecordStatus,
) -> Result<Self, Self::Error> {
Ok(match value {
pbs::clinvar_data::clinvar_public::clinical_assertion::RecordStatus::Current => {
Self::Current
}
pbs::clinvar_data::clinvar_public::clinical_assertion::RecordStatus::Replaced => {
Self::Replaced
}
pbs::clinvar_data::clinvar_public::clinical_assertion::RecordStatus::Removed => {
Self::Removed
}
_ => anyhow::bail!("Invalid clinical_assertion::RecordStatus: {:?}", value),
})
}
}
#[derive(Clone, Debug, serde::Serialize, serde::Deserialize, utoipa::ToSchema)]
pub struct ClinvarAllele {
pub genes: Vec<ClinvarAlleleGene>,
pub name: String,
pub canonical_spdi: Option<String>,
pub variant_types: Vec<String>,
pub locations: Vec<ClinvarLocation>,
pub other_names: Vec<ClinvarOtherName>,
pub protein_changes: Vec<String>,
pub hgvs_expressions: Vec<ClinvarHgvsExpression>,
pub classifications: Option<ClinvarAggregateClassificationSet>,
pub xrefs: Vec<ClinvarXref>,
pub comments: Vec<ClinvarComment>,
pub functional_consequences: Vec<ClinvarFunctionalConsequence>,
pub allele_frequencies: Vec<ClinvarAlleleFrequency>,
pub global_minor_allele_frequency: Option<ClinvarGlobalMinorAlleleFrequency>,
pub allele_id: i64,
pub variation_id: i64,
}
impl TryFrom<pbs::clinvar_data::clinvar_public::Allele> for ClinvarAllele {
type Error = anyhow::Error;
fn try_from(value: pbs::clinvar_data::clinvar_public::Allele) -> Result<Self, Self::Error> {
Ok(Self {
genes: value
.genes
.into_iter()
.map(ClinvarAlleleGene::try_from)
.collect::<Result<Vec<_>, _>>()?,
name: value.name,
canonical_spdi: value.canonical_spdi,
variant_types: value.variant_types,
locations: value
.locations
.into_iter()
.map(ClinvarLocation::try_from)
.collect::<Result<Vec<_>, _>>()?,
other_names: value
.other_names
.into_iter()
.map(ClinvarOtherName::try_from)
.collect::<Result<Vec<_>, _>>()?,
protein_changes: value.protein_changes,
hgvs_expressions: value
.hgvs_expressions
.into_iter()
.map(ClinvarHgvsExpression::try_from)
.collect::<Result<Vec<_>, _>>()?,
classifications: value
.classifications
.map(ClinvarAggregateClassificationSet::try_from)
.transpose()?,
xrefs: value
.xrefs
.into_iter()
.map(ClinvarXref::try_from)
.collect::<Result<Vec<_>, _>>()?,
comments: value
.comments
.into_iter()
.map(ClinvarComment::try_from)
.collect::<Result<Vec<_>, _>>()?,
functional_consequences: value
.functional_consequences
.into_iter()
.map(ClinvarFunctionalConsequence::try_from)
.collect::<Result<Vec<_>, _>>()?,
allele_frequencies: value
.allele_frequencies
.into_iter()
.map(ClinvarAlleleFrequency::from)
.collect(),
global_minor_allele_frequency: value
.global_minor_allele_frequency
.map(ClinvarGlobalMinorAlleleFrequency::from),
allele_id: value.allele_id,
variation_id: value.variation_id,
})
}
}
#[derive(Clone, Debug, serde::Serialize, serde::Deserialize, utoipa::ToSchema)]
pub struct ClinvarAlleleGene {
pub locations: Vec<ClinvarLocation>,
pub omims: Vec<u64>,
pub haploinsufficiency: Option<ClinvarDosageSensitivity>,
pub triplosensitivity: Option<ClinvarDosageSensitivity>,
pub properties: Vec<String>,
pub symbol: Option<String>,
pub full_name: String,
pub gene_id: i64,
pub hgnc_id: Option<String>,
pub source: String,
pub relationship_type: Option<ClinvarGeneVariantRelationship>,
}
impl TryFrom<pbs::clinvar_data::clinvar_public::allele::Gene> for ClinvarAlleleGene {
type Error = anyhow::Error;
fn try_from(
value: pbs::clinvar_data::clinvar_public::allele::Gene,
) -> Result<Self, Self::Error> {
Ok(Self {
locations: value
.locations
.into_iter()
.map(ClinvarLocation::try_from)
.collect::<Result<Vec<_>, _>>()?,
omims: value.omims,
haploinsufficiency: value
.haploinsufficiency
.map(ClinvarDosageSensitivity::try_from)
.transpose()?,
triplosensitivity: value
.triplosensitivity
.map(ClinvarDosageSensitivity::try_from)
.transpose()?,
properties: value.properties,
symbol: value.symbol,
full_name: value.full_name,
gene_id: value.gene_id,
hgnc_id: value.hgnc_id,
source: value.source,
relationship_type: value
.relationship_type
.map(|x| {
crate::server::run::clinvar_data::ClinvarGeneVariantRelationship::try_from(
pbs::clinvar_data::clinvar_public::GeneVariantRelationship::try_from(x)?,
)
})
.transpose()?,
})
}
}
#[derive(Clone, Debug, serde::Serialize, serde::Deserialize, utoipa::ToSchema)]
pub struct ClinvarAlleleFrequency {
pub value: f64,
pub source: String,
pub url: Option<String>,
}
impl From<pbs::clinvar_data::clinvar_public::allele::AlleleFrequency> for ClinvarAlleleFrequency {
fn from(value: pbs::clinvar_data::clinvar_public::allele::AlleleFrequency) -> Self {
Self {
value: value.value,
source: value.source,
url: value.url,
}
}
}
#[derive(Clone, Debug, serde::Serialize, serde::Deserialize, utoipa::ToSchema)]
pub struct ClinvarGlobalMinorAlleleFrequency {
pub value: f64,
pub source: String,
pub minor_allele: Option<String>,
pub url: Option<String>,
}
impl From<pbs::clinvar_data::clinvar_public::allele::GlobalMinorAlleleFrequency>
for ClinvarGlobalMinorAlleleFrequency
{
fn from(value: pbs::clinvar_data::clinvar_public::allele::GlobalMinorAlleleFrequency) -> Self {
Self {
value: value.value,
source: value.source,
minor_allele: value.minor_allele,
url: value.url,
}
}
}
#[derive(Clone, Debug, serde::Serialize, serde::Deserialize, utoipa::ToSchema)]
pub struct ClinvarAlleleName {
pub value: String,
pub r#type: Option<String>,
}
impl From<pbs::clinvar_data::clinvar_public::allele::Name> for ClinvarAlleleName {
fn from(value: pbs::clinvar_data::clinvar_public::allele::Name) -> Self {
Self {
value: value.value,
r#type: value.r#type,
}
}
}
#[derive(Clone, Debug, serde::Serialize, serde::Deserialize, utoipa::ToSchema)]
pub struct ClinvarHaplotype {
pub simple_alleles: Vec<ClinvarAllele>,
pub name: String,
pub variation_type: ClinvarVariationType,
pub other_names: Vec<ClinvarOtherName>,
pub hgvs_expressions: Vec<ClinvarHgvsExpression>,
pub classifications: Option<ClinvarAggregateClassificationSet>,
pub functional_consequences: Vec<ClinvarFunctionalConsequence>,
pub xrefs: Vec<ClinvarXref>,
pub comments: Vec<ClinvarComment>,
pub variation_id: i64,
pub number_of_copies: Option<i32>,
pub number_of_chromosomes: Option<i32>,
}
impl TryFrom<pbs::clinvar_data::clinvar_public::Haplotype> for ClinvarHaplotype {
type Error = anyhow::Error;
fn try_from(value: pbs::clinvar_data::clinvar_public::Haplotype) -> Result<Self, Self::Error> {
Ok(Self {
simple_alleles: value
.simple_alleles
.into_iter()
.map(ClinvarAllele::try_from)
.collect::<Result<Vec<_>, _>>()?,
name: value.name,
variation_type: ClinvarVariationType::try_from(
pbs::clinvar_data::clinvar_public::VariationType::try_from(value.variation_type)?,
)?,
other_names: value
.other_names
.into_iter()
.map(ClinvarOtherName::try_from)
.collect::<Result<Vec<_>, _>>()?,
hgvs_expressions: value
.hgvs_expressions
.into_iter()
.map(ClinvarHgvsExpression::try_from)
.collect::<Result<Vec<_>, _>>()?,
classifications: value
.classifications
.map(ClinvarAggregateClassificationSet::try_from)
.transpose()?,
functional_consequences: value
.functional_consequences
.into_iter()
.map(ClinvarFunctionalConsequence::try_from)
.collect::<Result<Vec<_>, _>>()?,
xrefs: value
.xrefs
.into_iter()
.map(ClinvarXref::try_from)
.collect::<Result<Vec<_>, _>>()?,
comments: value
.comments
.into_iter()
.map(ClinvarComment::try_from)
.collect::<Result<Vec<_>, _>>()?,
variation_id: value.variation_id,
number_of_copies: value.number_of_copies,
number_of_chromosomes: value.number_of_chromosomes,
})
}
}
#[derive(Clone, Debug, serde::Serialize, serde::Deserialize, utoipa::ToSchema)]
pub struct ClinvarIncludedRecord {
pub simple_allele: Option<ClinvarAllele>,
pub haplotype: Option<ClinvarHaplotype>,
pub classifications: Option<ClinvarAggregateClassificationSet>,
pub submitted_classifications: Vec<ClinvarScv>,
pub classified_variations: Vec<ClinvarClassifiedVariation>,
pub general_citations: Vec<ClinvarGeneralCitations>,
}
impl TryFrom<pbs::clinvar_data::clinvar_public::IncludedRecord> for ClinvarIncludedRecord {
type Error = anyhow::Error;
fn try_from(
value: pbs::clinvar_data::clinvar_public::IncludedRecord,
) -> Result<Self, Self::Error> {
Ok(Self {
simple_allele: value
.simple_allele
.map(ClinvarAllele::try_from)
.transpose()?,
haplotype: value
.haplotype
.map(ClinvarHaplotype::try_from)
.transpose()?,
classifications: value
.classifications
.map(ClinvarAggregateClassificationSet::try_from)
.transpose()?,
submitted_classifications: value
.submitted_classifications
.into_iter()
.map(ClinvarScv::try_from)
.collect::<Result<Vec<_>, _>>()?,
classified_variations: value
.classified_variations
.into_iter()
.map(ClinvarClassifiedVariation::try_from)
.collect::<Result<Vec<_>, _>>()?,
general_citations: value
.general_citations
.into_iter()
.map(ClinvarGeneralCitations::try_from)
.collect::<Result<Vec<_>, _>>()?,
})
}
}
#[derive(Clone, Debug, serde::Serialize, serde::Deserialize, utoipa::ToSchema)]
pub struct ClinvarClassifiedVariation {
pub variation_id: i64,
pub accession: Option<String>,
pub version: i32,
}
impl From<pbs::clinvar_data::clinvar_public::included_record::ClassifiedVariation>
for ClinvarClassifiedVariation
{
fn from(
value: pbs::clinvar_data::clinvar_public::included_record::ClassifiedVariation,
) -> Self {
Self {
variation_id: value.variation_id,
accession: value.accession,
version: value.version,
}
}
}
#[derive(Clone, Debug, serde::Serialize, serde::Deserialize, utoipa::ToSchema)]
pub struct ClinvarGenotype {
pub simple_alleles: Vec<ClinvarAllele>,
pub haplotypes: Vec<ClinvarHaplotype>,
pub name: String,
pub variation_type: ClinvarVariationType,
pub other_names: Vec<ClinvarOtherName>,
pub hgvs_expressions: Vec<ClinvarHgvsExpression>,
pub functional_consequences: Vec<ClinvarFunctionalConsequence>,
pub classifications: Option<ClinvarAggregateClassificationSet>,
pub xrefs: Vec<ClinvarXref>,
pub citations: Vec<ClinvarCitation>,
pub comments: Vec<ClinvarComment>,
pub attributes: Vec<ClinvarAttributeSetElement>,
pub variation_id: Option<i64>,
}
impl TryFrom<pbs::clinvar_data::clinvar_public::Genotype> for ClinvarGenotype {
type Error = anyhow::Error;
fn try_from(value: pbs::clinvar_data::clinvar_public::Genotype) -> Result<Self, Self::Error> {
Ok(Self {
simple_alleles: value
.simple_alleles
.into_iter()
.map(ClinvarAllele::try_from)
.collect::<Result<Vec<_>, _>>()?,
haplotypes: value
.haplotypes
.into_iter()
.map(ClinvarHaplotype::try_from)
.collect::<Result<Vec<_>, _>>()?,
name: value.name,
variation_type: ClinvarVariationType::try_from(
pbs::clinvar_data::clinvar_public::VariationType::try_from(value.variation_type)?,
)?,
other_names: value
.other_names
.into_iter()
.map(ClinvarOtherName::try_from)
.collect::<Result<Vec<_>, _>>()?,
hgvs_expressions: value
.hgvs_expressions
.into_iter()
.map(ClinvarHgvsExpression::try_from)
.collect::<Result<Vec<_>, _>>()?,
functional_consequences: value
.functional_consequences
.into_iter()
.map(ClinvarFunctionalConsequence::try_from)
.collect::<Result<Vec<_>, _>>()?,
classifications: value
.classifications
.map(ClinvarAggregateClassificationSet::try_from)
.transpose()?,
xrefs: value
.xrefs
.into_iter()
.map(ClinvarXref::try_from)
.collect::<Result<Vec<_>, _>>()?,
citations: value
.citations
.into_iter()
.map(ClinvarCitation::try_from)
.collect::<Result<Vec<_>, _>>()?,
comments: value
.comments
.into_iter()
.map(ClinvarComment::try_from)
.collect::<Result<Vec<_>, _>>()?,
attributes: value
.attributes
.into_iter()
.map(ClinvarAttributeSetElement::try_from)
.collect::<Result<Vec<_>, _>>()?,
variation_id: value.variation_id,
})
}
}
#[derive(Clone, Debug, serde::Serialize, serde::Deserialize, utoipa::ToSchema)]
pub struct ClinvarRcvAccession {
pub classified_condition_list: Option<ClinvarRcvClassifiedConditionList>,
pub rcv_classifications: Option<ClinvarRcvClassifications>,
pub replaceds: Vec<ClinvarRecordHistory>,
pub title: Option<String>,
pub accession: String,
pub version: i32,
}
impl TryFrom<pbs::clinvar_data::clinvar_public::RcvAccession> for ClinvarRcvAccession {
type Error = anyhow::Error;
fn try_from(
value: pbs::clinvar_data::clinvar_public::RcvAccession,
) -> Result<Self, Self::Error> {
Ok(Self {
classified_condition_list: value
.classified_condition_list
.map(ClinvarRcvClassifiedConditionList::try_from)
.transpose()?,
rcv_classifications: value
.rcv_classifications
.map(ClinvarRcvClassifications::try_from)
.transpose()?,
replaceds: value
.replaceds
.into_iter()
.map(ClinvarRecordHistory::try_from)
.collect::<Result<Vec<_>, _>>()?,
title: value.title,
accession: value.accession,
version: value.version,
})
}
}
#[derive(Clone, Debug, serde::Serialize, serde::Deserialize, utoipa::ToSchema)]
pub struct ClinvarRcvClassifiedConditionList {
pub classified_conditions: Vec<ClinvarClassifiedCondition>,
pub trait_set_id: Option<i64>,
}
impl TryFrom<pbs::clinvar_data::clinvar_public::rcv_accession::ClassifiedConditionList>
for ClinvarRcvClassifiedConditionList
{
type Error = anyhow::Error;
fn try_from(
value: pbs::clinvar_data::clinvar_public::rcv_accession::ClassifiedConditionList,
) -> Result<Self, Self::Error> {
Ok(Self {
classified_conditions: value
.classified_conditions
.into_iter()
.map(ClinvarClassifiedCondition::try_from)
.collect::<Result<Vec<_>, _>>()?,
trait_set_id: value.trait_set_id,
})
}
}
#[derive(Clone, Debug, serde::Serialize, serde::Deserialize, utoipa::ToSchema)]
pub struct ClinvarRcvGermlineClassification {
pub review_status: ClinvarAggregateGermlineReviewStatus,
pub description: Option<ClinvarRcvGermlineClassificationDescription>,
}
impl TryFrom<pbs::clinvar_data::clinvar_public::rcv_accession::GermlineClassification>
for ClinvarRcvGermlineClassification
{
type Error = anyhow::Error;
fn try_from(
value: pbs::clinvar_data::clinvar_public::rcv_accession::GermlineClassification,
) -> Result<Self, Self::Error> {
Ok(Self {
review_status: ClinvarAggregateGermlineReviewStatus::try_from(
pbs::clinvar_data::clinvar_public::AggregateGermlineReviewStatus::try_from(
value.review_status,
)?,
)?,
description: value
.description
.map(ClinvarRcvGermlineClassificationDescription::try_from)
.transpose()?,
})
}
}
#[derive(Clone, Debug, serde::Serialize, serde::Deserialize, utoipa::ToSchema)]
pub struct ClinvarRcvGermlineClassificationDescription {
pub value: String,
pub date_last_evaluated: Option<chrono::DateTime<chrono::Utc>>,
pub submission_count: Option<u32>,
}
impl TryFrom<pbs::clinvar_data::clinvar_public::rcv_accession::germline_classification::Description>
for ClinvarRcvGermlineClassificationDescription
{
type Error = anyhow::Error;
fn try_from(
value: pbs::clinvar_data::clinvar_public::rcv_accession::germline_classification::Description,
) -> Result<Self, Self::Error> {
Ok(Self {
value: value.value,
date_last_evaluated: value.date_last_evaluated.map(|ts| {
chrono::DateTime::<chrono::Utc>::from_timestamp(ts.seconds, ts.nanos as u32)
.unwrap_or_default()
}),
submission_count: value.submission_count,
})
}
}
#[derive(Clone, Debug, serde::Serialize, serde::Deserialize, utoipa::ToSchema)]
pub struct ClinvarRcvAccessionSomaticClinicalImpact {
pub review_status: ClinvarAggregateSomaticClinicalImpactReviewStatus,
pub descriptions: Vec<ClinvarRcvSomaticClinicalImpactDescription>,
}
impl TryFrom<pbs::clinvar_data::clinvar_public::rcv_accession::SomaticClinicalImpact>
for ClinvarRcvAccessionSomaticClinicalImpact
{
type Error = anyhow::Error;
fn try_from(
value: pbs::clinvar_data::clinvar_public::rcv_accession::SomaticClinicalImpact,
) -> Result<Self, Self::Error> {
Ok(Self {
review_status: ClinvarAggregateSomaticClinicalImpactReviewStatus::try_from(
pbs::clinvar_data::clinvar_public::AggregateSomaticClinicalImpactReviewStatus::try_from(
value.review_status
)?
)?,
descriptions: value.descriptions.into_iter().map(ClinvarRcvSomaticClinicalImpactDescription::try_from).collect::<Result<Vec<_>, _>>()?,
})
}
}
#[derive(Clone, Debug, serde::Serialize, serde::Deserialize, utoipa::ToSchema)]
pub struct ClinvarRcvSomaticClinicalImpactDescription {
pub value: String,
pub clinical_impact_assertion_type: Option<String>,
pub clinical_impact_clinical_significance: Option<String>,
pub date_last_evaluated: Option<chrono::DateTime<chrono::Utc>>,
pub submission_count: Option<u32>,
}
impl TryFrom<pbs::clinvar_data::clinvar_public::rcv_accession::somatic_clinical_impact::Description>
for ClinvarRcvSomaticClinicalImpactDescription
{
type Error = anyhow::Error;
fn try_from(
value: pbs::clinvar_data::clinvar_public::rcv_accession::somatic_clinical_impact::Description,
) -> Result<Self, Self::Error> {
Ok(Self {
value: value.value,
clinical_impact_assertion_type: value.clinical_impact_assertion_type,
clinical_impact_clinical_significance: value.clinical_impact_clinical_significance,
date_last_evaluated: value.date_last_evaluated.map(|ts| {
chrono::DateTime::<chrono::Utc>::from_timestamp(ts.seconds, ts.nanos as u32)
.unwrap_or_default()
}),
submission_count: value.submission_count,
})
}
}
#[derive(Clone, Debug, serde::Serialize, serde::Deserialize, utoipa::ToSchema)]
pub struct ClinvarRcvOncogenicityClassification {
pub review_status: ClinvarAggregateGermlineReviewStatus,
pub description: Option<ClinvarRcvOncogenicityDescription>,
}
impl TryFrom<pbs::clinvar_data::clinvar_public::rcv_accession::OncogenicityClassification>
for ClinvarRcvOncogenicityClassification
{
type Error = anyhow::Error;
fn try_from(
value: pbs::clinvar_data::clinvar_public::rcv_accession::OncogenicityClassification,
) -> Result<Self, Self::Error> {
Ok(Self {
review_status: ClinvarAggregateGermlineReviewStatus::try_from(
pbs::clinvar_data::clinvar_public::AggregateGermlineReviewStatus::try_from(
value.review_status,
)?,
)?,
description: value
.description
.map(ClinvarRcvOncogenicityDescription::try_from)
.transpose()?,
})
}
}
#[derive(Clone, Debug, serde::Serialize, serde::Deserialize, utoipa::ToSchema)]
pub struct ClinvarRcvOncogenicityDescription {
pub value: String,
pub date_last_evaluated: Option<chrono::DateTime<chrono::Utc>>,
pub submission_count: Option<u32>,
}
impl
TryFrom<
pbs::clinvar_data::clinvar_public::rcv_accession::oncogenicity_classification::Description,
> for ClinvarRcvOncogenicityDescription
{
type Error = anyhow::Error;
fn try_from(
value: pbs::clinvar_data::clinvar_public::rcv_accession::oncogenicity_classification::Description,
) -> Result<Self, Self::Error> {
Ok(Self {
value: value.value,
date_last_evaluated: value.date_last_evaluated.map(|ts| {
chrono::DateTime::<chrono::Utc>::from_timestamp(ts.seconds, ts.nanos as u32)
.unwrap_or_default()
}),
submission_count: value.submission_count,
})
}
}
#[derive(Clone, Debug, serde::Serialize, serde::Deserialize, utoipa::ToSchema)]
pub struct ClinvarRcvClassifications {
pub germline_classification: Option<ClinvarRcvGermlineClassification>,
pub somatic_clinical_impact: Option<ClinvarRcvAccessionSomaticClinicalImpact>,
pub oncogenicity_classification: Option<ClinvarRcvOncogenicityClassification>,
}
impl TryFrom<pbs::clinvar_data::clinvar_public::rcv_accession::RcvClassifications>
for ClinvarRcvClassifications
{
type Error = anyhow::Error;
fn try_from(
value: pbs::clinvar_data::clinvar_public::rcv_accession::RcvClassifications,
) -> Result<Self, Self::Error> {
Ok(Self {
germline_classification: value
.germline_classification
.map(ClinvarRcvGermlineClassification::try_from)
.transpose()?,
somatic_clinical_impact: value
.somatic_clinical_impact
.map(ClinvarRcvAccessionSomaticClinicalImpact::try_from)
.transpose()?,
oncogenicity_classification: value
.oncogenicity_classification
.map(ClinvarRcvOncogenicityClassification::try_from)
.transpose()?,
})
}
}
#[derive(Clone, Debug, serde::Serialize, serde::Deserialize, utoipa::ToSchema)]
pub struct ClinvarClassifiedRecord {
pub simple_allele: Option<ClinvarAllele>,
pub haplotype: Option<ClinvarHaplotype>,
pub genotype: Option<ClinvarGenotype>,
pub rcv_list: Option<ClinvarRcvList>,
pub classifications: Option<ClinvarAggregateClassificationSet>,
pub clinical_assertions: Vec<ClinvarClinicalAssertion>,
pub trait_mappings: Vec<ClinvarRcvTraitMapping>,
pub deleted_scvs: Vec<ClinvarDeletedScv>,
pub general_citations: Vec<ClinvarGeneralCitations>,
}
impl TryFrom<pbs::clinvar_data::clinvar_public::ClassifiedRecord> for ClinvarClassifiedRecord {
type Error = anyhow::Error;
fn try_from(
value: pbs::clinvar_data::clinvar_public::ClassifiedRecord,
) -> Result<Self, Self::Error> {
Ok(Self {
simple_allele: value
.simple_allele
.map(ClinvarAllele::try_from)
.transpose()?,
haplotype: value
.haplotype
.map(ClinvarHaplotype::try_from)
.transpose()?,
genotype: value.genotype.map(ClinvarGenotype::try_from).transpose()?,
rcv_list: value.rcv_list.map(ClinvarRcvList::try_from).transpose()?,
classifications: value
.classifications
.map(ClinvarAggregateClassificationSet::try_from)
.transpose()?,
clinical_assertions: value
.clinical_assertions
.into_iter()
.map(ClinvarClinicalAssertion::try_from)
.collect::<Result<Vec<_>, _>>()?,
trait_mappings: value
.trait_mappings
.into_iter()
.map(ClinvarRcvTraitMapping::try_from)
.collect::<Result<Vec<_>, _>>()?,
deleted_scvs: value
.deleted_scvs
.into_iter()
.map(ClinvarDeletedScv::try_from)
.collect::<Result<Vec<_>, _>>()?,
general_citations: value
.general_citations
.into_iter()
.map(ClinvarGeneralCitations::try_from)
.collect::<Result<Vec<_>, _>>()?,
})
}
}
#[derive(Clone, Debug, serde::Serialize, serde::Deserialize, utoipa::ToSchema)]
pub struct ClinvarRcvList {
pub rcv_accessions: Vec<ClinvarRcvAccession>,
pub submission_count: Option<i32>,
pub independent_observations: Option<i32>,
}
impl TryFrom<pbs::clinvar_data::clinvar_public::classified_record::RcvList> for ClinvarRcvList {
type Error = anyhow::Error;
fn try_from(
value: pbs::clinvar_data::clinvar_public::classified_record::RcvList,
) -> Result<Self, anyhow::Error> {
Ok(Self {
rcv_accessions: value
.rcv_accessions
.into_iter()
.map(ClinvarRcvAccession::try_from)
.collect::<Result<Vec<_>, _>>()?,
submission_count: value.submission_count,
independent_observations: value.independent_observations,
})
}
}
#[derive(Clone, Debug, serde::Serialize, serde::Deserialize, utoipa::ToSchema)]
pub struct ClinvarRcvTraitMapping {
pub medgens: Vec<ClinvarRcvTraitMappingMedgen>,
pub clinical_assertion_id: i64,
pub trait_type: String,
pub mapping_type: ClinvarRcvTraitMappingType,
pub mapping_value: String,
pub mapping_ref: String,
}
impl TryFrom<pbs::clinvar_data::clinvar_public::classified_record::TraitMapping>
for ClinvarRcvTraitMapping
{
type Error = anyhow::Error;
fn try_from(
value: pbs::clinvar_data::clinvar_public::classified_record::TraitMapping,
) -> Result<Self, anyhow::Error> {
Ok(Self {
medgens: value
.medgens
.into_iter()
.map(ClinvarRcvTraitMappingMedgen::from)
.collect(),
clinical_assertion_id: value.clinical_assertion_id,
trait_type: value.trait_type,
mapping_type: ClinvarRcvTraitMappingType::try_from(
pbs::clinvar_data::clinvar_public::classified_record::MappingType::try_from(
value.mapping_type,
)?,
)?,
mapping_value: value.mapping_value,
mapping_ref: value.mapping_ref,
})
}
}
#[derive(Clone, Debug, serde::Serialize, serde::Deserialize, utoipa::ToSchema)]
pub struct ClinvarRcvTraitMappingMedgen {
pub name: String,
pub cui: String,
}
impl From<pbs::clinvar_data::clinvar_public::classified_record::trait_mapping::Medgen>
for ClinvarRcvTraitMappingMedgen
{
fn from(
value: pbs::clinvar_data::clinvar_public::classified_record::trait_mapping::Medgen,
) -> Self {
Self {
name: value.name,
cui: value.cui,
}
}
}
#[derive(
Clone,
Copy,
Debug,
PartialEq,
Eq,
Hash,
PartialOrd,
Ord,
serde::Serialize,
serde::Deserialize,
strum::Display,
strum::EnumString,
utoipa::ToSchema,
)]
#[serde(rename_all = "snake_case")]
#[strum(serialize_all = "snake_case")]
pub enum ClinvarRcvTraitMappingType {
Name,
Xref,
}
impl TryFrom<pbs::clinvar_data::clinvar_public::classified_record::MappingType>
for ClinvarRcvTraitMappingType
{
type Error = anyhow::Error;
fn try_from(
value: pbs::clinvar_data::clinvar_public::classified_record::MappingType,
) -> Result<Self, Self::Error> {
match value {
pbs::clinvar_data::clinvar_public::classified_record::MappingType::Name => {
Ok(Self::Name)
}
pbs::clinvar_data::clinvar_public::classified_record::MappingType::Xref => {
Ok(Self::Xref)
}
_ => Err(anyhow::anyhow!("Unknown value: {:?}", value)),
}
}
}
#[derive(Clone, Debug, serde::Serialize, serde::Deserialize, utoipa::ToSchema)]
pub struct ClinvarVariationArchive {
pub variation_id: i64,
pub variation_name: String,
pub variation_type: String,
pub date_created: Option<chrono::DateTime<chrono::Utc>>,
pub date_last_updated: Option<chrono::DateTime<chrono::Utc>>,
pub most_recent_submission: Option<chrono::DateTime<chrono::Utc>>,
pub accession: String,
pub version: i32,
pub number_of_submitters: i32,
pub number_of_submissions: i32,
pub record_type: ClinvarVariationArchiveRecordType,
pub record_status: ClinvarVariationArchiveRecordStatus,
pub replaced_by: Option<ClinvarRecordHistory>,
pub replaceds: Vec<ClinvarRecordHistory>,
pub comment: Option<ClinvarComment>,
pub species: Option<ClinvarSpecies>,
pub classified_record: Option<ClinvarClassifiedRecord>,
pub included_record: Option<ClinvarIncludedRecord>,
}
impl TryFrom<pbs::clinvar_data::clinvar_public::VariationArchive> for ClinvarVariationArchive {
type Error = anyhow::Error;
fn try_from(
value: pbs::clinvar_data::clinvar_public::VariationArchive,
) -> Result<Self, Self::Error> {
Ok(Self {
variation_id: value.variation_id,
variation_name: value.variation_name,
variation_type: value.variation_type,
date_created: value.date_created.map(|ts| {
chrono::DateTime::<chrono::Utc>::from_timestamp(ts.seconds, ts.nanos as u32)
.unwrap_or_default()
}),
date_last_updated: value.date_last_updated.map(|ts| {
chrono::DateTime::<chrono::Utc>::from_timestamp(ts.seconds, ts.nanos as u32)
.unwrap_or_default()
}),
most_recent_submission: value.most_recent_submission.map(|ts| {
chrono::DateTime::<chrono::Utc>::from_timestamp(ts.seconds, ts.nanos as u32)
.unwrap_or_default()
}),
accession: value.accession,
version: value.version,
number_of_submitters: value.number_of_submitters,
number_of_submissions: value.number_of_submissions,
record_type: ClinvarVariationArchiveRecordType::try_from(
pbs::clinvar_data::clinvar_public::variation_archive::RecordType::try_from(
value.record_type,
)?,
)?,
record_status: ClinvarVariationArchiveRecordStatus::try_from(
pbs::clinvar_data::clinvar_public::variation_archive::RecordStatus::try_from(
value.record_status,
)?,
)?,
replaced_by: value.replaced_by.map(TryInto::try_into).transpose()?,
replaceds: value
.replaceds
.into_iter()
.map(TryInto::try_into)
.collect::<Result<_, _>>()?,
comment: value.comment.map(TryInto::try_into).transpose()?,
species: value.species.map(TryInto::try_into).transpose()?,
classified_record: value.classified_record.map(TryInto::try_into).transpose()?,
included_record: value.included_record.map(TryInto::try_into).transpose()?,
})
}
}
#[derive(
Clone,
Copy,
Debug,
PartialEq,
Eq,
Hash,
PartialOrd,
Ord,
serde::Serialize,
serde::Deserialize,
strum::Display,
strum::EnumString,
utoipa::ToSchema,
)]
#[serde(rename_all = "snake_case")]
#[strum(serialize_all = "snake_case")]
pub enum ClinvarVariationArchiveRecordType {
Included,
Classified,
}
impl TryFrom<pbs::clinvar_data::clinvar_public::variation_archive::RecordType>
for ClinvarVariationArchiveRecordType
{
type Error = anyhow::Error;
fn try_from(
value: pbs::clinvar_data::clinvar_public::variation_archive::RecordType,
) -> Result<Self, Self::Error> {
Ok(match value {
pbs::clinvar_data::clinvar_public::variation_archive::RecordType::Included => {
ClinvarVariationArchiveRecordType::Included
}
pbs::clinvar_data::clinvar_public::variation_archive::RecordType::Classified => {
ClinvarVariationArchiveRecordType::Classified
}
_ => anyhow::bail!("Unknown variation_archive::RecordType: {:?}", value),
})
}
}
#[derive(
Clone,
Copy,
Debug,
PartialEq,
Eq,
Hash,
PartialOrd,
Ord,
serde::Serialize,
serde::Deserialize,
strum::Display,
strum::EnumString,
utoipa::ToSchema,
)]
#[serde(rename_all = "snake_case")]
#[strum(serialize_all = "snake_case")]
pub enum ClinvarVariationArchiveRecordStatus {
Current,
Previous,
Replaced,
Deleted,
}
impl TryFrom<pbs::clinvar_data::clinvar_public::variation_archive::RecordStatus>
for ClinvarVariationArchiveRecordStatus
{
type Error = anyhow::Error;
fn try_from(
value: pbs::clinvar_data::clinvar_public::variation_archive::RecordStatus,
) -> Result<Self, Self::Error> {
Ok(match value {
pbs::clinvar_data::clinvar_public::variation_archive::RecordStatus::Current => {
ClinvarVariationArchiveRecordStatus::Current
}
pbs::clinvar_data::clinvar_public::variation_archive::RecordStatus::Previous => {
ClinvarVariationArchiveRecordStatus::Previous
}
pbs::clinvar_data::clinvar_public::variation_archive::RecordStatus::Replaced => {
ClinvarVariationArchiveRecordStatus::Replaced
}
pbs::clinvar_data::clinvar_public::variation_archive::RecordStatus::Deleted => {
ClinvarVariationArchiveRecordStatus::Deleted
}
_ => anyhow::bail!("Unknown variation_archive::RecordStatus: {:?}", value),
})
}
}
#[derive(Clone, Debug, serde::Serialize, serde::Deserialize, utoipa::ToSchema)]
pub struct ClinvarVariationRelease {
pub release_date: Option<chrono::DateTime<chrono::Utc>>,
pub variation_archives: Vec<ClinvarVariationArchive>,
}
impl TryFrom<pbs::clinvar_data::clinvar_public::ClinvarVariationRelease>
for ClinvarVariationRelease
{
type Error = anyhow::Error;
fn try_from(
value: pbs::clinvar_data::clinvar_public::ClinvarVariationRelease,
) -> Result<Self, Self::Error> {
Ok(Self {
release_date: value.release_date.map(|ts| {
chrono::DateTime::<chrono::Utc>::from_timestamp(ts.seconds, ts.nanos as u32)
.unwrap_or_default()
}),
variation_archives: value
.variation_archives
.into_iter()
.map(TryInto::try_into)
.collect::<Result<_, _>>()?,
})
}
}
#[derive(
Clone,
Copy,
Debug,
PartialEq,
Eq,
Hash,
PartialOrd,
Ord,
serde::Serialize,
serde::Deserialize,
strum::Display,
strum::EnumString,
utoipa::ToSchema,
)]
#[serde(rename_all = "snake_case")]
#[strum(serialize_all = "snake_case")]
pub enum ClinvarGeneVariantRelationship {
VariantWithinGene,
GeneOverlappedByVariant,
NearGeneUpstream,
NearGeneDownstream,
AssertedButNotComputed,
WithinMultipleGenesByOverlap,
WithinSingleGene,
}
impl TryFrom<pbs::clinvar_data::clinvar_public::GeneVariantRelationship>
for ClinvarGeneVariantRelationship
{
type Error = anyhow::Error;
fn try_from(
value: pbs::clinvar_data::clinvar_public::GeneVariantRelationship,
) -> Result<Self, Self::Error> {
Ok(match value {
pbs::clinvar_data::clinvar_public::GeneVariantRelationship::VariantWithinGene => {
ClinvarGeneVariantRelationship::VariantWithinGene
}
pbs::clinvar_data::clinvar_public::GeneVariantRelationship::GeneOverlappedByVariant => {
ClinvarGeneVariantRelationship::GeneOverlappedByVariant
}
pbs::clinvar_data::clinvar_public::GeneVariantRelationship::NearGeneUpstream => {
ClinvarGeneVariantRelationship::NearGeneUpstream
}
pbs::clinvar_data::clinvar_public::GeneVariantRelationship::NearGeneDownstream => {
ClinvarGeneVariantRelationship::NearGeneDownstream
}
pbs::clinvar_data::clinvar_public::GeneVariantRelationship::AssertedButNotComputed => {
ClinvarGeneVariantRelationship::AssertedButNotComputed
}
pbs::clinvar_data::clinvar_public::GeneVariantRelationship::WithinMultipleGenesByOverlap => {
ClinvarGeneVariantRelationship::WithinMultipleGenesByOverlap
}
pbs::clinvar_data::clinvar_public::GeneVariantRelationship::WithinSingleGene => {
ClinvarGeneVariantRelationship::WithinSingleGene
}
_ => anyhow::bail!("Unknown GeneVariantRelationship: {:?}", value),
})
}
}
#[derive(
Clone,
Copy,
Debug,
PartialEq,
Eq,
Hash,
PartialOrd,
Ord,
serde::Serialize,
serde::Deserialize,
strum::Display,
strum::EnumString,
utoipa::ToSchema,
)]
#[serde(rename_all = "snake_case")]
#[strum(serialize_all = "snake_case")]
pub enum ClinvarSeverity {
Mild,
Moderate,
Severe,
}
impl TryFrom<pbs::clinvar_data::clinvar_public::Severity> for ClinvarSeverity {
type Error = anyhow::Error;
fn try_from(value: pbs::clinvar_data::clinvar_public::Severity) -> Result<Self, Self::Error> {
Ok(match value {
pbs::clinvar_data::clinvar_public::Severity::Mild => ClinvarSeverity::Mild,
pbs::clinvar_data::clinvar_public::Severity::Moderate => ClinvarSeverity::Moderate,
pbs::clinvar_data::clinvar_public::Severity::Severe => ClinvarSeverity::Severe,
_ => anyhow::bail!("Unknown Severity: {:?}", value),
})
}
}
#[derive(
Clone,
Copy,
Debug,
PartialEq,
Eq,
Hash,
PartialOrd,
Ord,
serde::Serialize,
serde::Deserialize,
strum::Display,
strum::EnumString,
utoipa::ToSchema,
)]
#[serde(rename_all = "snake_case")]
#[strum(serialize_all = "snake_case")]
pub enum ClinvarStatus {
Current,
CompletedAndRetired,
Delete,
InDevelopment,
Reclassified,
Reject,
Secondary,
Suppressed,
UnderReview,
}
impl TryFrom<pbs::clinvar_data::clinvar_public::Status> for ClinvarStatus {
type Error = anyhow::Error;
fn try_from(value: pbs::clinvar_data::clinvar_public::Status) -> Result<Self, Self::Error> {
Ok(match value {
pbs::clinvar_data::clinvar_public::Status::Current => ClinvarStatus::Current,
pbs::clinvar_data::clinvar_public::Status::CompletedAndRetired => {
ClinvarStatus::CompletedAndRetired
}
pbs::clinvar_data::clinvar_public::Status::Delete => ClinvarStatus::Delete,
pbs::clinvar_data::clinvar_public::Status::InDevelopment => {
ClinvarStatus::InDevelopment
}
pbs::clinvar_data::clinvar_public::Status::Reclassified => ClinvarStatus::Reclassified,
pbs::clinvar_data::clinvar_public::Status::Reject => ClinvarStatus::Reject,
pbs::clinvar_data::clinvar_public::Status::Secondary => ClinvarStatus::Secondary,
pbs::clinvar_data::clinvar_public::Status::Suppressed => ClinvarStatus::Suppressed,
pbs::clinvar_data::clinvar_public::Status::UnderReview => ClinvarStatus::UnderReview,
_ => anyhow::bail!("Unknown Status: {:?}", value),
})
}
}
#[derive(
Clone,
Copy,
Debug,
PartialEq,
Eq,
Hash,
PartialOrd,
Ord,
serde::Serialize,
serde::Deserialize,
strum::Display,
strum::EnumString,
utoipa::ToSchema,
)]
#[serde(rename_all = "snake_case")]
#[strum(serialize_all = "snake_case")]
pub enum ClinvarSubmitterReviewStatus {
NoClassificationProvided,
NoAssertionCriteriaProvided,
CriteriaProvidedSingleSubmitter,
ReviewedByExpertPanel,
PracticeGuideline,
FlaggedSubmission,
CriteriaProvidedMultipleSubmittersNoConflicts,
CriteriaProvidedConflictingClassifications,
ClassifiedBySingleSubmitter,
ReviewedByProfessionalSociety,
NotClassifiedBySubmitter,
ClassifiedByMultipleSubmitters,
}
impl TryFrom<pbs::clinvar_data::clinvar_public::SubmitterReviewStatus>
for ClinvarSubmitterReviewStatus
{
type Error = anyhow::Error;
fn try_from(
value: pbs::clinvar_data::clinvar_public::SubmitterReviewStatus,
) -> Result<Self, Self::Error> {
Ok(match value {
pbs::clinvar_data::clinvar_public::SubmitterReviewStatus::NoClassificationProvided => ClinvarSubmitterReviewStatus::NoClassificationProvided,
pbs::clinvar_data::clinvar_public::SubmitterReviewStatus::NoAssertionCriteriaProvided => ClinvarSubmitterReviewStatus::NoAssertionCriteriaProvided,
pbs::clinvar_data::clinvar_public::SubmitterReviewStatus::CriteriaProvidedSingleSubmitter => ClinvarSubmitterReviewStatus::CriteriaProvidedSingleSubmitter,
pbs::clinvar_data::clinvar_public::SubmitterReviewStatus::ReviewedByExpertPanel => ClinvarSubmitterReviewStatus::ReviewedByExpertPanel,
pbs::clinvar_data::clinvar_public::SubmitterReviewStatus::PracticeGuideline => ClinvarSubmitterReviewStatus::PracticeGuideline,
pbs::clinvar_data::clinvar_public::SubmitterReviewStatus::FlaggedSubmission => ClinvarSubmitterReviewStatus::FlaggedSubmission,
pbs::clinvar_data::clinvar_public::SubmitterReviewStatus::CriteriaProvidedMultipleSubmittersNoConflicts => ClinvarSubmitterReviewStatus::CriteriaProvidedMultipleSubmittersNoConflicts,
pbs::clinvar_data::clinvar_public::SubmitterReviewStatus::CriteriaProvidedConflictingClassifications => ClinvarSubmitterReviewStatus::CriteriaProvidedConflictingClassifications,
pbs::clinvar_data::clinvar_public::SubmitterReviewStatus::ClassifiedBySingleSubmitter => ClinvarSubmitterReviewStatus::ClassifiedBySingleSubmitter,
pbs::clinvar_data::clinvar_public::SubmitterReviewStatus::ReviewedByProfessionalSociety => ClinvarSubmitterReviewStatus::ReviewedByProfessionalSociety,
pbs::clinvar_data::clinvar_public::SubmitterReviewStatus::NotClassifiedBySubmitter => ClinvarSubmitterReviewStatus::NotClassifiedBySubmitter,
pbs::clinvar_data::clinvar_public::SubmitterReviewStatus::ClassifiedByMultipleSubmitters => ClinvarSubmitterReviewStatus::ClassifiedByMultipleSubmitters,
_ => anyhow::bail!("Unknown SubmitterReviewStatus: {:?}", value),
})
}
}
#[derive(
Clone,
Copy,
Debug,
PartialEq,
Eq,
Hash,
PartialOrd,
Ord,
serde::Serialize,
serde::Deserialize,
strum::Display,
strum::EnumString,
utoipa::ToSchema,
)]
#[serde(rename_all = "snake_case")]
#[strum(serialize_all = "snake_case")]
pub enum ClinvarZygosity {
Homozygote,
SingleHeterozygote,
CompoundHeterozygote,
Hemizygote,
NotProvided,
}
impl TryFrom<pbs::clinvar_data::clinvar_public::Zygosity> for ClinvarZygosity {
type Error = anyhow::Error;
fn try_from(value: pbs::clinvar_data::clinvar_public::Zygosity) -> Result<Self, Self::Error> {
Ok(match value {
pbs::clinvar_data::clinvar_public::Zygosity::Homozygote => ClinvarZygosity::Homozygote,
pbs::clinvar_data::clinvar_public::Zygosity::SingleHeterozygote => {
ClinvarZygosity::SingleHeterozygote
}
pbs::clinvar_data::clinvar_public::Zygosity::CompoundHeterozygote => {
ClinvarZygosity::CompoundHeterozygote
}
pbs::clinvar_data::clinvar_public::Zygosity::Hemizygote => ClinvarZygosity::Hemizygote,
pbs::clinvar_data::clinvar_public::Zygosity::NotProvided => {
ClinvarZygosity::NotProvided
}
_ => anyhow::bail!("Unknown Zygosity: {:?}", value),
})
}
}
#[derive(
Clone,
Copy,
Debug,
PartialEq,
Eq,
Hash,
PartialOrd,
Ord,
serde::Serialize,
serde::Deserialize,
strum::Display,
strum::EnumString,
utoipa::ToSchema,
)]
#[serde(rename_all = "snake_case")]
#[strum(serialize_all = "snake_case")]
pub enum ClinvarAssertion {
VariationToDisease,
VariationToIncludedDisease,
VariationInModifierGeneToDisease,
ConfersSensitivity,
ConfersResistance,
VariantToNamedProtein,
}
impl TryFrom<pbs::clinvar_data::clinvar_public::Assertion> for ClinvarAssertion {
type Error = anyhow::Error;
fn try_from(value: pbs::clinvar_data::clinvar_public::Assertion) -> Result<Self, Self::Error> {
Ok(match value {
pbs::clinvar_data::clinvar_public::Assertion::VariationToDisease => {
ClinvarAssertion::VariationToDisease
}
pbs::clinvar_data::clinvar_public::Assertion::VariationToIncludedDisease => {
ClinvarAssertion::VariationToIncludedDisease
}
pbs::clinvar_data::clinvar_public::Assertion::VariationInModifierGeneToDisease => {
ClinvarAssertion::VariationInModifierGeneToDisease
}
pbs::clinvar_data::clinvar_public::Assertion::ConfersSensitivity => {
ClinvarAssertion::ConfersSensitivity
}
pbs::clinvar_data::clinvar_public::Assertion::ConfersResistance => {
ClinvarAssertion::ConfersResistance
}
pbs::clinvar_data::clinvar_public::Assertion::VariantToNamedProtein => {
ClinvarAssertion::VariantToNamedProtein
}
_ => anyhow::bail!("Unknown Assertion: {:?}", value),
})
}
}
#[derive(
Clone,
Copy,
Debug,
PartialEq,
Eq,
Hash,
PartialOrd,
Ord,
serde::Serialize,
serde::Deserialize,
strum::Display,
strum::EnumString,
utoipa::ToSchema,
)]
#[serde(rename_all = "snake_case")]
#[strum(serialize_all = "snake_case")]
pub enum ClinvarAggregateGermlineReviewStatus {
NoClassificationProvided,
NoAssertionCriteriaProvided,
CriteriaProvidedSingleSubmitter,
CriteriaProvidedMultipleSubmittersNoConflicts,
CriteriaProvidedConflictingClassifications,
ReviewedByExpertPanel,
PracticeGuideline,
NoClassificationsFromUnflaggedRecords,
NoClassificationForTheSingleVariant,
}
impl TryFrom<pbs::clinvar_data::clinvar_public::AggregateGermlineReviewStatus>
for ClinvarAggregateGermlineReviewStatus
{
type Error = anyhow::Error;
fn try_from(
value: pbs::clinvar_data::clinvar_public::AggregateGermlineReviewStatus,
) -> Result<Self, Self::Error> {
Ok(match value {
pbs::clinvar_data::clinvar_public::AggregateGermlineReviewStatus::NoClassificationProvided => {
ClinvarAggregateGermlineReviewStatus::NoClassificationProvided
}
pbs::clinvar_data::clinvar_public::AggregateGermlineReviewStatus::NoAssertionCriteriaProvided => {
ClinvarAggregateGermlineReviewStatus::NoAssertionCriteriaProvided
}
pbs::clinvar_data::clinvar_public::AggregateGermlineReviewStatus::CriteriaProvidedSingleSubmitter => {
ClinvarAggregateGermlineReviewStatus::CriteriaProvidedSingleSubmitter
}
pbs::clinvar_data::clinvar_public::AggregateGermlineReviewStatus::CriteriaProvidedMultipleSubmittersNoConflicts => {
ClinvarAggregateGermlineReviewStatus::CriteriaProvidedMultipleSubmittersNoConflicts
}
pbs::clinvar_data::clinvar_public::AggregateGermlineReviewStatus::CriteriaProvidedConflictingClassifications => {
ClinvarAggregateGermlineReviewStatus::CriteriaProvidedConflictingClassifications
}
pbs::clinvar_data::clinvar_public::AggregateGermlineReviewStatus::ReviewedByExpertPanel => {
ClinvarAggregateGermlineReviewStatus::ReviewedByExpertPanel
}
pbs::clinvar_data::clinvar_public::AggregateGermlineReviewStatus::PracticeGuideline => {
ClinvarAggregateGermlineReviewStatus::PracticeGuideline
}
pbs::clinvar_data::clinvar_public::AggregateGermlineReviewStatus::NoClassificationsFromUnflaggedRecords => {
ClinvarAggregateGermlineReviewStatus::NoClassificationsFromUnflaggedRecords
}
pbs::clinvar_data::clinvar_public::AggregateGermlineReviewStatus::NoClassificationForTheSingleVariant => {
ClinvarAggregateGermlineReviewStatus::NoClassificationForTheSingleVariant
}
_ => anyhow::bail!("Unknown AggregateGermlineReviewStatus: {:?}", value),
})
}
}
#[derive(
Clone,
Copy,
Debug,
PartialEq,
Eq,
Hash,
PartialOrd,
Ord,
serde::Serialize,
serde::Deserialize,
strum::Display,
strum::EnumString,
utoipa::ToSchema,
)]
#[serde(rename_all = "snake_case")]
#[strum(serialize_all = "snake_case")]
pub enum ClinvarAggregateSomaticClinicalImpactReviewStatus {
NoClassificationProvided,
NoAssertionCriteriaProvided,
CriteriaProvidedSingleSubmitter,
CriteriaProvidedMultipleSubmitters,
ReviewedByExpertPanel,
PracticeGuideline,
NoClassificationsFromUnflaggedRecords,
NoClassificationForTheSingleVariant,
}
impl TryFrom<pbs::clinvar_data::clinvar_public::AggregateSomaticClinicalImpactReviewStatus>
for ClinvarAggregateSomaticClinicalImpactReviewStatus
{
type Error = anyhow::Error;
fn try_from(
value: pbs::clinvar_data::clinvar_public::AggregateSomaticClinicalImpactReviewStatus,
) -> Result<Self, Self::Error> {
Ok(match value {
pbs::clinvar_data::clinvar_public::AggregateSomaticClinicalImpactReviewStatus::NoClassificationProvided => {
ClinvarAggregateSomaticClinicalImpactReviewStatus::NoClassificationProvided
}
pbs::clinvar_data::clinvar_public::AggregateSomaticClinicalImpactReviewStatus::NoAssertionCriteriaProvided => {
ClinvarAggregateSomaticClinicalImpactReviewStatus::NoAssertionCriteriaProvided
}
pbs::clinvar_data::clinvar_public::AggregateSomaticClinicalImpactReviewStatus::CriteriaProvidedSingleSubmitter => {
ClinvarAggregateSomaticClinicalImpactReviewStatus::CriteriaProvidedSingleSubmitter
}
pbs::clinvar_data::clinvar_public::AggregateSomaticClinicalImpactReviewStatus::CriteriaProvidedMultipleSubmitters => {
ClinvarAggregateSomaticClinicalImpactReviewStatus::CriteriaProvidedMultipleSubmitters
}
pbs::clinvar_data::clinvar_public::AggregateSomaticClinicalImpactReviewStatus::ReviewedByExpertPanel => {
ClinvarAggregateSomaticClinicalImpactReviewStatus::ReviewedByExpertPanel
}
pbs::clinvar_data::clinvar_public::AggregateSomaticClinicalImpactReviewStatus::PracticeGuideline => {
ClinvarAggregateSomaticClinicalImpactReviewStatus::PracticeGuideline
}
pbs::clinvar_data::clinvar_public::AggregateSomaticClinicalImpactReviewStatus::NoClassificationsFromUnflaggedRecords => {
ClinvarAggregateSomaticClinicalImpactReviewStatus::NoClassificationsFromUnflaggedRecords
}
pbs::clinvar_data::clinvar_public::AggregateSomaticClinicalImpactReviewStatus::NoClassificationForTheSingleVariant => {
ClinvarAggregateSomaticClinicalImpactReviewStatus::NoClassificationForTheSingleVariant
}
_ => anyhow::bail!("Unknown AggregateSomaticClinicalImpactReviewStatus: {:?}", value),
})
}
}
#[derive(
Clone,
Copy,
Debug,
PartialEq,
Eq,
Hash,
PartialOrd,
Ord,
serde::Serialize,
serde::Deserialize,
strum::Display,
strum::EnumString,
utoipa::ToSchema,
)]
#[serde(rename_all = "snake_case")]
#[strum(serialize_all = "snake_case")]
pub enum ClinvarAggregateOncogenicityReviewStatus {
NoClassificationProvided,
NoAssertionCriteriaProvided,
CriteriaProvidedSingleSubmitter,
CriteriaProvidedMultipleSubmittersNoConflicts,
CriteriaProvidedConflictingClassifications,
ReviewedByExpertPanel,
PracticeGuideline,
NoClassificationsFromUnflaggedRecords,
NoClassificationForTheSingleVariant,
}
impl TryFrom<pbs::clinvar_data::clinvar_public::AggregateOncogenicityReviewStatus>
for ClinvarAggregateOncogenicityReviewStatus
{
type Error = anyhow::Error;
fn try_from(
value: pbs::clinvar_data::clinvar_public::AggregateOncogenicityReviewStatus,
) -> Result<Self, Self::Error> {
Ok(match value {
pbs::clinvar_data::clinvar_public::AggregateOncogenicityReviewStatus::NoClassificationProvided => {
ClinvarAggregateOncogenicityReviewStatus::NoClassificationProvided
}
pbs::clinvar_data::clinvar_public::AggregateOncogenicityReviewStatus::NoAssertionCriteriaProvided => {
ClinvarAggregateOncogenicityReviewStatus::NoAssertionCriteriaProvided
}
pbs::clinvar_data::clinvar_public::AggregateOncogenicityReviewStatus::CriteriaProvidedSingleSubmitter => {
ClinvarAggregateOncogenicityReviewStatus::CriteriaProvidedSingleSubmitter
}
pbs::clinvar_data::clinvar_public::AggregateOncogenicityReviewStatus::CriteriaProvidedMultipleSubmittersNoConflicts => {
ClinvarAggregateOncogenicityReviewStatus::CriteriaProvidedMultipleSubmittersNoConflicts
}
pbs::clinvar_data::clinvar_public::AggregateOncogenicityReviewStatus::CriteriaProvidedConflictingClassifications => {
ClinvarAggregateOncogenicityReviewStatus::CriteriaProvidedConflictingClassifications
}
pbs::clinvar_data::clinvar_public::AggregateOncogenicityReviewStatus::ReviewedByExpertPanel => {
ClinvarAggregateOncogenicityReviewStatus::ReviewedByExpertPanel
}
pbs::clinvar_data::clinvar_public::AggregateOncogenicityReviewStatus::PracticeGuideline => {
ClinvarAggregateOncogenicityReviewStatus::PracticeGuideline
}
pbs::clinvar_data::clinvar_public::AggregateOncogenicityReviewStatus::NoClassificationsFromUnflaggedRecords => {
ClinvarAggregateOncogenicityReviewStatus::NoClassificationsFromUnflaggedRecords
}
pbs::clinvar_data::clinvar_public::AggregateOncogenicityReviewStatus::NoClassificationForTheSingleVariant => {
ClinvarAggregateOncogenicityReviewStatus::NoClassificationForTheSingleVariant
}
_ => anyhow::bail!("Unknown AggregateGermlineReviewStatus: {:?}", value),
})
}
}
#[derive(
Clone,
Copy,
Debug,
PartialEq,
Eq,
Hash,
PartialOrd,
Ord,
serde::Serialize,
serde::Deserialize,
strum::Display,
strum::EnumString,
utoipa::ToSchema,
)]
#[serde(rename_all = "snake_case")]
#[strum(serialize_all = "snake_case")]
pub enum ClinvarOrigin {
Germline,
Somatic,
DeNovo,
NotProvided,
Inherited,
Maternal,
Paternal,
Uniparental,
Biparental,
NotReported,
TestedInconclusive,
Unknown,
NotApplicable,
ExperimentallyGenerated,
}
impl TryFrom<pbs::clinvar_data::clinvar_public::Origin> for ClinvarOrigin {
type Error = anyhow::Error;
fn try_from(value: pbs::clinvar_data::clinvar_public::Origin) -> Result<Self, Self::Error> {
Ok(match value {
pbs::clinvar_data::clinvar_public::Origin::Germline => ClinvarOrigin::Germline,
pbs::clinvar_data::clinvar_public::Origin::Somatic => ClinvarOrigin::Somatic,
pbs::clinvar_data::clinvar_public::Origin::DeNovo => ClinvarOrigin::DeNovo,
pbs::clinvar_data::clinvar_public::Origin::NotProvided => ClinvarOrigin::NotProvided,
pbs::clinvar_data::clinvar_public::Origin::Inherited => ClinvarOrigin::Inherited,
pbs::clinvar_data::clinvar_public::Origin::Maternal => ClinvarOrigin::Maternal,
pbs::clinvar_data::clinvar_public::Origin::Paternal => ClinvarOrigin::Paternal,
pbs::clinvar_data::clinvar_public::Origin::Uniparental => ClinvarOrigin::Uniparental,
pbs::clinvar_data::clinvar_public::Origin::Biparental => ClinvarOrigin::Biparental,
pbs::clinvar_data::clinvar_public::Origin::NotReported => ClinvarOrigin::NotReported,
pbs::clinvar_data::clinvar_public::Origin::TestedInconclusive => {
ClinvarOrigin::TestedInconclusive
}
pbs::clinvar_data::clinvar_public::Origin::Unknown => ClinvarOrigin::Unknown,
pbs::clinvar_data::clinvar_public::Origin::NotApplicable => {
ClinvarOrigin::NotApplicable
}
pbs::clinvar_data::clinvar_public::Origin::ExperimentallyGenerated => {
ClinvarOrigin::ExperimentallyGenerated
}
_ => anyhow::bail!("Unknown Origin: {:?}", value),
})
}
}
#[derive(
Clone,
Copy,
Debug,
PartialEq,
Eq,
Hash,
PartialOrd,
Ord,
serde::Serialize,
serde::Deserialize,
strum::Display,
strum::EnumString,
utoipa::ToSchema,
)]
#[serde(rename_all = "snake_case")]
#[strum(serialize_all = "snake_case")]
pub enum ClinvarChromosome {
Chromosome1,
Chromosome2,
Chromosome3,
Chromosome4,
Chromosome5,
Chromosome6,
Chromosome7,
Chromosome8,
Chromosome9,
Chromosome10,
Chromosome11,
Chromosome12,
Chromosome13,
Chromosome14,
Chromosome15,
Chromosome16,
Chromosome17,
Chromosome18,
Chromosome19,
Chromosome20,
Chromosome21,
Chromosome22,
X,
Y,
Mt,
Par,
Un,
}
impl TryFrom<pbs::clinvar_data::clinvar_public::Chromosome> for ClinvarChromosome {
type Error = anyhow::Error;
fn try_from(value: pbs::clinvar_data::clinvar_public::Chromosome) -> Result<Self, Self::Error> {
Ok(match value {
pbs::clinvar_data::clinvar_public::Chromosome::Chromosome1 => {
ClinvarChromosome::Chromosome1
}
pbs::clinvar_data::clinvar_public::Chromosome::Chromosome2 => {
ClinvarChromosome::Chromosome2
}
pbs::clinvar_data::clinvar_public::Chromosome::Chromosome3 => {
ClinvarChromosome::Chromosome3
}
pbs::clinvar_data::clinvar_public::Chromosome::Chromosome4 => {
ClinvarChromosome::Chromosome4
}
pbs::clinvar_data::clinvar_public::Chromosome::Chromosome5 => {
ClinvarChromosome::Chromosome5
}
pbs::clinvar_data::clinvar_public::Chromosome::Chromosome6 => {
ClinvarChromosome::Chromosome6
}
pbs::clinvar_data::clinvar_public::Chromosome::Chromosome7 => {
ClinvarChromosome::Chromosome7
}
pbs::clinvar_data::clinvar_public::Chromosome::Chromosome8 => {
ClinvarChromosome::Chromosome8
}
pbs::clinvar_data::clinvar_public::Chromosome::Chromosome9 => {
ClinvarChromosome::Chromosome9
}
pbs::clinvar_data::clinvar_public::Chromosome::Chromosome10 => {
ClinvarChromosome::Chromosome10
}
pbs::clinvar_data::clinvar_public::Chromosome::Chromosome11 => {
ClinvarChromosome::Chromosome11
}
pbs::clinvar_data::clinvar_public::Chromosome::Chromosome12 => {
ClinvarChromosome::Chromosome12
}
pbs::clinvar_data::clinvar_public::Chromosome::Chromosome13 => {
ClinvarChromosome::Chromosome13
}
pbs::clinvar_data::clinvar_public::Chromosome::Chromosome14 => {
ClinvarChromosome::Chromosome14
}
pbs::clinvar_data::clinvar_public::Chromosome::Chromosome15 => {
ClinvarChromosome::Chromosome15
}
pbs::clinvar_data::clinvar_public::Chromosome::Chromosome16 => {
ClinvarChromosome::Chromosome16
}
pbs::clinvar_data::clinvar_public::Chromosome::Chromosome17 => {
ClinvarChromosome::Chromosome17
}
pbs::clinvar_data::clinvar_public::Chromosome::Chromosome18 => {
ClinvarChromosome::Chromosome18
}
pbs::clinvar_data::clinvar_public::Chromosome::Chromosome19 => {
ClinvarChromosome::Chromosome19
}
pbs::clinvar_data::clinvar_public::Chromosome::Chromosome20 => {
ClinvarChromosome::Chromosome20
}
pbs::clinvar_data::clinvar_public::Chromosome::Chromosome21 => {
ClinvarChromosome::Chromosome21
}
pbs::clinvar_data::clinvar_public::Chromosome::Chromosome22 => {
ClinvarChromosome::Chromosome22
}
pbs::clinvar_data::clinvar_public::Chromosome::X => ClinvarChromosome::X,
pbs::clinvar_data::clinvar_public::Chromosome::Y => ClinvarChromosome::Y,
pbs::clinvar_data::clinvar_public::Chromosome::Mt => ClinvarChromosome::Mt,
pbs::clinvar_data::clinvar_public::Chromosome::Par => ClinvarChromosome::Par,
pbs::clinvar_data::clinvar_public::Chromosome::Un => ClinvarChromosome::Un,
_ => anyhow::bail!("Unknown Chromosome: {:?}", value),
})
}
}
#[derive(
Clone,
Copy,
Debug,
PartialEq,
Eq,
Hash,
PartialOrd,
Ord,
serde::Serialize,
serde::Deserialize,
strum::Display,
strum::EnumString,
utoipa::ToSchema,
)]
#[serde(rename_all = "snake_case")]
#[strum(serialize_all = "snake_case")]
pub enum ClinvarCommentType {
Public,
ConvertedByNcb,
MissingFromAssembly,
GenomicLocationNotEstablished,
LocationOnGenomeAndProductNotAligned,
DeletionComment,
MergeComment,
AssemblySpecificAlleleDefinition,
AlignmentGapMakesAppearInconsistent,
ExplanationOfClassification,
FlaggedComment,
}
impl TryFrom<pbs::clinvar_data::clinvar_public::CommentType> for ClinvarCommentType {
type Error = anyhow::Error;
fn try_from(
value: pbs::clinvar_data::clinvar_public::CommentType,
) -> Result<Self, Self::Error> {
Ok(match value {
pbs::clinvar_data::clinvar_public::CommentType::Public => ClinvarCommentType::Public,
pbs::clinvar_data::clinvar_public::CommentType::ConvertedByNcb => ClinvarCommentType::ConvertedByNcb,
pbs::clinvar_data::clinvar_public::CommentType::MissingFromAssembly => ClinvarCommentType::MissingFromAssembly,
pbs::clinvar_data::clinvar_public::CommentType::GenomicLocationNotEstablished => {
ClinvarCommentType::GenomicLocationNotEstablished
}
pbs::clinvar_data::clinvar_public::CommentType::LocationOnGenomeAndProductNotAligned => {
ClinvarCommentType::LocationOnGenomeAndProductNotAligned
}
pbs::clinvar_data::clinvar_public::CommentType::DeletionComment => ClinvarCommentType::DeletionComment,
pbs::clinvar_data::clinvar_public::CommentType::MergeComment => ClinvarCommentType::MergeComment,
pbs::clinvar_data::clinvar_public::CommentType::AssemblySpecificAlleleDefinition => {
ClinvarCommentType::AssemblySpecificAlleleDefinition
}
pbs::clinvar_data::clinvar_public::CommentType::AlignmentGapMakesAppearInconsistent => {
ClinvarCommentType::AlignmentGapMakesAppearInconsistent
}
pbs::clinvar_data::clinvar_public::CommentType::ExplanationOfClassification => {
ClinvarCommentType::ExplanationOfClassification
}
pbs::clinvar_data::clinvar_public::CommentType::FlaggedComment => ClinvarCommentType::FlaggedComment,
_ => anyhow::bail!("Unknown CommentType: {:?}", value),
})
}
}
#[derive(
Clone,
Copy,
Debug,
PartialEq,
Eq,
Hash,
PartialOrd,
Ord,
serde::Serialize,
serde::Deserialize,
strum::Display,
strum::EnumString,
utoipa::ToSchema,
)]
#[serde(rename_all = "snake_case")]
#[strum(serialize_all = "snake_case")]
pub enum ClinvarNucleotideSequence {
GenomicTopLevel,
GenomicRefSeqGene,
Genomic,
Coding,
NonCoding,
Protein,
}
impl TryFrom<pbs::clinvar_data::clinvar_public::NucleotideSequence> for ClinvarNucleotideSequence {
type Error = anyhow::Error;
fn try_from(
value: pbs::clinvar_data::clinvar_public::NucleotideSequence,
) -> Result<Self, Self::Error> {
Ok(match value {
pbs::clinvar_data::clinvar_public::NucleotideSequence::GenomicTopLevel => {
ClinvarNucleotideSequence::GenomicTopLevel
}
pbs::clinvar_data::clinvar_public::NucleotideSequence::GenomicRefSeqGene => {
ClinvarNucleotideSequence::GenomicRefSeqGene
}
pbs::clinvar_data::clinvar_public::NucleotideSequence::Genomic => {
ClinvarNucleotideSequence::Genomic
}
pbs::clinvar_data::clinvar_public::NucleotideSequence::Coding => {
ClinvarNucleotideSequence::Coding
}
pbs::clinvar_data::clinvar_public::NucleotideSequence::NonCoding => {
ClinvarNucleotideSequence::NonCoding
}
pbs::clinvar_data::clinvar_public::NucleotideSequence::Protein => {
ClinvarNucleotideSequence::Protein
}
_ => anyhow::bail!("Unknown NucleotideSequence: {:?}", value),
})
}
}
#[derive(
Clone,
Copy,
Debug,
PartialEq,
Eq,
Hash,
PartialOrd,
Ord,
serde::Serialize,
serde::Deserialize,
strum::Display,
strum::EnumString,
utoipa::ToSchema,
)]
#[serde(rename_all = "snake_case")]
#[strum(serialize_all = "snake_case")]
pub enum ClinvarProteinSequence {
Protein,
}
impl TryFrom<pbs::clinvar_data::clinvar_public::ProteinSequence> for ClinvarProteinSequence {
type Error = anyhow::Error;
fn try_from(
value: pbs::clinvar_data::clinvar_public::ProteinSequence,
) -> Result<Self, Self::Error> {
Ok(match value {
pbs::clinvar_data::clinvar_public::ProteinSequence::Protein => {
ClinvarProteinSequence::Protein
}
_ => anyhow::bail!("Unknown ProteinSequence: {:?}", value),
})
}
}
#[derive(
Clone,
Copy,
Debug,
PartialEq,
Eq,
Hash,
PartialOrd,
Ord,
serde::Serialize,
serde::Deserialize,
strum::Display,
strum::EnumString,
utoipa::ToSchema,
)]
#[serde(rename_all = "snake_case")]
#[strum(serialize_all = "snake_case")]
pub enum ClinvarPhenotypeSetType {
Disease,
DrugResponse,
Finding,
PhenotypeInstruction,
TraitChoice,
}
impl TryFrom<pbs::clinvar_data::clinvar_public::PhenotypeSetType> for ClinvarPhenotypeSetType {
type Error = anyhow::Error;
fn try_from(
value: pbs::clinvar_data::clinvar_public::PhenotypeSetType,
) -> Result<Self, Self::Error> {
Ok(match value {
pbs::clinvar_data::clinvar_public::PhenotypeSetType::Disease => {
ClinvarPhenotypeSetType::Disease
}
pbs::clinvar_data::clinvar_public::PhenotypeSetType::DrugResponse => {
ClinvarPhenotypeSetType::DrugResponse
}
pbs::clinvar_data::clinvar_public::PhenotypeSetType::Finding => {
ClinvarPhenotypeSetType::Finding
}
pbs::clinvar_data::clinvar_public::PhenotypeSetType::PhenotypeInstruction => {
ClinvarPhenotypeSetType::PhenotypeInstruction
}
pbs::clinvar_data::clinvar_public::PhenotypeSetType::TraitChoice => {
ClinvarPhenotypeSetType::TraitChoice
}
_ => anyhow::bail!("Unknown PhenotypeSetType: {:?}", value),
})
}
}
#[derive(
Clone,
Copy,
Debug,
PartialEq,
Eq,
Hash,
PartialOrd,
Ord,
serde::Serialize,
serde::Deserialize,
strum::Display,
strum::EnumString,
utoipa::ToSchema,
)]
#[serde(rename_all = "snake_case")]
#[strum(serialize_all = "snake_case")]
pub enum ClinvarVariationType {
Diplotype,
CompoundHeterozygote,
DistinctChromosomes,
}
impl TryFrom<pbs::clinvar_data::clinvar_public::VariationType> for ClinvarVariationType {
type Error = anyhow::Error;
fn try_from(
value: pbs::clinvar_data::clinvar_public::VariationType,
) -> Result<Self, Self::Error> {
Ok(match value {
pbs::clinvar_data::clinvar_public::VariationType::Diplotype => {
ClinvarVariationType::Diplotype
}
pbs::clinvar_data::clinvar_public::VariationType::CompoundHeterozygote => {
ClinvarVariationType::CompoundHeterozygote
}
pbs::clinvar_data::clinvar_public::VariationType::DistinctChromosomes => {
ClinvarVariationType::DistinctChromosomes
}
_ => anyhow::bail!("Unknown VariationType: {:?}", value),
})
}
}
#[derive(
Clone,
Copy,
Debug,
PartialEq,
Eq,
Hash,
PartialOrd,
Ord,
serde::Serialize,
serde::Deserialize,
strum::Display,
strum::EnumString,
utoipa::ToSchema,
)]
#[serde(rename_all = "snake_case")]
#[strum(serialize_all = "snake_case")]
pub enum ClinvarEvidenceType {
Genetic,
Experimental,
Population,
Computational,
}
impl TryFrom<pbs::clinvar_data::clinvar_public::EvidenceType> for ClinvarEvidenceType {
type Error = anyhow::Error;
fn try_from(
value: pbs::clinvar_data::clinvar_public::EvidenceType,
) -> Result<Self, Self::Error> {
Ok(match value {
pbs::clinvar_data::clinvar_public::EvidenceType::Genetic => {
ClinvarEvidenceType::Genetic
}
pbs::clinvar_data::clinvar_public::EvidenceType::Experimental => {
ClinvarEvidenceType::Experimental
}
pbs::clinvar_data::clinvar_public::EvidenceType::Population => {
ClinvarEvidenceType::Population
}
pbs::clinvar_data::clinvar_public::EvidenceType::Computational => {
ClinvarEvidenceType::Computational
}
_ => anyhow::bail!("Unknown EvidenceType: {:?}", value),
})
}
}
#[derive(
Clone,
Copy,
Debug,
PartialEq,
Eq,
Hash,
PartialOrd,
Ord,
serde::Serialize,
serde::Deserialize,
strum::Display,
strum::EnumString,
utoipa::ToSchema,
)]
#[serde(rename_all = "snake_case")]
#[strum(serialize_all = "snake_case")]
pub enum ClinvarMethodListType {
LiteratureOnly,
ReferencePopulation,
CaseControl,
ClinicalTesting,
InVitro,
InVivo,
Research,
Curation,
NotProvided,
ProviderInterpretation,
PhenotypingOnly,
}
impl TryFrom<pbs::clinvar_data::clinvar_public::MethodListType> for ClinvarMethodListType {
type Error = anyhow::Error;
fn try_from(
value: pbs::clinvar_data::clinvar_public::MethodListType,
) -> Result<Self, Self::Error> {
Ok(match value {
pbs::clinvar_data::clinvar_public::MethodListType::LiteratureOnly => {
ClinvarMethodListType::LiteratureOnly
}
pbs::clinvar_data::clinvar_public::MethodListType::ReferencePopulation => {
ClinvarMethodListType::ReferencePopulation
}
pbs::clinvar_data::clinvar_public::MethodListType::CaseControl => {
ClinvarMethodListType::CaseControl
}
pbs::clinvar_data::clinvar_public::MethodListType::ClinicalTesting => {
ClinvarMethodListType::ClinicalTesting
}
pbs::clinvar_data::clinvar_public::MethodListType::InVitro => {
ClinvarMethodListType::InVitro
}
pbs::clinvar_data::clinvar_public::MethodListType::InVivo => {
ClinvarMethodListType::InVivo
}
pbs::clinvar_data::clinvar_public::MethodListType::Research => {
ClinvarMethodListType::Research
}
pbs::clinvar_data::clinvar_public::MethodListType::Curation => {
ClinvarMethodListType::Curation
}
pbs::clinvar_data::clinvar_public::MethodListType::NotProvided => {
ClinvarMethodListType::NotProvided
}
pbs::clinvar_data::clinvar_public::MethodListType::ProviderInterpretation => {
ClinvarMethodListType::ProviderInterpretation
}
pbs::clinvar_data::clinvar_public::MethodListType::PhenotypingOnly => {
ClinvarMethodListType::PhenotypingOnly
}
_ => anyhow::bail!("Unknown MethodListType: {:?}", value),
})
}
}
#[derive(
Clone,
Copy,
Debug,
PartialEq,
Eq,
Hash,
PartialOrd,
Ord,
serde::Serialize,
serde::Deserialize,
strum::Display,
strum::EnumString,
utoipa::ToSchema,
)]
#[serde(rename_all = "snake_case")]
#[strum(serialize_all = "snake_case")]
pub enum ClinvarHgvsType {
Coding,
Genomic,
GenomicTopLevel,
NonCoding,
Protein,
}
impl TryFrom<pbs::clinvar_data::clinvar_public::HgvsType> for ClinvarHgvsType {
type Error = anyhow::Error;
fn try_from(value: pbs::clinvar_data::clinvar_public::HgvsType) -> Result<Self, Self::Error> {
Ok(match value {
pbs::clinvar_data::clinvar_public::HgvsType::Coding => ClinvarHgvsType::Coding,
pbs::clinvar_data::clinvar_public::HgvsType::Genomic => ClinvarHgvsType::Genomic,
pbs::clinvar_data::clinvar_public::HgvsType::GenomicTopLevel => {
ClinvarHgvsType::GenomicTopLevel
}
pbs::clinvar_data::clinvar_public::HgvsType::NonCoding => ClinvarHgvsType::NonCoding,
pbs::clinvar_data::clinvar_public::HgvsType::Protein => ClinvarHgvsType::Protein,
_ => anyhow::bail!("Unknown HgvsType: {:?}", value),
})
}
}
#[derive(
Clone,
Copy,
Debug,
PartialEq,
Eq,
Hash,
PartialOrd,
Ord,
serde::Serialize,
serde::Deserialize,
strum::Display,
strum::EnumString,
utoipa::ToSchema,
)]
#[serde(rename_all = "snake_case")]
#[strum(serialize_all = "snake_case")]
pub enum ClinvarClinicalFeaturesAffectedStatusType {
Present,
Absent,
NotTested,
}
impl TryFrom<pbs::clinvar_data::clinvar_public::ClinicalFeaturesAffectedStatusType>
for ClinvarClinicalFeaturesAffectedStatusType
{
type Error = anyhow::Error;
fn try_from(
value: pbs::clinvar_data::clinvar_public::ClinicalFeaturesAffectedStatusType,
) -> Result<Self, Self::Error> {
Ok(match value {
pbs::clinvar_data::clinvar_public::ClinicalFeaturesAffectedStatusType::Present => {
ClinvarClinicalFeaturesAffectedStatusType::Present
}
pbs::clinvar_data::clinvar_public::ClinicalFeaturesAffectedStatusType::Absent => {
ClinvarClinicalFeaturesAffectedStatusType::Absent
}
pbs::clinvar_data::clinvar_public::ClinicalFeaturesAffectedStatusType::NotTested => {
ClinvarClinicalFeaturesAffectedStatusType::NotTested
}
_ => anyhow::bail!("Unknown ClinicalFeaturesAffectedStatusType: {:?}", value),
})
}
}
#[derive(
Clone,
Copy,
Debug,
PartialEq,
Eq,
Hash,
PartialOrd,
Ord,
serde::Serialize,
serde::Deserialize,
strum::Display,
strum::EnumString,
utoipa::ToSchema,
)]
#[serde(rename_all = "snake_case")]
#[strum(serialize_all = "snake_case")]
pub enum ClinvarHaploVariationType {
Haplotype,
HaplotypeSingleVariant,
Variation,
PhaseUnknown,
HaplotypeDefinedBySingleVariant,
}
impl TryFrom<pbs::clinvar_data::clinvar_public::HaploVariationType> for ClinvarHaploVariationType {
type Error = anyhow::Error;
fn try_from(
value: pbs::clinvar_data::clinvar_public::HaploVariationType,
) -> Result<Self, Self::Error> {
Ok(match value {
pbs::clinvar_data::clinvar_public::HaploVariationType::Haplotype => ClinvarHaploVariationType::Haplotype,
pbs::clinvar_data::clinvar_public::HaploVariationType::HaplotypeSingleVariant => {
ClinvarHaploVariationType::HaplotypeSingleVariant
}
pbs::clinvar_data::clinvar_public::HaploVariationType::Variation => ClinvarHaploVariationType::Variation,
pbs::clinvar_data::clinvar_public::HaploVariationType::PhaseUnknown => ClinvarHaploVariationType::PhaseUnknown,
pbs::clinvar_data::clinvar_public::HaploVariationType::HaplotypeDefinedBySingleVariant => {
ClinvarHaploVariationType::HaplotypeDefinedBySingleVariant
}
_ => anyhow::bail!("Unknown HaploVariationType: {:?}", value),
})
}
}
#[derive(Clone, Debug, serde::Serialize, serde::Deserialize, utoipa::ToSchema)]
pub struct ClinvarVersionedAccession {
pub accession: String,
pub version: i32,
}
impl From<pbs::clinvar_data::extracted_vars::VersionedAccession> for ClinvarVersionedAccession {
fn from(value: pbs::clinvar_data::extracted_vars::VersionedAccession) -> Self {
Self {
accession: value.accession,
version: value.version,
}
}
}
#[derive(Clone, Debug, serde::Serialize, serde::Deserialize, utoipa::ToSchema)]
pub struct ClinvarExtractedRcvRecord {
pub accession: Option<ClinvarVersionedAccession>,
pub title: String,
pub classifications: Option<ClinvarRcvClassifications>,
}
impl TryFrom<pbs::clinvar_data::extracted_vars::ExtractedRcvRecord> for ClinvarExtractedRcvRecord {
type Error = anyhow::Error;
fn try_from(
value: pbs::clinvar_data::extracted_vars::ExtractedRcvRecord,
) -> Result<Self, Self::Error> {
Ok(Self {
accession: value
.accession
.map(ClinvarVersionedAccession::try_from)
.transpose()?,
title: value.title,
classifications: value
.classifications
.map(ClinvarRcvClassifications::try_from)
.transpose()?,
})
}
}
#[derive(Clone, Debug, serde::Serialize, serde::Deserialize, utoipa::ToSchema)]
pub struct ClinvarExtractedVcvRecord {
pub accession: Option<ClinvarVersionedAccession>,
pub rcvs: Vec<ClinvarExtractedRcvRecord>,
pub name: String,
pub variation_type: ClinvarExtractedVariationType,
pub classifications: Option<ClinvarAggregateClassificationSet>,
pub clinical_assertions: Vec<ClinvarClinicalAssertion>,
pub sequence_location: Option<ClinvarSequenceLocation>,
pub hgnc_ids: Vec<String>,
}
impl TryFrom<pbs::clinvar_data::extracted_vars::ExtractedVcvRecord> for ClinvarExtractedVcvRecord {
type Error = anyhow::Error;
fn try_from(
value: pbs::clinvar_data::extracted_vars::ExtractedVcvRecord,
) -> Result<Self, Self::Error> {
Ok(Self {
accession: value
.accession
.map(ClinvarVersionedAccession::try_from)
.transpose()?,
rcvs: value
.rcvs
.into_iter()
.map(ClinvarExtractedRcvRecord::try_from)
.collect::<Result<_, _>>()?,
name: value.name,
variation_type: ClinvarExtractedVariationType::try_from(
pbs::clinvar_data::extracted_vars::VariationType::try_from(value.variation_type)?,
)?,
classifications: value
.classifications
.map(ClinvarAggregateClassificationSet::try_from)
.transpose()?,
clinical_assertions: value
.clinical_assertions
.into_iter()
.map(ClinvarClinicalAssertion::try_from)
.collect::<Result<_, _>>()?,
sequence_location: value
.sequence_location
.map(ClinvarSequenceLocation::try_from)
.transpose()?,
hgnc_ids: value.hgnc_ids,
})
}
}
#[derive(
Clone,
Copy,
Debug,
PartialEq,
Eq,
Hash,
PartialOrd,
Ord,
serde::Serialize,
serde::Deserialize,
strum::Display,
strum::EnumString,
utoipa::ToSchema,
)]
#[serde(rename_all = "snake_case")]
#[strum(serialize_all = "snake_case")]
pub enum ClinvarExtractedVariationType {
Insertion,
Deletion,
Snv,
Indel,
Duplication,
TandemDuplication,
StructuralVariant,
CopyNumberGain,
CopyNumberLoss,
ProteinOnly,
Microsatellite,
Inversion,
Other,
}
impl TryFrom<pbs::clinvar_data::extracted_vars::VariationType> for ClinvarExtractedVariationType {
type Error = anyhow::Error;
fn try_from(
value: pbs::clinvar_data::extracted_vars::VariationType,
) -> Result<Self, Self::Error> {
Ok(match value {
pbs::clinvar_data::extracted_vars::VariationType::Insertion => {
ClinvarExtractedVariationType::Insertion
}
pbs::clinvar_data::extracted_vars::VariationType::Deletion => {
ClinvarExtractedVariationType::Deletion
}
pbs::clinvar_data::extracted_vars::VariationType::Snv => {
ClinvarExtractedVariationType::Snv
}
pbs::clinvar_data::extracted_vars::VariationType::Indel => {
ClinvarExtractedVariationType::Indel
}
pbs::clinvar_data::extracted_vars::VariationType::Duplication => {
ClinvarExtractedVariationType::Duplication
}
pbs::clinvar_data::extracted_vars::VariationType::TandemDuplication => {
ClinvarExtractedVariationType::TandemDuplication
}
pbs::clinvar_data::extracted_vars::VariationType::StructuralVariant => {
ClinvarExtractedVariationType::StructuralVariant
}
pbs::clinvar_data::extracted_vars::VariationType::CopyNumberGain => {
ClinvarExtractedVariationType::CopyNumberGain
}
pbs::clinvar_data::extracted_vars::VariationType::CopyNumberLoss => {
ClinvarExtractedVariationType::CopyNumberLoss
}
pbs::clinvar_data::extracted_vars::VariationType::ProteinOnly => {
ClinvarExtractedVariationType::ProteinOnly
}
pbs::clinvar_data::extracted_vars::VariationType::Microsatellite => {
ClinvarExtractedVariationType::Microsatellite
}
pbs::clinvar_data::extracted_vars::VariationType::Inversion => {
ClinvarExtractedVariationType::Inversion
}
pbs::clinvar_data::extracted_vars::VariationType::Other => {
ClinvarExtractedVariationType::Other
}
_ => anyhow::bail!("Invalid variation type {:?}", value),
})
}
}
impl From<ClinvarExtractedVariationType> for pbs::clinvar_data::extracted_vars::VariationType {
fn from(val: ClinvarExtractedVariationType) -> Self {
match val {
ClinvarExtractedVariationType::Insertion => {
pbs::clinvar_data::extracted_vars::VariationType::Insertion
}
ClinvarExtractedVariationType::Deletion => {
pbs::clinvar_data::extracted_vars::VariationType::Deletion
}
ClinvarExtractedVariationType::Snv => {
pbs::clinvar_data::extracted_vars::VariationType::Snv
}
ClinvarExtractedVariationType::Indel => {
pbs::clinvar_data::extracted_vars::VariationType::Indel
}
ClinvarExtractedVariationType::Duplication => {
pbs::clinvar_data::extracted_vars::VariationType::Duplication
}
ClinvarExtractedVariationType::TandemDuplication => {
pbs::clinvar_data::extracted_vars::VariationType::TandemDuplication
}
ClinvarExtractedVariationType::StructuralVariant => {
pbs::clinvar_data::extracted_vars::VariationType::StructuralVariant
}
ClinvarExtractedVariationType::CopyNumberGain => {
pbs::clinvar_data::extracted_vars::VariationType::CopyNumberGain
}
ClinvarExtractedVariationType::CopyNumberLoss => {
pbs::clinvar_data::extracted_vars::VariationType::CopyNumberLoss
}
ClinvarExtractedVariationType::ProteinOnly => {
pbs::clinvar_data::extracted_vars::VariationType::ProteinOnly
}
ClinvarExtractedVariationType::Microsatellite => {
pbs::clinvar_data::extracted_vars::VariationType::Microsatellite
}
ClinvarExtractedVariationType::Inversion => {
pbs::clinvar_data::extracted_vars::VariationType::Inversion
}
ClinvarExtractedVariationType::Other => {
pbs::clinvar_data::extracted_vars::VariationType::Other
}
}
}
}