dbc_rs/version/
impls.rs

1use super::Version;
2use crate::compat::Name;
3
4impl Version {
5    /// Creates a new `Version` from a version string.
6    ///
7    /// # Note
8    ///
9    /// This method is intended for internal use. For parsing from DBC content,
10    /// use `Version::parse()`. For programmatic construction, use `VersionBuilder`
11    /// (requires `std` feature).
12    ///
13    /// # Arguments
14    ///
15    /// * `version` - The version string (should be validated before calling this)
16    pub(crate) fn new(version: Name) -> Self {
17        // Validation should have been done prior (by builder or parse)
18        Self { version }
19    }
20
21    /// Returns the version string as a `&str`.
22    ///
23    /// # Examples
24    ///
25    /// ```rust,no_run
26    /// use dbc_rs::Dbc;
27    ///
28    /// let dbc = Dbc::parse(r#"VERSION "1.2.3"
29    ///
30    /// BU_: ECM
31    /// "#)?;
32    ///
33    /// if let Some(version) = dbc.version() {
34    ///     assert_eq!(version.as_str(), "1.2.3");
35    /// }
36    /// # Ok::<(), dbc_rs::Error>(())
37    /// ```
38    #[inline]
39    #[must_use = "return value should be used"]
40    pub fn as_str(&self) -> &str {
41        self.version.as_str()
42    }
43}
44
45#[cfg(test)]
46mod tests {
47    use super::*;
48    use crate::Parser;
49
50    // Helper function to assert version string (works in all configurations)
51    fn assert_version_str(version: &Version, expected: &str) {
52        assert_eq!(version.as_str(), expected);
53        #[cfg(feature = "std")]
54        assert_eq!(version.to_string(), expected);
55    }
56
57    #[test]
58    fn test_version_parse_major_only() {
59        let line = b"VERSION \"1\"";
60        let mut parser = Parser::new(line).unwrap();
61        let result = Version::parse(&mut parser);
62        assert!(result.is_ok());
63        let version = result.unwrap();
64        assert_version_str(&version, "1");
65    }
66
67    #[test]
68    fn test_version_parse_full_version() {
69        let line = b"VERSION \"1.2.3\"";
70        let mut parser = Parser::new(line).unwrap();
71        let result = Version::parse(&mut parser);
72        assert!(result.is_ok());
73        let version = result.unwrap();
74        assert_version_str(&version, "1.2.3");
75    }
76
77    #[test]
78    fn test_version_parse_with_whitespace() {
79        let line = b"VERSION  \"1.0\"";
80        let mut parser = Parser::new(line).unwrap();
81        let result = Version::parse(&mut parser);
82        assert!(result.is_ok());
83        let version = result.unwrap();
84        assert_version_str(&version, "1.0");
85    }
86
87    #[test]
88    fn test_version_parse_empty_quotes() {
89        let line = b"VERSION \"\"";
90        let mut parser = Parser::new(line).unwrap();
91        let version = Version::parse(&mut parser).unwrap();
92        assert_version_str(&version, "");
93    }
94
95    #[test]
96    fn test_version_with_special_chars() {
97        let line = b"VERSION \"1.0-beta\"";
98        let mut parser = Parser::new(line).unwrap();
99        let version = Version::parse(&mut parser).unwrap();
100        assert_version_str(&version, "1.0-beta");
101    }
102}