1use super::Version;
2use crate::{MAX_NAME_SIZE, compat::String};
3
4impl Version {
5 pub(crate) fn new(version: String<{ MAX_NAME_SIZE }>) -> Self {
17 Self { version }
19 }
20
21 #[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 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}