Skip to main content

stdiobus_core/
lib.rs

1// SPDX-License-Identifier: Apache-2.0
2// Copyright (c) 2026-present Raman Marozau <raman@worktif.com>
3// Copyright (c) 2026-present stdiobus contributors
4
5#![cfg_attr(docsrs, feature(doc_cfg))]
6
7//! Core types and protocol models for stdio_bus
8//!
9//! This crate provides the fundamental types used across all stdio_bus components:
10//! - Error types with canonical error codes
11//! - Bus state machine
12//! - JSON-RPC message types
13//! - Statistics and configuration types
14//! - Backend trait for implementations
15
16mod backend;
17mod error;
18mod message;
19mod state;
20mod stats;
21mod types;
22
23#[cfg(test)]
24mod tests;
25
26pub use backend::{Backend, BusMessage};
27pub use error::{Error, ErrorCode, Result};
28pub use message::{JsonRpcMessage, JsonRpcRequest, JsonRpcResponse, JsonRpcError};
29pub use state::BusState;
30pub use stats::BusStats;
31pub use types::{BackendMode, RequestOptions, Identity, Extensions, ExtensionInfo, DockerOptions, PoolConfig, LimitsConfig, BusConfig, ConfigSource};
32
33use std::time::{SystemTime, UNIX_EPOCH};
34
35/// Generate a unique client session ID for stdiobus routing.
36///
37/// Format: `client-{timestamp_ms}-{random_suffix}`
38pub fn generate_client_session_id() -> String {
39    let timestamp = SystemTime::now()
40        .duration_since(UNIX_EPOCH)
41        .unwrap_or_default()
42        .as_millis();
43    
44    // Use uuid for random suffix instead of rand crate
45    let uuid = uuid::Uuid::new_v4();
46    let suffix = &uuid.to_string()[0..6];
47    
48    format!("client-{}-{}", timestamp, suffix)
49}