tauri_store_utils/
version.rs

1use semver::Version;
2use std::borrow::Cow;
3use std::sync::Arc;
4
5pub trait Semver {
6  /// Returns the semver version.
7  ///
8  /// # Panics
9  ///
10  /// Panics if the version is not a valid [semver](https://semver.org/).
11  fn semver(&self) -> Version;
12}
13
14impl Semver for Version {
15  #[inline]
16  fn semver(&self) -> Version {
17    self.clone()
18  }
19}
20
21impl Semver for &str {
22  fn semver(&self) -> Version {
23    Version::parse(self).unwrap_or_else(|_| {
24      panic!("{self} is not a valid semver version");
25    })
26  }
27}
28
29impl Semver for String {
30  #[inline]
31  fn semver(&self) -> Version {
32    self.as_str().semver()
33  }
34}
35
36impl Semver for &String {
37  #[inline]
38  fn semver(&self) -> Version {
39    self.as_str().semver()
40  }
41}
42
43impl Semver for Arc<str> {
44  fn semver(&self) -> Version {
45    self.as_ref().semver()
46  }
47}
48
49impl Semver for Box<str> {
50  fn semver(&self) -> Version {
51    self.as_ref().semver()
52  }
53}
54
55impl Semver for Cow<'_, str> {
56  fn semver(&self) -> Version {
57    self.as_ref().semver()
58  }
59}
60
61impl Semver for u64 {
62  #[inline]
63  fn semver(&self) -> Version {
64    Version::new(*self, 0, 0)
65  }
66}
67
68impl Semver for (u64, u64) {
69  #[inline]
70  fn semver(&self) -> Version {
71    Version::new(self.0, self.1, 0)
72  }
73}
74
75impl Semver for (u64, u64, u64) {
76  #[inline]
77  fn semver(&self) -> Version {
78    Version::new(self.0, self.1, self.2)
79  }
80}