geekorm_core/builder/values/
valsemver.rs

1//! # Implementations of `From` trait for semver types.
2//!
3//! ```rust
4//! # #[cfg(feature = "semver")] {
5//! use geekorm::prelude::*;
6//! use semver::{Version, VersionReq};
7//!
8//! #[derive(Table, Clone, serde::Serialize, serde::Deserialize)]
9//! struct Project {
10//!     #[geekorm(primary_key, auto_increment)]
11//!     id: PrimaryKey<u64>,
12//!     /// Name of the project
13//!     #[geekorm(unique)]
14//!     name: String,
15//|     /// Version
16//!     version: Version,
17//!     /// Required Version
18//!     requirement: VersionReq,
19//! }
20//!
21//! // Create a new Project with a semver Version
22//! let project = Project::new(
23//!     "geekorm",
24//!     Version::parse("1.0.0").unwrap(),
25//!     VersionReq::parse(">=0.6, <1.2.3").unwrap(),
26//! );
27//!
28//! # assert!(project.requirement.matches(&project.version));
29//!
30//! # }
31//! ```
32
33use super::Value;
34use semver::{Version, VersionReq};
35
36impl From<Version> for Value {
37    fn from(value: Version) -> Self {
38        Value::Text(value.to_string())
39    }
40}
41
42impl From<&Version> for Value {
43    fn from(value: &Version) -> Self {
44        Value::Text(value.to_string())
45    }
46}
47
48impl From<Value> for Version {
49    fn from(value: Value) -> Self {
50        // TODO: This unwrap isn't great...
51        Version::parse(&value.to_string()).unwrap()
52    }
53}
54
55impl From<VersionReq> for Value {
56    fn from(value: VersionReq) -> Self {
57        Value::Text(value.to_string())
58    }
59}
60impl From<&VersionReq> for Value {
61    fn from(value: &VersionReq) -> Self {
62        Value::Text(value.to_string())
63    }
64}
65
66impl From<Value> for VersionReq {
67    fn from(value: Value) -> Self {
68        // TODO: This unwrap isn't great
69        VersionReq::parse(&value.to_string()).unwrap()
70    }
71}