oxios_kernel/kernel_handle/
persona_api.rs1use crate::persona::Persona;
9use crate::persona::PersonaManager;
10use std::sync::Arc;
11
12pub struct PersonaApi {
14 pub(crate) persona_manager: Arc<PersonaManager>,
15}
16
17impl PersonaApi {
18 pub fn new(persona_manager: Arc<PersonaManager>) -> Self {
20 Self { persona_manager }
21 }
22
23 pub fn manager(&self) -> Arc<PersonaManager> {
25 Arc::clone(&self.persona_manager)
26 }
27
28 pub fn list(&self) -> Vec<Persona> {
30 self.persona_manager.store().list_all()
31 }
32
33 pub fn get(&self, id: &str) -> Option<Persona> {
35 self.persona_manager.store().get(id)
36 }
37
38 pub fn create(&self, persona: Persona) {
40 self.persona_manager.store().register(persona);
41 }
42
43 pub fn update(&self, id: &str, persona: Persona) -> anyhow::Result<()> {
45 self.persona_manager.store().update(id, persona)
46 }
47
48 pub fn delete(&self, id: &str) -> anyhow::Result<()> {
50 self.persona_manager.store().delete(id)
51 }
52
53 pub fn active(&self) -> Option<Persona> {
55 self.persona_manager.get_active_persona()
56 }
57
58 pub fn active_id(&self) -> Option<String> {
60 self.persona_manager.active_persona_id()
61 }
62
63 pub async fn set_active(&self, id: &str) -> anyhow::Result<Option<String>> {
66 self.persona_manager.set_active(id).await
67 }
68
69 pub async fn persist(&self) -> anyhow::Result<()> {
73 self.persona_manager.persist().await
74 }
75
76 pub fn count(&self) -> usize {
78 self.persona_manager.store().len()
79 }
80
81 pub fn list_enabled(&self) -> Vec<Persona> {
83 self.persona_manager.store().list_enabled()
84 }
85}