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}