episko_lib/metadata/
language.rs

1use crate::database::DatabaseObject;
2use serde::{Deserialize, Serialize};
3use sqlx::FromRow;
4
5use super::property::{self, Property};
6
7#[derive(Debug, Serialize, Deserialize, DatabaseObject, FromRow, PartialOrd, Ord, Clone)]
8#[db(table = "language")]
9pub struct Language {
10    #[serde(skip)]
11    #[db(col = "id")]
12    id: Vec<u8>,
13    #[db(col = "name")]
14    pub name: String,
15    #[db(col = "version")]
16    pub version: Option<String>,
17}
18
19impl Language {
20    #[must_use]
21    pub fn with_version(name: &str, version: &str) -> Self {
22        let mut s = Language::new(name);
23        s.version = Some(version.to_string());
24        s.id = s.generate_id().into();
25        s
26    }
27}
28
29impl Property for Language {
30    #[must_use]
31    fn new(name: &str) -> Self {
32        let mut s = Self {
33            id: vec![],
34            name: name.to_string(),
35            version: None,
36        };
37        s.update_id();
38        s
39    }
40    fn name(&self) -> &str {
41        &self.name
42    }
43
44    fn version(&self) -> Option<&str> {
45        self.version.as_deref()
46    }
47
48    fn update_id(&mut self) {
49        self.id = self.generate_id().to_vec();
50    }
51}
52
53property::impl_property_traits!(Language);
54property::impl_try_from_tuple!(Language);