use crate::{
formula::MolecularFormula, fragment::SatelliteLabel, system::Mass, MassMode, Multi,
MultiChemical, SequencePosition,
};
use std::borrow::Cow;
pub trait IsAminoAcid: MultiChemical {
fn name(&self) -> Cow<'_, str>;
fn three_letter_code(&self) -> Option<Cow<'_, str>>;
#[doc(alias = "code")]
fn one_letter_code(&self) -> Option<char>;
fn pro_forma_definition(&self) -> Cow<'_, str>;
fn monoisotopic_mass(&self) -> Cow<'_, Multi<Mass>> {
Cow::Owned(
self.formulas()
.iter()
.map(MolecularFormula::monoisotopic_mass)
.collect(),
)
}
fn average_weight(&self) -> Cow<'_, Multi<Mass>> {
Cow::Owned(
self.formulas()
.iter()
.map(MolecularFormula::average_weight)
.collect(),
)
}
fn mass(&self, mode: MassMode) -> Cow<'_, Multi<Mass>> {
Cow::Owned(self.formulas().iter().map(|f| f.mass(mode)).collect())
}
fn side_chain(
&self,
sequence_index: SequencePosition,
peptidoform_index: usize,
) -> Cow<'_, Multi<MolecularFormula>>;
fn satellite_ion_fragments(
&self,
sequence_index: SequencePosition,
peptidoform_index: usize,
) -> Option<Cow<'_, Vec<(SatelliteLabel, MolecularFormula)>>>;
}