use crate::persona::Persona;
use crate::persona_manager::PersonaManager;
use std::sync::Arc;
pub struct PersonaApi {
pub(crate) persona_manager: Arc<PersonaManager>,
}
impl PersonaApi {
pub fn new(persona_manager: Arc<PersonaManager>) -> Self {
Self { persona_manager }
}
pub fn list(&self) -> Vec<Persona> {
self.persona_manager.store().list_all()
}
pub fn get(&self, id: &str) -> Option<Persona> {
self.persona_manager.store().get(id)
}
pub fn create(&self, persona: Persona) {
self.persona_manager.store().register(persona);
}
pub fn update(&self, id: &str, persona: Persona) -> anyhow::Result<()> {
self.persona_manager.store().update(id, persona)
}
pub fn delete(&self, id: &str) -> anyhow::Result<()> {
self.persona_manager.store().delete(id)
}
pub fn active(&self) -> Option<Persona> {
self.persona_manager.get_active_persona()
}
pub fn set_active(&self, id: &str) -> anyhow::Result<()> {
self.persona_manager.set_active_persona(id)
}
pub fn count(&self) -> usize {
self.persona_manager.store().len()
}
pub fn list_enabled(&self) -> Vec<Persona> {
self.persona_manager.store().list_enabled()
}
}