Skip to main content

elemental_shared/
profile.rs

1use 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    /// Profile name
11    pub name: String,
12    /// Profile configuration data
13    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}