noodles_bed/feature/record_buf/
builder.rsuse bstr::BString;
use noodles_core::Position;
use super::{OtherFields, RecordBuf, StandardFields, Strand};
#[derive(Clone, Debug, Default, PartialEq)]
pub struct Builder<const N: usize> {
reference_sequence_name: BString,
feature_start: Option<Position>,
feature_end: Option<Position>,
name: Option<BString>,
score: u16,
strand: Option<Strand>,
other_fields: OtherFields,
}
impl<const N: usize> Builder<N> {
pub fn build(self) -> RecordBuf<N> {
RecordBuf {
standard_fields: StandardFields {
reference_sequence_name: self.reference_sequence_name,
feature_start: self.feature_start.unwrap_or(Position::MIN),
feature_end: self.feature_end,
name: self.name,
score: self.score,
strand: self.strand,
},
other_fields: self.other_fields,
}
}
}
impl Builder<3> {
pub fn set_reference_sequence_name<M>(mut self, reference_sequence_name: M) -> Self
where
M: Into<BString>,
{
self.reference_sequence_name = reference_sequence_name.into();
self
}
pub fn set_feature_start(mut self, feature_start: Position) -> Self {
self.feature_start = Some(feature_start);
self
}
pub fn set_feature_end(mut self, feature_end: Position) -> Self {
self.feature_end = Some(feature_end);
self
}
pub fn set_other_fields(mut self, other_fields: OtherFields) -> Self {
self.other_fields = other_fields;
self
}
}
impl Builder<4> {
pub fn set_reference_sequence_name<M>(mut self, reference_sequence_name: M) -> Self
where
M: Into<BString>,
{
self.reference_sequence_name = reference_sequence_name.into();
self
}
pub fn set_feature_start(mut self, feature_start: Position) -> Self {
self.feature_start = Some(feature_start);
self
}
pub fn set_feature_end(mut self, feature_end: Position) -> Self {
self.feature_end = Some(feature_end);
self
}
pub fn set_name<M>(mut self, name: M) -> Self
where
M: Into<BString>,
{
self.name = Some(name.into());
self
}
pub fn set_other_fields(mut self, other_fields: OtherFields) -> Self {
self.other_fields = other_fields;
self
}
}
impl Builder<5> {
pub fn set_reference_sequence_name<M>(mut self, reference_sequence_name: M) -> Self
where
M: Into<BString>,
{
self.reference_sequence_name = reference_sequence_name.into();
self
}
pub fn set_feature_start(mut self, feature_start: Position) -> Self {
self.feature_start = Some(feature_start);
self
}
pub fn set_feature_end(mut self, feature_end: Position) -> Self {
self.feature_end = Some(feature_end);
self
}
pub fn set_name<M>(mut self, name: M) -> Self
where
M: Into<BString>,
{
self.name = Some(name.into());
self
}
pub fn set_score(mut self, score: u16) -> Self {
self.score = score;
self
}
pub fn set_other_fields(mut self, other_fields: OtherFields) -> Self {
self.other_fields = other_fields;
self
}
}
impl Builder<6> {
pub fn set_reference_sequence_name<M>(mut self, reference_sequence_name: M) -> Self
where
M: Into<BString>,
{
self.reference_sequence_name = reference_sequence_name.into();
self
}
pub fn set_feature_start(mut self, feature_start: Position) -> Self {
self.feature_start = Some(feature_start);
self
}
pub fn set_feature_end(mut self, feature_end: Position) -> Self {
self.feature_end = Some(feature_end);
self
}
pub fn set_name<M>(mut self, name: M) -> Self
where
M: Into<BString>,
{
self.name = Some(name.into());
self
}
pub fn set_score(mut self, score: u16) -> Self {
self.score = score;
self
}
pub fn set_strand(mut self, strand: Strand) -> Self {
self.strand = Some(strand);
self
}
pub fn set_other_fields(mut self, other_fields: OtherFields) -> Self {
self.other_fields = other_fields;
self
}
}