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}