pub struct AmbiAmino(/* private fields */);Expand description
Ambiguous amino acid
Note that AmbiAmino always represents at least one possible amino acid;
there is no such thing as an empty/null AmbiAmino. Also beware that
ambi_amino.to_string().parse() is lossy because there are too many AmbiAminos
to represent in a single character; anything without a standard character will be
displayed as "X" but "X" is parsed as a maximally ambiguous AmbiAmino.
However, the Debug implementation will exactly represent
the AmbiAmino at the cost of being 1-25 characters long.
For details, see: https://en.wikipedia.org/wiki/FASTA_format#Sequence_representation
Beware that AmbiAmino’s order isn’t alphabetic.
Implementations§
Source§impl AmbiAmino
impl AmbiAmino
Sourcepub const Stop: Self = Self::STOP
pub const Stop: Self = Self::STOP
Translation stop (alias for consistency with Amino::Stop)
Sourcepub fn to_bits(self) -> NonZeroU32
pub fn to_bits(self) -> NonZeroU32
Cast AmbiAmino to NonZeroU32.
No particular representation is promised and the exact values are not part of stability guarantees.
Sourcepub fn to_str(self) -> &'static str
pub fn to_str(self) -> &'static str
Return uppercase string representation
Note that anything without a single-character representation will result in "X".
Use Debug formatting if you want a lossless representation.
§Examples
use nucs::AmbiAmino;
assert_eq!(AmbiAmino::A.to_str(), "A");
assert_eq!(AmbiAmino::STOP.to_str(), "*");
assert_eq!((AmbiAmino::D | AmbiAmino::N).to_str(), "B");
assert_eq!((AmbiAmino::D | AmbiAmino::E).to_str(), "X");Sourcepub const fn from_ascii(ascii: u8) -> Result<Self, ParseSymbolError>
pub const fn from_ascii(ascii: u8) -> Result<Self, ParseSymbolError>
Construct from ASCII representation
§Errors
Returns ParseSymbolError if the given byte isn’t a letter or *.
§Examples
use nucs::AmbiAmino;
assert_eq!(AmbiAmino::from_ascii(b'A'), Ok(AmbiAmino::A));
assert_eq!(AmbiAmino::from_ascii(b'*'), Ok(AmbiAmino::STOP));
assert_eq!(AmbiAmino::from_ascii(b'X'), Ok(AmbiAmino::X));
assert!(AmbiAmino::from_ascii(b'.').is_err());Sourcepub fn to_ascii(self) -> u8
pub fn to_ascii(self) -> u8
Return uppercase ASCII representation
See to_str for caveats.
§Examples
use nucs::AmbiAmino;
assert_eq!(AmbiAmino::A.to_ascii(), b'A');
assert_eq!(AmbiAmino::STOP.to_ascii(), b'*');
assert_eq!((AmbiAmino::D | AmbiAmino::N).to_ascii(), b'B');
assert_eq!((AmbiAmino::D | AmbiAmino::E).to_ascii(), b'X');Sourcepub const fn lit<const N: usize>(literal: &[u8; N]) -> [AmbiAmino; N]
pub const fn lit<const N: usize>(literal: &[u8; N]) -> [AmbiAmino; N]
Construct AmbiAmino array from literal without allocating.
§Examples
use nucs::AmbiAmino;
let aas1 = AmbiAmino::lit(b"TOO*LONG");
// ...is shorthand for...
let aas2 = [
AmbiAmino::T, AmbiAmino::O, AmbiAmino::O, AmbiAmino::STOP,
AmbiAmino::L, AmbiAmino::O, AmbiAmino::N, AmbiAmino::G
];
assert_eq!(aas1, aas2);§Panics
This panics if the supplied literal isn’t valid. Whitespace is NOT allowed because the returned array must have the same length.
Sourcepub fn iter(self) -> AmbiAminoIter ⓘ
pub fn iter(self) -> AmbiAminoIter ⓘ
Return iterator of Aminos that this ambiguous amino acid could be.
The iterator is guaranteed to return things in sorted order and without duplicates,
and its contents are guaranteed to recompose into this AmbiAmino via BitOr.
§Examples
use nucs::{AmbiAmino, Amino};
let aa = AmbiAmino::A | AmbiAmino::B | AmbiAmino::C;
assert!(aa.iter().eq(Amino::lit(b"ACDN")));Trait Implementations§
Source§impl BitOrAssign<&AmbiAmino> for AmbiAmino
impl BitOrAssign<&AmbiAmino> for AmbiAmino
Source§fn bitor_assign(&mut self, rhs: &AmbiAmino)
fn bitor_assign(&mut self, rhs: &AmbiAmino)
|= operation. Read moreSource§impl BitOrAssign<&Amino> for AmbiAmino
impl BitOrAssign<&Amino> for AmbiAmino
Source§fn bitor_assign(&mut self, rhs: &Amino)
fn bitor_assign(&mut self, rhs: &Amino)
|= operation. Read moreSource§impl BitOrAssign<Amino> for AmbiAmino
impl BitOrAssign<Amino> for AmbiAmino
Source§fn bitor_assign(&mut self, rhs: Amino)
fn bitor_assign(&mut self, rhs: Amino)
|= operation. Read moreSource§impl BitOrAssign for AmbiAmino
impl BitOrAssign for AmbiAmino
Source§fn bitor_assign(&mut self, rhs: AmbiAmino)
fn bitor_assign(&mut self, rhs: AmbiAmino)
|= operation. Read moreSource§impl Debug for AmbiAmino
Displays single-character code when possible, otherwise all possibilities.
impl Debug for AmbiAmino
Displays single-character code when possible, otherwise all possibilities.
Note that when falling back to bracket-enclosed possibilities, this doesn’t use
ambiguity codes like B, J or Z.
use nucs::AmbiAmino;
assert_eq!(format!("{:?}", AmbiAmino::S), "S");
assert_eq!(format!("{:?}", AmbiAmino::L | AmbiAmino::I), "J");
assert_eq!(format!("{:?}", AmbiAmino::A | AmbiAmino::B), "[ADN]");
assert_eq!(format!("{:?}", AmbiAmino::X), "X");Source§impl Display for AmbiAmino
Displays a single-character code, falling back to X.
impl Display for AmbiAmino
Displays a single-character code, falling back to X.
§Examples
use nucs::AmbiAmino;
assert_eq!(AmbiAmino::S.to_string(), "S");
assert_eq!((AmbiAmino::L | AmbiAmino::I).to_string(), "J");
assert_eq!((AmbiAmino::A | AmbiAmino::B).to_string(), "X");
assert_eq!(AmbiAmino::X.to_string(), "X");
// Note that despite the same representation they're not actually the same:
assert_ne!(AmbiAmino::A | AmbiAmino::B, AmbiAmino::X);