pub mod builder;
pub mod header;
pub mod program;
pub mod read_group;
pub mod reference_sequence;
mod tag;
pub use self::{
builder::Builder, header::Header, program::Program, read_group::ReadGroup,
reference_sequence::ReferenceSequence, tag::Tag,
};
use std::fmt;
use indexmap::IndexMap;
type Fields = Vec<(String, String)>;
type OtherFields<S> = IndexMap<tag::Other<S>, String>;
pub trait Inner: Sized {
type StandardTag: tag::Standard;
type Builder: builder::Inner<Self>;
}
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, Debug, Eq, PartialEq)]
pub struct Map<I>
where
I: Inner,
{
inner: I,
other_fields: OtherFields<I::StandardTag>,
}
impl<I> Map<I>
where
I: Inner,
{
pub fn builder() -> Builder<I> {
Builder::default()
}
pub fn other_fields(&self) -> &OtherFields<I::StandardTag> {
&self.other_fields
}
}
impl<I> Default for Map<I>
where
I: Inner + Default,
{
fn default() -> Self {
Self {
inner: I::default(),
other_fields: OtherFields::new(),
}
}
}
fn fmt_display_other_fields<S>(
f: &mut fmt::Formatter<'_>,
other_fields: &OtherFields<S>,
) -> fmt::Result {
for (key, value) in other_fields {
write!(f, "\t{key}:{value}")?;
}
Ok(())
}