reactive_graph_std_base_model/component/
versioned.rs

1use semver::Version;
2
3use crate::NAMESPACE_BASE;
4use reactive_graph_graph::component_model;
5use reactive_graph_graph::component_ty;
6use reactive_graph_graph::properties;
7
8properties!(VersionedProperties, (VERSION, "version", ""));
9
10component_ty!(COMPONENT_VERSIONED, NAMESPACE_BASE, COMPONENT_NAME_VERSIONED, "versioned");
11
12component_model!(
13    Versioned,
14    data version string,
15);
16
17pub trait SemVer: Versioned {
18    fn set_version_checked(&self, version: &str) {
19        if let Ok(version) = Version::parse(version) {
20            self.set_version(version.to_string());
21        }
22    }
23
24    fn to_version(&self) -> Option<Version> {
25        self.get_version().and_then(|version| Version::parse(&version).ok())
26    }
27}