Skip to main content

oxios_kernel/kernel_handle/
persona_api.rs

1//! Persona API — multi-persona management.
2
3use crate::persona::Persona;
4use crate::persona_manager::PersonaManager;
5use std::sync::Arc;
6
7/// Persona management system calls.
8pub struct PersonaApi {
9    pub(crate) persona_manager: Arc<PersonaManager>,
10}
11
12impl PersonaApi {
13    /// Create a new PersonaApi.
14    pub fn new(persona_manager: Arc<PersonaManager>) -> Self {
15        Self { persona_manager }
16    }
17    /// List all personas.
18    pub fn list(&self) -> Vec<Persona> {
19        self.persona_manager.store().list_all()
20    }
21
22    /// Get persona by ID.
23    pub fn get(&self, id: &str) -> Option<Persona> {
24        self.persona_manager.store().get(id)
25    }
26
27    /// Create a new persona.
28    pub fn create(&self, persona: Persona) {
29        self.persona_manager.store().register(persona);
30    }
31
32    /// Update a persona.
33    pub fn update(&self, id: &str, persona: Persona) -> anyhow::Result<()> {
34        self.persona_manager.store().update(id, persona)
35    }
36
37    /// Delete a persona.
38    pub fn delete(&self, id: &str) -> anyhow::Result<()> {
39        self.persona_manager.store().delete(id)
40    }
41
42    /// Get active persona.
43    pub fn active(&self) -> Option<Persona> {
44        self.persona_manager.get_active_persona()
45    }
46
47    /// Set active persona.
48    pub fn set_active(&self, id: &str) -> anyhow::Result<()> {
49        self.persona_manager.set_active_persona(id)
50    }
51
52    /// Get persona count.
53    pub fn count(&self) -> usize {
54        self.persona_manager.store().len()
55    }
56
57    /// List enabled personas.
58    pub fn list_enabled(&self) -> Vec<Persona> {
59        self.persona_manager.store().list_enabled()
60    }
61}