Skip to content

Commit a7c4cbb

Browse files
committed
Use semver crate
1 parent a42ba77 commit a7c4cbb

File tree

2 files changed

+14
-29
lines changed

2 files changed

+14
-29
lines changed

Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ tokio = { version = "1.40.0", features = ["rt-multi-thread"] }
2525
futures-util = { version = "0.3.31", optional = true }
2626
derive_builder = { version = "0.20.2" }
2727
thiserror = "1.0.64"
28+
semver = "1.0.24"
2829

2930
[dev-dependencies]
3031
tonic-build = { version = "0.12.3", features = ["prost"] }

src/qdrant_client/version_check.rs

Lines changed: 13 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1,30 +1,14 @@
11
use std::error::Error;
22
use std::fmt;
3+
use semver::Version;
34

4-
#[derive(Debug, Clone)]
5-
pub struct Version {
6-
pub major: u32,
7-
pub minor: u32,
8-
}
9-
10-
impl Version {
11-
pub fn parse(version: &str) -> Result<Version, VersionParseError> {
12-
if version.is_empty() {
13-
return Err(VersionParseError::EmptyVersion);
14-
}
15-
let parts: Vec<&str> = version.split('.').collect();
16-
if parts.len() < 2 {
17-
return Err(VersionParseError::InvalidFormat(version.to_string()));
18-
}
19-
20-
let major = parts[0]
21-
.parse::<u32>()
22-
.map_err(|_| VersionParseError::InvalidFormat(version.to_string()))?;
23-
let minor = parts[1]
24-
.parse::<u32>()
25-
.map_err(|_| VersionParseError::InvalidFormat(version.to_string()))?;
26-
27-
Ok(Version { major, minor })
5+
pub fn parse(version: &str) -> Result<Version, VersionParseError> {
6+
if version.is_empty() {
7+
return Err(VersionParseError::EmptyVersion);
8+
}
9+
match Version::parse(version) {
10+
Ok(v) => Ok(v),
11+
Err(_) => Err(VersionParseError::InvalidFormat(version.to_string())),
2812
}
2913
}
3014

@@ -68,8 +52,8 @@ pub fn is_compatible(client_version: Option<&str>, server_version: Option<&str>)
6852
}
6953

7054
match (
71-
Version::parse(client_version),
72-
Version::parse(server_version),
55+
parse(client_version),
56+
parse(server_version),
7357
) {
7458
(Ok(client), Ok(server)) => {
7559
let major_dif = (client.major as i32 - server.major as i32).abs();
@@ -92,12 +76,12 @@ mod tests {
9276
#[test]
9377
fn test_is_compatible() {
9478
let test_cases = vec![
95-
(Some("1.9.3.dev0"), Some("2.8.1.dev12-something"), false),
79+
(Some("1.9.3.dev0"), Some("2.8.1-dev12"), false),
9680
(Some("1.9"), Some("2.8"), false),
9781
(Some("1"), Some("2"), false),
9882
(Some("1.9.0"), Some("2.9.0"), false),
9983
(Some("1.1.0"), Some("1.2.9"), true),
100-
(Some("1.2.7"), Some("1.1.8.dev0"), true),
84+
(Some("1.2.7"), Some("1.1.8-dev0"), true),
10185
(Some("1.2.1"), Some("1.2.29"), true),
10286
(Some("1.2.0"), Some("1.2.0"), true),
10387
(Some("1.2.0"), Some("1.4.0"), false),
@@ -138,7 +122,7 @@ mod tests {
138122
];
139123

140124
for (input, expected_error) in test_cases {
141-
let result = Version::parse(input);
125+
let result = parse(input);
142126
assert!(result.is_err());
143127
assert_eq!(result.unwrap_err().to_string(), expected_error.to_string());
144128
}

0 commit comments

Comments
 (0)