citadel_sdk/prefabs/server/
mod.rs

1//! Server-Side Network Components
2//!
3//! This module provides pre-built server-side networking components for the Citadel Protocol.
4//! It includes implementations for common server tasks such as file transfer handling,
5//! client connection management, and internal service integration.
6//!
7//! # Features
8//! - File transfer acceptance
9//! - Client connection handling
10//! - Internal service support
11//! - Minimal processing kernels
12//! - Event-driven architecture
13//! - Automatic resource management
14//! - Service integration patterns
15//!
16//! # Example
17//! ```rust
18//! use citadel_sdk::prelude::*;
19//! use citadel_sdk::prefabs::server::accept_file_transfer_kernel::AcceptFileTransferKernel;
20//! use citadel_sdk::prefabs::server::client_connect_listener::ClientConnectListenerKernel;
21//! use citadel_sdk::prefabs::server::empty::EmptyKernel;
22//! use citadel_sdk::prefabs::server::internal_service::InternalServiceKernel;
23//! use citadel_io::tokio;
24//! use hyper::service::service_fn;
25//! use hyper::{Body, Request, Response};
26//! use std::convert::Infallible;
27//!
28//! # fn main() -> Result<(), NetworkError> {
29//! // Create a basic server with file transfer support
30//! let kernel = Box::new(AcceptFileTransferKernel::<StackedRatchet>::default());
31//!
32//! // Create a server that listens for client connections
33//! let kernel = Box::new(ClientConnectListenerKernel::<_, _, StackedRatchet>::new(|conn| async move {
34//!     println!("Client connected!");
35//!     Ok(())
36//! }));
37//!
38//! // Create a minimal server with no additional processing
39//! let kernel = Box::new(EmptyKernel::<StackedRatchet>::default());
40//!
41//! // Create a server with internal service support (e.g., HTTP server)
42//! let kernel = Box::new(InternalServiceKernel::<_, _, StackedRatchet>::new(|_comm| async move {
43//!     let service = service_fn(|_req: Request<Body>| async move {
44//!         Ok::<_, Infallible>(Response::new(Body::empty()))
45//!     });
46//!     Ok(())
47//! }));
48//! # Ok(())
49//! # }
50//! ```
51//!
52//! # Important Notes
53//! - Kernels are composable components
54//! - Each kernel serves a specific purpose
55//! - Resource cleanup is automatic
56//! - Event handling is asynchronous
57//!
58//! # Related Components
59//! - [`accept_file_transfer_kernel`]: File transfer handling
60//! - [`client_connect_listener`]: Client connection management
61//! - [`internal_service`]: Internal service support
62//! - [`empty`]: Minimal processing kernel
63//!
64//! [`accept_file_transfer_kernel`]: crate::prefabs::server::accept_file_transfer_kernel
65//! [`client_connect_listener`]: crate::prefabs::server::client_connect_listener
66//! [`internal_service`]: crate::prefabs::server::internal_service
67//! [`empty`]: crate::prefabs::server::empty
68
69/// A kernel that accepts all inbound file transfer requests for basic file transfers
70/// AND RE-VFS transfers
71pub mod accept_file_transfer_kernel;
72/// A kernel that reacts to new channels created, allowing communication with new clients.
73/// Useful for when a server needs to send messages to clients
74pub mod client_connect_listener;
75/// A non-reactive kernel that does no additional processing on top of the protocol
76pub mod empty;
77/// For internal services (e.g., a Hyper webserver)
78pub mod internal_service;