use crate::service::auth::Owned;
use crate::service::validator::ownership::WithIdAndVersion;
use c3p0::DataType;
use serde::{Deserialize, Serialize};
pub mod language;
pub mod model_dto;
#[derive(Clone, Debug, PartialEq, Deserialize, Serialize)]
pub struct ModelWithOwner<Data> {
pub id: i64,
pub version: i64,
pub user_id: i64,
pub data: Data,
}
impl<Data: DataType> Owned for ModelWithOwner<Data> {
fn get_owner_id(&self) -> i64 {
self.user_id
}
}
impl<Data: DataType> WithIdAndVersion for ModelWithOwner<Data> {
fn get_id(&self) -> i64 {
self.id
}
fn get_version(&self) -> i64 {
self.version
}
}
impl<Data: DataType, T: Owned + WithIdAndVersion> From<(&T, Data)> for ModelWithOwner<Data> {
fn from((model, data): (&T, Data)) -> Self {
ModelWithOwner { id: model.get_id(), version: model.get_version(), user_id: model.get_owner_id(), data }
}
}
impl<T: Owned + WithIdAndVersion> From<&T> for ModelWithOwner<()> {
fn from(model: &T) -> Self {
ModelWithOwner { id: model.get_id(), version: model.get_version(), user_id: model.get_owner_id(), data: () }
}
}