Skip to main content

ash_rpc/
lib.rs

1//! # ash-rpc
2//!
3//! A comprehensive JSON-RPC 2.0 implementation with transport support.
4//!
5//! ## Features
6//!
7//! - **Complete JSON-RPC 2.0 support** - Request, response, notification, and batch handling
8//! - **Multiple transports** - TCP, TCP streaming, HTTP via Axum, and Tower middleware
9//! - **Stateful handlers** - Context-aware method handlers with shared application state
10//! - **Type-safe builders** - Fluent API for constructing requests and responses
11//! - **Method registry** - Organize and dispatch JSON-RPC methods
12//! - **Auto-documentation** - Generate OpenAPI/Swagger specs from method definitions
13//! - **Code generation** - CLI tool for generating boilerplate implementations
14//! - **Macro support** - Convenient macros for common response patterns
15//!
16//! ## Quick Start
17//!
18//! ```rust
19//! use ash_rpc::*;
20//!
21//! struct PingMethod;
22//!
23//! #[async_trait::async_trait]
24//! impl JsonRPCMethod for PingMethod {
25//!     fn method_name(&self) -> &'static str { "ping" }
26//!     
27//!     async fn call(
28//!         &self,
29//!         _params: Option<serde_json::Value>,
30//!         id: Option<RequestId>,
31//!     ) -> Response {
32//!         rpc_success!("pong", id)
33//!     }
34//! }
35//!
36//! // Create a method registry
37//! let registry = MethodRegistry::new(register_methods![PingMethod]);
38//! ```
39
40// Core module declarations
41pub mod auth;
42pub mod builders;
43pub mod logger;
44pub mod macros;
45pub mod registry;
46pub mod sanitization;
47
48#[cfg(feature = "audit-logging")]
49pub mod audit_logging;
50
51#[cfg(feature = "shutdown")]
52pub mod shutdown;
53
54#[cfg(feature = "streaming")]
55pub mod streaming;
56
57pub mod traits;
58pub mod transports;
59pub mod types;
60
61#[cfg(feature = "stateful")]
62pub mod stateful;
63
64// Contrib modules at top level
65#[cfg(feature = "healthcheck")]
66pub mod healthcheck;
67
68#[cfg(feature = "tower")]
69pub mod middleware;
70
71#[cfg(any(feature = "logging", feature = "prometheus", feature = "opentelemetry"))]
72pub mod observability;
73
74// Re-export async_trait for users implementing traits
75pub use async_trait::async_trait;
76
77// Re-export tokio for tcp-stream feature
78#[cfg(feature = "tcp-stream")]
79pub use tokio;
80
81// Re-export all core types
82pub use types::*;
83
84// Re-export all builders
85pub use builders::*;
86
87// Re-export all traits
88pub use traits::*;
89
90// Re-export registry
91pub use registry::*;
92
93// Re-export stateful module when stateful feature is enabled
94#[cfg(feature = "stateful")]
95pub use stateful::*;
96
97// Re-export streaming module when streaming feature is enabled
98#[cfg(feature = "streaming")]
99pub use streaming::*;
100
101// Re-export shutdown module when shutdown feature is enabled
102#[cfg(feature = "shutdown")]
103pub use shutdown::*;
104
105// Re-export audit_logging module when audit-logging feature is enabled
106#[cfg(feature = "audit-logging")]
107pub use audit_logging::*;
108
109// Re-export transports
110pub use transports::SecurityConfig;
111
112#[cfg(feature = "tcp")]
113pub use transports::{TcpServer, TcpServerBuilder};
114
115#[cfg(feature = "tcp-stream")]
116pub use transports::{
117    TcpStreamClient, TcpStreamClientBuilder, TcpStreamServer, TcpStreamServerBuilder,
118};
119
120#[cfg(feature = "tcp-stream-tls")]
121pub use transports::{
122    TcpStreamTlsClient, TcpStreamTlsServer, TcpStreamTlsServerBuilder, TlsConfig,
123};
124
125#[cfg(feature = "axum")]
126pub use transports::axum;
127
128// Re-export healthcheck when feature is enabled
129#[cfg(feature = "healthcheck")]
130pub use healthcheck::*;
131
132// Re-export middleware when feature is enabled
133#[cfg(feature = "tower")]
134pub use middleware::*;
135
136// Re-export observability types when feature is enabled
137#[cfg(any(feature = "logging", feature = "prometheus", feature = "opentelemetry"))]
138pub use observability::{ObservabilityBuilder, ObservableProcessor};
139
140#[cfg(feature = "prometheus")]
141pub use observability::prometheus as obs_prometheus;
142
143#[cfg(feature = "opentelemetry")]
144pub use observability::tracing as obs_tracing;
145
146// Re-export tower when feature is enabled
147#[cfg(feature = "tower")]
148pub use tower;
149
150// Re-export prometheus crate when feature is enabled
151#[cfg(feature = "prometheus")]
152pub use prometheus;
153
154// Re-export OpenTelemetry crates when feature is enabled
155#[cfg(feature = "opentelemetry")]
156pub use opentelemetry;
157
158#[cfg(feature = "opentelemetry")]
159pub use opentelemetry_otlp;
160
161#[cfg(feature = "opentelemetry")]
162pub use opentelemetry_sdk;