episko_lib 1.3.1

Library for episko project
Documentation
use crate::database::DatabaseObject;
use serde::{Deserialize, Serialize};
use sqlx::FromRow;

use super::property::{self, Property};

#[derive(Debug, Serialize, Deserialize, DatabaseObject, FromRow, PartialOrd, Ord, Clone)]
#[db(table = "language")]
pub struct Language {
    #[serde(skip)]
    #[db(col = "id")]
    id: Vec<u8>,
    #[db(col = "name")]
    pub name: String,
    #[db(col = "version")]
    pub version: Option<String>,
}

impl Language {
    #[must_use]
    pub fn with_version(name: &str, version: &str) -> Self {
        let mut s = Language::new(name);
        s.version = Some(version.to_string());
        s.id = s.generate_id().into();
        s
    }
}

impl Property for Language {
    #[must_use]
    fn new(name: &str) -> Self {
        let mut s = Self {
            id: vec![],
            name: name.to_string(),
            version: None,
        };
        s.update_id();
        s
    }
    fn name(&self) -> &str {
        &self.name
    }

    fn version(&self) -> Option<&str> {
        self.version.as_deref()
    }

    fn update_id(&mut self) {
        self.id = self.generate_id().to_vec();
    }
}

property::impl_property_traits!(Language);
property::impl_try_from_tuple!(Language);