text-document-common 1.4.0

Shared entities, database, events, and undo/redo infrastructure for text-document
Documentation
// Generated by Qleany v1.4.8 from snapshot.tera

use serde::{Deserialize, Serialize};
use std::any::Any;

/// Snapshot of an entity tree, backed by a store-level snapshot for undo.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct EntityTreeSnapshot {
    /// Store-level fast path for undo.
    #[serde(skip)]
    pub store_snapshot: Option<StoreSnapshot>,
}

// ─────────────────────────────────────────────────────────────────────────────
// Store-level snapshot (type-erased so snapshot.rs doesn't depend on HashMapStore)
// ─────────────────────────────────────────────────────────────────────────────

/// Trait for type-erased store snapshots.
pub trait StoreSnapshotTrait: std::fmt::Debug + Send + Sync {
    fn clone_box(&self) -> Box<dyn StoreSnapshotTrait>;
    fn as_any(&self) -> &dyn Any;
}

impl Clone for Box<dyn StoreSnapshotTrait> {
    fn clone(&self) -> Self {
        self.clone_box()
    }
}

/// Type-erased store snapshot for undo fast path.
#[derive(Debug, Clone)]
pub struct StoreSnapshot {
    inner: Box<dyn StoreSnapshotTrait>,
}

impl StoreSnapshot {
    pub fn new<T: StoreSnapshotTrait + 'static>(inner: T) -> Self {
        Self {
            inner: Box::new(inner),
        }
    }

    pub fn downcast_ref<T: 'static>(&self) -> Option<&T> {
        self.inner.as_any().downcast_ref()
    }
}