Skip to main content

ipckit/
lib.rs

1//! # ipckit
2//!
3//! A cross-platform IPC (Inter-Process Communication) library for Rust and Python.
4//!
5//! ## Features
6//!
7//! - **Pipes**: Anonymous and named pipes for parent-child process communication
8//! - **Shared Memory**: Fast data sharing between processes using memory-mapped regions
9//! - **Unix Domain Sockets / Named Pipes**: Bidirectional communication channels
10//! - **Message Channels**: High-level message passing with serialization support
11//! - **File Channel**: Simple file-based IPC for frontend-backend communication
12//! - **Thread Channel**: High-performance intra-process thread communication
13//! - **Event Stream**: Real-time publish-subscribe event system
14//! - **Task Manager**: Task lifecycle management with progress tracking
15//! - **Socket Server**: Multi-client socket server (like Docker's socket)
16//! - **API Server**: HTTP-over-Socket RESTful API service
17//! - **Metrics**: Performance monitoring and metrics collection
18//! - **Waker**: Event loop integration for GUI/async frameworks
19//!
20//! ## Example
21//!
22//! ```rust,no_run
23//! use ipckit::{NamedPipe, IpcError};
24//!
25//! fn main() -> Result<(), IpcError> {
26//!     // Create a named pipe server
27//!     let server = NamedPipe::create("my_pipe")?;
28//!
29//!     // In another process, connect as client
30//!     // let client = NamedPipe::connect("my_pipe")?;
31//!
32//!     Ok(())
33//! }
34//! ```
35
36pub mod api_server;
37pub mod channel;
38pub mod cli_bridge;
39pub mod error;
40pub mod event_stream;
41pub mod file_channel;
42pub mod graceful;
43pub mod local_socket;
44pub mod metrics;
45pub mod pipe;
46pub mod resource_link;
47pub mod shm;
48pub mod socket_server;
49pub mod task_manager;
50pub mod thread_channel;
51pub mod thread_pump;
52pub mod waker;
53
54// Async channel support
55#[cfg(feature = "async")]
56pub mod async_channel;
57
58#[cfg(unix)]
59pub mod unix;
60
61#[cfg(windows)]
62pub mod windows;
63
64// Re-exports
65pub use channel::{IpcChannel, IpcReceiver, IpcSender};
66pub use error::{IpcError, Result};
67pub use event_stream::{
68    event_types, Event, EventBus, EventBusConfig, EventFilter, EventPublisher, EventSubscriber,
69    McpProgressPayload,
70};
71pub use file_channel::{FileChannel, FileMessage, MessageType as FileMessageType};
72pub use graceful::{
73    GracefulChannel, GracefulIpcChannel, GracefulNamedPipe, GracefulWrapper, OperationGuard,
74    ReentrantDispatch, ShutdownState,
75};
76pub use local_socket::{LocalSocketListener, LocalSocketStream};
77pub use pipe::{AnonymousPipe, NamedPipe, PipeReader, PipeWriter};
78pub use resource_link::{ResourceKind, ResourceLink, ResourceLinkInfo};
79pub use shm::SharedMemory;
80pub use socket_server::{
81    Connection, ConnectionHandler, ConnectionId, ConnectionMetadata, FnHandler, Message,
82    SocketClient, SocketServer, SocketServerConfig,
83};
84pub use task_manager::{
85    CancellationToken, TaskBuilder, TaskFilter, TaskHandle, TaskInfo, TaskManager,
86    TaskManagerConfig, TaskStatus,
87};
88pub use thread_channel::{ThreadChannel, ThreadReceiver, ThreadSender};
89pub use thread_pump::{MainThreadPump, PumpStats, ThreadAffinity};
90
91// API Server exports
92pub use api_server::{
93    ApiClient, ApiServer, ApiServerConfig, Method, PathPattern, Request, Response, ResponseBody,
94    Router,
95};
96
97// Metrics exports
98pub use metrics::{
99    metered_pair, AggregatedMetrics, ChannelMetrics, IntoMetered, MeteredChannel, MeteredReceiver,
100    MeteredSender, MeteredWrapper, MetricsSnapshot, WithMetrics,
101};
102
103// Waker exports
104pub use waker::{
105    BroadcastWaker, CallbackWaker, EventLoopWaker, ThreadWaker, WakeableChannel, WakeableWrapper,
106};
107
108#[cfg(feature = "async")]
109pub use waker::TokioWaker;
110
111// CLI Bridge exports
112pub use cli_bridge::{
113    parsers, CliBridge, CliBridgeConfig, CommandOutput, OutputType, ProgressInfo, ProgressParser,
114    WrappedChild, WrappedCommand, WrappedWriter,
115};
116
117// Async channel exports
118#[cfg(feature = "async")]
119pub use async_channel::{AsyncIpcChannel, AsyncIpcReceiver, AsyncIpcSender};
120
121#[cfg(feature = "async")]
122pub use async_channel::tokio_channel::{
123    AsyncThreadChannel, AsyncThreadReceiver, AsyncThreadSender,
124};
125
126#[cfg(feature = "async")]
127pub use async_channel::{broadcast, oneshot};
128
129// Async local socket exports (when both async and backend-interprocess features are enabled)
130#[cfg(all(feature = "async", feature = "backend-interprocess"))]
131pub use local_socket::{AsyncLocalSocketListener, AsyncLocalSocketStream};
132
133// Python bindings (organized into submodules for better maintainability)
134#[cfg(feature = "python-bindings")]
135pub mod bindings;
136
137#[cfg(feature = "python-bindings")]
138pub use bindings::*;