elemental_shared/
profile.rs1use crate::{
2 loader::ProfileLoader,
3 version::{Migrator, Persistor, VersionControlled},
4};
5use anyhow::Result;
6use serde::{Deserialize, Serialize};
7
8#[derive(Serialize, Deserialize, Default)]
9pub struct Profile<C> {
10 pub name: String,
12 pub config: C,
14 pub version: usize,
15}
16
17impl<C: Default> VersionControlled for Profile<C> {
18 #[inline(always)]
19 fn version(&self) -> usize {
20 self.version
21 }
22}
23
24impl<C: Default> Profile<C> {
25 pub async fn load<M: Migrator<Profile<C>>, P: Persistor<Profile<C>>>(
26 migrator: M,
27 persistor: P,
28 version: usize,
29 ) -> Result<ProfileLoader<M, C, P>> {
30 ProfileLoader::load(migrator, persistor, version).await
31 }
32}
33
34impl<C: Clone> Clone for Profile<C> {
35 fn clone(&self) -> Self {
36 Profile {
37 name: self.name.clone(),
38 config: self.config.clone(),
39 version: self.version,
40 }
41 }
42}