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())
}
}