terrazzo-terminal 0.2.7

A simple web-based terminal emulator built on Terrazzo.
#![cfg(feature = "server")]
#![cfg(feature = "terminal")]

use std::sync::Arc;
use std::sync::OnceLock;

use dashmap::DashMap;
use terrazzo_pty::lease::ProcessIoEntry;

use super::terminal_id::TerminalId;
use crate::api::shared::terminal_schema::TerminalDef;

pub mod close;
pub mod io;
pub mod list;
pub mod resize;
pub mod set_title;
pub mod stream;
pub mod write;

pub fn get_processes() -> &'static DashMap<TerminalId, (TerminalDef, Arc<ProcessIoEntry>)> {
    static PROCESSES: OnceLock<DashMap<TerminalId, (TerminalDef, Arc<ProcessIoEntry>)>> =
        OnceLock::new();
    PROCESSES.get_or_init(DashMap::new)
}

pub fn next_terminal_id() -> i32 {
    use std::sync::atomic::AtomicI32;
    use std::sync::atomic::Ordering::SeqCst;
    static NEXT: AtomicI32 = AtomicI32::new(1);
    NEXT.fetch_add(1, SeqCst)
}