noodles_cram/container/compression_header/
data_series_encodings.rs

1//! CRAM container compression header data series encodings.
2
3pub(crate) mod data_series;
4
5pub use self::data_series::DataSeries;
6
7use super::{
8    encoding::codec::{Byte, ByteArray, Integer},
9    Encoding,
10};
11use crate::container::block;
12
13/// CRAM container compression header data series encodings.
14#[derive(Clone, Debug, Default, Eq, PartialEq)]
15pub(crate) struct DataSeriesEncodings {
16    pub(crate) bam_flags: Option<Encoding<Integer>>,
17    pub(crate) cram_flags: Option<Encoding<Integer>>,
18    pub(crate) reference_sequence_ids: Option<Encoding<Integer>>,
19    pub(crate) read_lengths: Option<Encoding<Integer>>,
20    pub(crate) alignment_starts: Option<Encoding<Integer>>,
21    pub(crate) read_group_ids: Option<Encoding<Integer>>,
22    pub(crate) names: Option<Encoding<ByteArray>>,
23    pub(crate) mate_flags: Option<Encoding<Integer>>,
24    pub(crate) mate_reference_sequence_ids: Option<Encoding<Integer>>,
25    pub(crate) mate_alignment_starts: Option<Encoding<Integer>>,
26    pub(crate) template_lengths: Option<Encoding<Integer>>,
27    pub(crate) mate_distances: Option<Encoding<Integer>>,
28    pub(crate) tag_set_ids: Option<Encoding<Integer>>,
29    pub(crate) feature_counts: Option<Encoding<Integer>>,
30    pub(crate) feature_codes: Option<Encoding<Byte>>,
31    pub(crate) feature_position_deltas: Option<Encoding<Integer>>,
32    pub(crate) deletion_lengths: Option<Encoding<Integer>>,
33    pub(crate) stretches_of_bases: Option<Encoding<ByteArray>>,
34    pub(crate) stretches_of_quality_scores: Option<Encoding<ByteArray>>,
35    pub(crate) base_substitution_codes: Option<Encoding<Byte>>,
36    pub(crate) insertion_bases: Option<Encoding<ByteArray>>,
37    pub(crate) reference_skip_lengths: Option<Encoding<Integer>>,
38    pub(crate) padding_lengths: Option<Encoding<Integer>>,
39    pub(crate) hard_clip_lengths: Option<Encoding<Integer>>,
40    pub(crate) soft_clip_bases: Option<Encoding<ByteArray>>,
41    pub(crate) mapping_qualities: Option<Encoding<Integer>>,
42    pub(crate) bases: Option<Encoding<Byte>>,
43    pub(crate) quality_scores: Option<Encoding<Byte>>,
44}
45
46impl DataSeriesEncodings {
47    pub fn bam_flags(&self) -> Option<&Encoding<Integer>> {
48        self.bam_flags.as_ref()
49    }
50
51    pub fn cram_flags(&self) -> Option<&Encoding<Integer>> {
52        self.cram_flags.as_ref()
53    }
54
55    pub fn reference_sequence_ids(&self) -> Option<&Encoding<Integer>> {
56        self.reference_sequence_ids.as_ref()
57    }
58
59    pub fn read_lengths(&self) -> Option<&Encoding<Integer>> {
60        self.read_lengths.as_ref()
61    }
62
63    pub fn alignment_starts(&self) -> Option<&Encoding<Integer>> {
64        self.alignment_starts.as_ref()
65    }
66
67    pub fn read_group_ids(&self) -> Option<&Encoding<Integer>> {
68        self.read_group_ids.as_ref()
69    }
70
71    pub fn names(&self) -> Option<&Encoding<ByteArray>> {
72        self.names.as_ref()
73    }
74
75    pub fn mate_flags(&self) -> Option<&Encoding<Integer>> {
76        self.mate_flags.as_ref()
77    }
78
79    pub fn mate_reference_sequence_ids(&self) -> Option<&Encoding<Integer>> {
80        self.mate_reference_sequence_ids.as_ref()
81    }
82
83    pub fn mate_alignment_starts(&self) -> Option<&Encoding<Integer>> {
84        self.mate_alignment_starts.as_ref()
85    }
86
87    pub fn template_lengths(&self) -> Option<&Encoding<Integer>> {
88        self.template_lengths.as_ref()
89    }
90
91    pub fn mate_distances(&self) -> Option<&Encoding<Integer>> {
92        self.mate_distances.as_ref()
93    }
94
95    pub fn tag_set_ids(&self) -> Option<&Encoding<Integer>> {
96        self.tag_set_ids.as_ref()
97    }
98
99    pub fn feature_counts(&self) -> Option<&Encoding<Integer>> {
100        self.feature_counts.as_ref()
101    }
102
103    pub fn feature_codes(&self) -> Option<&Encoding<Byte>> {
104        self.feature_codes.as_ref()
105    }
106
107    pub fn feature_position_deltas(&self) -> Option<&Encoding<Integer>> {
108        self.feature_position_deltas.as_ref()
109    }
110
111    pub fn deletion_lengths(&self) -> Option<&Encoding<Integer>> {
112        self.deletion_lengths.as_ref()
113    }
114
115    pub fn stretches_of_bases(&self) -> Option<&Encoding<ByteArray>> {
116        self.stretches_of_bases.as_ref()
117    }
118
119    pub fn stretches_of_quality_scores(&self) -> Option<&Encoding<ByteArray>> {
120        self.stretches_of_quality_scores.as_ref()
121    }
122
123    pub fn base_substitution_codes(&self) -> Option<&Encoding<Byte>> {
124        self.base_substitution_codes.as_ref()
125    }
126
127    pub fn insertion_bases(&self) -> Option<&Encoding<ByteArray>> {
128        self.insertion_bases.as_ref()
129    }
130
131    pub fn reference_skip_lengths(&self) -> Option<&Encoding<Integer>> {
132        self.reference_skip_lengths.as_ref()
133    }
134
135    pub fn padding_lengths(&self) -> Option<&Encoding<Integer>> {
136        self.padding_lengths.as_ref()
137    }
138
139    pub fn hard_clip_lengths(&self) -> Option<&Encoding<Integer>> {
140        self.hard_clip_lengths.as_ref()
141    }
142
143    pub fn soft_clip_bases(&self) -> Option<&Encoding<ByteArray>> {
144        self.soft_clip_bases.as_ref()
145    }
146
147    pub fn mapping_qualities(&self) -> Option<&Encoding<Integer>> {
148        self.mapping_qualities.as_ref()
149    }
150
151    pub fn bases(&self) -> Option<&Encoding<Byte>> {
152        self.bases.as_ref()
153    }
154
155    pub fn quality_scores(&self) -> Option<&Encoding<Byte>> {
156        self.quality_scores.as_ref()
157    }
158
159    pub fn init() -> Self {
160        Self {
161            bam_flags: Some(Encoding::new(Integer::External {
162                block_content_id: block::ContentId::from(DataSeries::BamFlags),
163            })),
164            cram_flags: Some(Encoding::new(Integer::External {
165                block_content_id: block::ContentId::from(DataSeries::CramFlags),
166            })),
167            reference_sequence_ids: Some(Encoding::new(Integer::External {
168                block_content_id: block::ContentId::from(DataSeries::ReferenceSequenceIds),
169            })),
170            read_lengths: Some(Encoding::new(Integer::External {
171                block_content_id: block::ContentId::from(DataSeries::ReadLengths),
172            })),
173            alignment_starts: Some(Encoding::new(Integer::External {
174                block_content_id: block::ContentId::from(DataSeries::AlignmentStarts),
175            })),
176            read_group_ids: Some(Encoding::new(Integer::External {
177                block_content_id: block::ContentId::from(DataSeries::ReadGroupIds),
178            })),
179            names: Some(Encoding::new(ByteArray::ByteArrayStop {
180                stop_byte: 0x00,
181                block_content_id: block::ContentId::from(DataSeries::Names),
182            })),
183            mate_flags: Some(Encoding::new(Integer::External {
184                block_content_id: block::ContentId::from(DataSeries::MateFlags),
185            })),
186            mate_reference_sequence_ids: Some(Encoding::new(Integer::External {
187                block_content_id: block::ContentId::from(DataSeries::MateReferenceSequenceIds),
188            })),
189            mate_alignment_starts: Some(Encoding::new(Integer::External {
190                block_content_id: block::ContentId::from(DataSeries::MateAlignmentStarts),
191            })),
192            template_lengths: Some(Encoding::new(Integer::External {
193                block_content_id: block::ContentId::from(DataSeries::TemplateLengths),
194            })),
195            mate_distances: Some(Encoding::new(Integer::External {
196                block_content_id: block::ContentId::from(DataSeries::MateDistances),
197            })),
198            tag_set_ids: Some(Encoding::new(Integer::External {
199                block_content_id: block::ContentId::from(DataSeries::TagSetIds),
200            })),
201            feature_counts: Some(Encoding::new(Integer::External {
202                block_content_id: block::ContentId::from(DataSeries::FeatureCounts),
203            })),
204            feature_codes: Some(Encoding::new(Byte::External {
205                block_content_id: block::ContentId::from(DataSeries::FeatureCodes),
206            })),
207            feature_position_deltas: Some(Encoding::new(Integer::External {
208                block_content_id: block::ContentId::from(DataSeries::FeaturePositionDeltas),
209            })),
210            deletion_lengths: Some(Encoding::new(Integer::External {
211                block_content_id: block::ContentId::from(DataSeries::DeletionLengths),
212            })),
213            stretches_of_bases: Some(Encoding::new(ByteArray::ByteArrayStop {
214                stop_byte: 0x00,
215                block_content_id: block::ContentId::from(DataSeries::StretchesOfBases),
216            })),
217            stretches_of_quality_scores: Some(Encoding::new(ByteArray::ByteArrayLength {
218                len_encoding: Encoding::new(Integer::External {
219                    block_content_id: block::ContentId::from(DataSeries::StretchesOfQualityScores),
220                }),
221                value_encoding: Encoding::new(Byte::External {
222                    block_content_id: block::ContentId::from(DataSeries::StretchesOfQualityScores),
223                }),
224            })),
225            base_substitution_codes: Some(Encoding::new(Byte::External {
226                block_content_id: block::ContentId::from(DataSeries::BaseSubstitutionCodes),
227            })),
228            insertion_bases: Some(Encoding::new(ByteArray::ByteArrayStop {
229                stop_byte: 0x00,
230                block_content_id: block::ContentId::from(DataSeries::InsertionBases),
231            })),
232            reference_skip_lengths: Some(Encoding::new(Integer::External {
233                block_content_id: block::ContentId::from(DataSeries::ReferenceSkipLengths),
234            })),
235            padding_lengths: Some(Encoding::new(Integer::External {
236                block_content_id: block::ContentId::from(DataSeries::PaddingLengths),
237            })),
238            hard_clip_lengths: Some(Encoding::new(Integer::External {
239                block_content_id: block::ContentId::from(DataSeries::HardClipLengths),
240            })),
241            soft_clip_bases: Some(Encoding::new(ByteArray::ByteArrayStop {
242                stop_byte: 0x00,
243                block_content_id: block::ContentId::from(DataSeries::SoftClipBases),
244            })),
245            mapping_qualities: Some(Encoding::new(Integer::External {
246                block_content_id: block::ContentId::from(DataSeries::MappingQualities),
247            })),
248            bases: Some(Encoding::new(Byte::External {
249                block_content_id: block::ContentId::from(DataSeries::Bases),
250            })),
251            quality_scores: Some(Encoding::new(Byte::External {
252                block_content_id: block::ContentId::from(DataSeries::QualityScores),
253            })),
254        }
255    }
256}