know/classes/
software_package.rs

1// This is free and unencumbered software released into the public domain.
2
3use super::ThingLike;
4use crate::prelude::*;
5use std::{rc::Rc, str::FromStr};
6
7/// See: https://en.wikipedia.org/wiki/Software_package
8#[derive(Debug, Clone, Default, Eq, Hash, PartialEq, PartialOrd, Ord)]
9#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
10pub struct SoftwarePackage {
11    pub name: Name,
12
13    #[cfg_attr(feature = "serde", serde(default))]
14    pub version: String,
15
16    pub link: Option<IRI>,
17}
18
19impl ThingLike for SoftwarePackage {
20    fn id(&self) -> Option<&str> {
21        None
22    }
23
24    fn name(&self) -> Option<&Name> {
25        Some(&self.name)
26    }
27}
28
29impl FromStr for SoftwarePackage {
30    type Err = ();
31
32    fn from_str(input: &str) -> Result<Self, Self::Err> {
33        Ok(SoftwarePackage {
34            name: input.to_string(),
35            ..Default::default()
36        })
37    }
38}
39
40pub type SoftwarePackageRef = Rc<SoftwarePackage>;
41
42impl ThingLike for SoftwarePackageRef {
43    fn id(&self) -> Option<&str> {
44        None
45    }
46
47    fn name(&self) -> Option<&Name> {
48        Some(&self.name)
49    }
50}