use chrono::{
DateTime,
Utc,
};
use serde::{
Deserialize,
Serialize,
};
use crate::{
Deletable,
Emptyful,
Identifiable,
Normalizable,
WithCode,
WithName,
};
#[derive(Debug, Clone, Default, PartialEq, Eq, Hash, Serialize, Deserialize)]
pub struct Info {
pub id: Option<i64>,
pub code: String,
pub name: String,
pub delete_time: Option<DateTime<Utc>>,
}
impl Info {
pub fn new(
id: Option<i64>,
code: String,
name: String,
delete_time: Option<DateTime<Utc>>,
) -> Self {
Self {
id,
code,
name,
delete_time,
}
}
pub fn of_id(id: i64) -> Self {
Self {
id: Some(id),
code: String::new(),
name: String::new(),
delete_time: None,
}
}
pub fn of_code(code: String) -> Self {
Self {
id: None,
code,
name: String::new(),
delete_time: None,
}
}
pub fn of_name(name: String) -> Self {
Self {
id: None,
code: String::new(),
name,
delete_time: None,
}
}
}
impl Identifiable for Info {
fn id(&self) -> Option<i64> {
self.id
}
fn set_id(&mut self, id: Option<i64>) {
self.id = id;
}
}
impl WithCode for Info {
fn code(&self) -> &str {
&self.code
}
fn set_code(&mut self, code: &str) {
self.code = code.to_string();
}
}
impl WithName for Info {
fn name(&self) -> &str {
&self.name
}
fn set_name(&mut self, name: &str) {
self.name = name.to_string();
}
}
impl Deletable for Info {
fn delete_time(&self) -> Option<DateTime<Utc>> {
self.delete_time
}
fn set_delete_time(&mut self, time: Option<DateTime<Utc>>) {
self.delete_time = time;
}
}
impl Emptyful for Info {
fn is_empty(&self) -> bool {
self.id.is_none()
&& self.code.is_empty()
&& self.name.is_empty()
&& self.delete_time.is_none()
}
}
impl Normalizable for Info {
fn normalize(&mut self) {
self.code = self.code.trim().to_string();
self.name = self.name.trim().to_string();
}
}