tauri-plugin-sync-state 0.1.0

Bidirectional, type-keyed state sync between a Tauri backend and a JS/React frontend.
Documentation
use serde::Serialize;
use thiserror::Error;

#[derive(Debug, Error)]
pub enum Error {
    #[error("sync-state registry lock was poisoned")]
    LockPoisoned,
    #[error("state slice '{0}' is not registered — call .register({0}::default())")]
    NotFound(String),
    #[error("state slice '{0}' is registered under a different Rust type")]
    TypeMismatch(String),
    #[error("state slice '{0}' was registered twice")]
    DuplicateRegistration(String),
    #[error("failed to serialize state: {0}")]
    Serialize(String),
    #[error("failed to deserialize state: {0}")]
    Deserialize(String),
    #[error("failed to emit update event: {0}")]
    Emit(String),
    #[error("sync-state plugin is not initialized — add it via Builder::new()...build()")]
    PluginNotInitialized,
}

pub type Result<T> = std::result::Result<T, Error>;

impl Serialize for Error {
    fn serialize<S: serde::Serializer>(&self, s: S) -> std::result::Result<S::Ok, S::Error> {
        s.serialize_str(&self.to_string())
    }
}