noodles_sam/header/record/value/map/
header.rs

1//! SAM header record header map value.
2
3mod builder;
4pub mod group_order;
5pub mod sort_order;
6pub mod tag;
7pub mod version;
8
9pub use self::{tag::Tag, version::Version};
10
11use self::builder::Builder;
12use super::{Inner, Map, OtherFields};
13
14/// A SAM header record header map value.
15///
16/// The header describes file-level metadata. The format version is guaranteed to be set.
17#[derive(Clone, Debug, Default, Eq, PartialEq)]
18pub struct Header {
19    pub(crate) version: Version,
20}
21
22impl Inner for Header {
23    type StandardTag = tag::Standard;
24    type Builder = Builder;
25}
26
27impl Map<Header> {
28    /// Creates a SAM header record header map value with a format version.
29    ///
30    /// # Examples
31    ///
32    /// ```
33    /// use noodles_sam::header::record::value::{
34    ///     map::{self, header::Version},
35    ///     Map,
36    /// };
37    ///
38    /// let header = Map::<map::Header>::new(Version::new(1, 6));
39    /// ```
40    pub fn new(version: Version) -> Self {
41        Self {
42            inner: Header { version },
43            other_fields: OtherFields::new(),
44        }
45    }
46
47    /// Returns the format version.
48    ///
49    /// # Examples
50    ///
51    /// ```
52    /// use noodles_sam::header::record::value::{
53    ///     map::{self, header::Version},
54    ///     Map,
55    /// };
56    ///
57    /// let header = Map::<map::Header>::new(Version::new(1, 6));
58    /// assert_eq!(header.version(), Version::new(1, 6));
59    /// ```
60    pub fn version(&self) -> Version {
61        self.inner.version
62    }
63
64    /// Returns a mutable reference to the format version.
65    ///
66    /// # Examples
67    ///
68    /// ```
69    /// use noodles_sam::header::record::value::{map::{self, header::Version}, Map};
70    /// let mut header = Map::<map::Header>::default();
71    /// *header.version_mut() = Version::new(1, 5);
72    /// assert_eq!(header.version(), Version::new(1, 5));
73    /// ```
74    pub fn version_mut(&mut self) -> &mut Version {
75        &mut self.inner.version
76    }
77}
78
79#[cfg(test)]
80mod tests {
81    use super::*;
82
83    #[test]
84    fn test_default() {
85        let header = Map::<Header>::default();
86        assert_eq!(header.version(), Version::default());
87    }
88}