vertigo 0.1.1

Reactive Real-DOM library for Rust
Documentation
use std::cmp::{Ord, PartialOrd};

#[derive(Hash, PartialEq, Eq, Clone, Copy, Debug, PartialOrd, Ord)]
pub enum GraphIdKind {
    Value,
    Computed,
    Client,
}

#[derive(Hash, PartialEq, Eq, Clone, Copy, Debug, PartialOrd, Ord)]
pub struct GraphId(GraphIdKind, u64);

impl GraphId {
    pub fn new_value() -> GraphId {
        GraphId(
            GraphIdKind::Value,
            GraphId::get_unique_id(),
        )
    }

    pub fn new_computed() -> GraphId {
        GraphId(
            GraphIdKind::Computed,
            GraphId::get_unique_id(),
        )
    }

    pub fn new_client() -> GraphId {
        GraphId(
            GraphIdKind::Client,
            GraphId::get_unique_id(),
        )
    }

    pub fn id(&self) -> u64 {
        self.1
    }

    pub fn get_type(&self) -> GraphIdKind {
        self.0
    }
}

impl GraphId {
    fn get_unique_id() -> u64 {
        use std::sync::atomic::{AtomicU64, Ordering};
        static COUNTER: AtomicU64 = AtomicU64::new(1);
        COUNTER.fetch_add(1, Ordering::Relaxed)
    }
}