tatuin-core 0.1.0

Core lib of the Tatuin project
Documentation
// SPDX-License-Identifier: MIT

use std::collections::HashMap;

pub type State = HashMap<String, String>;

pub fn state_to_str(s: &State) -> Result<String, Box<dyn std::error::Error>> {
    match serde_json::to_string(s) {
        Ok(v) => Ok(v),
        Err(e) => Err(Box::new(e)),
    }
}

pub fn state_from_str(s: &str) -> Result<State, Box<dyn std::error::Error>> {
    match serde_json::from_str(s) {
        Ok(v) => Ok(v),
        Err(e) => Err(Box::new(e)),
    }
}

pub trait StatefulObject {
    fn save(&self) -> State;
    fn restore(&mut self, state: State);
}

pub trait StateSettings: Send + Sync {
    fn load(&self, name: Option<&str>) -> State;
    fn save(&mut self, name: Option<&str>, state: State) -> Result<(), Box<dyn std::error::Error>>;
    fn remove(&mut self, name: &str) -> Result<(), Box<dyn std::error::Error>>;
    fn states(&self) -> Vec<String>;
}