dbc_rs/version/
core.rs

1use super::Version;
2use crate::{MAX_NAME_SIZE, compat::String};
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: String<{ MAX_NAME_SIZE }>) -> 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    #[must_use = "return value should be used"]
39    pub fn as_str(&self) -> &str {
40        self.version.as_str()
41    }
42}
43
44#[cfg(test)]
45mod tests {
46    use super::*;
47    use crate::Parser;
48
49    // Helper function to assert version string (works in all configurations)
50    fn assert_version_str(version: &Version, expected: &str) {
51        assert_eq!(version.as_str(), expected);
52        #[cfg(feature = "std")]
53        assert_eq!(version.to_string(), expected);
54    }
55
56    #[test]
57    fn test_version_parse_major_only() {
58        let line = b"VERSION \"1\"";
59        let mut parser = Parser::new(line).unwrap();
60        let result = Version::parse(&mut parser);
61        assert!(result.is_ok());
62        let version = result.unwrap();
63        assert_version_str(&version, "1");
64    }
65
66    #[test]
67    fn test_version_parse_full_version() {
68        let line = b"VERSION \"1.2.3\"";
69        let mut parser = Parser::new(line).unwrap();
70        let result = Version::parse(&mut parser);
71        assert!(result.is_ok());
72        let version = result.unwrap();
73        assert_version_str(&version, "1.2.3");
74    }
75
76    #[test]
77    fn test_version_parse_with_whitespace() {
78        let line = b"VERSION  \"1.0\"";
79        let mut parser = Parser::new(line).unwrap();
80        let result = Version::parse(&mut parser);
81        assert!(result.is_ok());
82        let version = result.unwrap();
83        assert_version_str(&version, "1.0");
84    }
85
86    #[test]
87    fn test_version_parse_empty_quotes() {
88        let line = b"VERSION \"\"";
89        let mut parser = Parser::new(line).unwrap();
90        let version = Version::parse(&mut parser).unwrap();
91        assert_version_str(&version, "");
92    }
93
94    #[test]
95    fn test_version_with_special_chars() {
96        let line = b"VERSION \"1.0-beta\"";
97        let mut parser = Parser::new(line).unwrap();
98        let version = Version::parse(&mut parser).unwrap();
99        assert_version_str(&version, "1.0-beta");
100    }
101}