caretta-sync-core 0.0.2

A local-first application framework for lazy person
Documentation
use std::sync::OnceLock;

use iroh::Endpoint;

pub static IROH_ENDPOINT: GlobalIrohEndpoint = GlobalIrohEndpoint::const_new();

pub struct GlobalIrohEndpoint {
    inner: OnceLock<Endpoint>,
}

impl GlobalIrohEndpoint {
    const fn const_new() -> Self {
        Self {
            inner: OnceLock::new(),
        }
    }
    pub fn get_or_init(&self, endpoint: &Endpoint) -> Endpoint {
        self.inner.get_or_init(|| endpoint.clone()).clone()
    }
    pub fn get(&self) -> Option<Endpoint> {
        self.inner.get().cloned()
    }
    pub fn get_unchecked(&self) -> Endpoint {
        self.get()
            .expect("Global Iroh Endpoint must be initialized before use")
    }
}