extern crate alloc;
#[cfg(test)]
extern crate self as proxima;
pub mod app;
pub mod app_builder;
pub mod app_config;
pub use proxima_core::buffer as buffer_pool;
pub use proxima_primitives::block_on;
pub use proxima_primitives::pipe::body;
#[cfg(feature = "recording")]
pub use proxima_recording::pipe::causality;
pub mod client;
pub use proxima_codec as codec;
pub use proxima_codec::factory as codec_factory;
pub use proxima_config as config_format;
pub use proxima_patterns::control_plane;
pub use proxima_patterns::middleware::context_inject;
pub mod daemon_control_plane;
#[cfg(feature = "recording")]
pub mod determinism;
pub use proxima_core as error;
#[cfg(any(
feature = "http1",
feature = "http1-native",
feature = "http-prime-deps"
))]
pub use proxima_http::http1::h1;
#[cfg(any(
feature = "http1",
feature = "http1-native",
feature = "http-prime-deps"
))]
pub use proxima_http::http1::h1_body;
#[cfg(any(
feature = "http1",
feature = "http1-native",
feature = "http-prime-deps"
))]
pub use proxima_http::http1::h1_connection;
#[cfg(any(
feature = "http1",
feature = "http1-native",
feature = "http-prime-deps"
))]
pub use proxima_http::http1::h1_response;
#[cfg(feature = "http1")]
pub use proxima_http::http1::hyper_body;
#[cfg(feature = "tcp")]
pub use proxima_protocols::json_framing as framing;
#[cfg(feature = "http-prime-deps")]
pub use proxima_http::http1::{
H1ClientConfig, H1ClientUpstream, ResponseBodyMode, ResponseHandling, ResponseHandlingConfig,
ResponseHeaderMode,
};
pub use proxima_listen as listen;
pub use proxima_patterns::kv;
pub use proxima_listen::handle as listen_handle;
pub mod listener;
#[cfg(all(
feature = "http-prime-deps",
any(target_os = "linux", target_os = "macos", target_os = "windows")
))]
pub use proxima_net::prime::PrimeTcpUpstream;
pub use proxima_primitives::pipe::header_list;
pub mod load;
pub use proxima_net::packet;
pub use proxima_primitives::pipe::path_pattern;
pub use proxima_primitives::pipe::routing as mount;
#[cfg(feature = "amqp-listener")]
pub use proxima_protocols::amqp;
#[cfg(feature = "dns-substrate")]
pub use proxima_protocols::dns;
#[cfg(feature = "grpc-framing")]
pub use proxima_protocols::grpc_framing as grpc;
#[cfg(feature = "kafka-listener")]
pub use proxima_protocols::kafka;
#[cfg(feature = "memcached-listener")]
pub use proxima_protocols::memcached;
#[cfg(feature = "mqtt-listener")]
pub use proxima_protocols::mqtt;
#[cfg(feature = "protobuf-wire")]
pub use proxima_protocols::protobuf_wire as protobuf;
pub use proxima_protocols::proxy_protocol;
#[cfg(feature = "websocket-frame")]
pub use proxima_protocols::websocket_frame;
pub use proxima_telemetry::log_buffer;
#[cfg(feature = "recording")]
pub mod recording;
pub use proxima_primitives::pipe::request;
pub mod runtime;
pub mod scenarios;
pub use proxima_config::schema;
pub use proxima_core::time;
#[cfg(feature = "http2")]
pub use proxima_http::http2 as h2;
#[cfg(feature = "http3")]
pub use proxima_http::http3 as h3;
pub use proxima_patterns::balancer::selection;
pub use proxima_primitives::pipe;
#[cfg(feature = "sync-wrappers")]
pub use proxima_primitives::sync;
pub use proxima_primitives::sync::shutdown;
pub use proxima_primitives::sync::task;
#[cfg(feature = "http3")]
pub use proxima_quic as quic;
pub mod server;
pub mod settings;
pub use proxima_config::store as state_store;
pub use proxima_config::sugar;
#[cfg(feature = "http1")]
pub use proxima_http::http1::shared_http;
pub use proxima_primitives::pipe::capture_surface;
pub use proxima_primitives::pipe::endpoint;
pub use proxima_primitives::pipe::swap_registry as swap;
pub use proxima_primitives::pipe::telemetry_surface;
pub use proxima_primitives::stream;
pub use proxima_telemetry as telemetry;
#[cfg(all(
feature = "otlp-http",
feature = "http-prime",
any(target_os = "linux", target_os = "macos", target_os = "windows")
))]
pub mod otlp;
#[cfg(any(feature = "http1", feature = "http-prime-deps"))]
pub use proxima_http::templates;
#[cfg(feature = "tls")]
pub use proxima_tls as tls;
pub mod tracing_init;
pub mod tutorial_doctests;
pub use proxima_patterns::balancer::upstream_ref;
pub use proxima_patterns::kv::write_back;
pub use proxima_primitives::pipe::pipe_factory;
pub use proxima_primitives::pipe::upgrade;
#[doc(hidden)]
pub use tutorial_doctests::tutorial_gate_prelude;
pub mod listeners;
pub mod middlewares;
#[cfg(feature = "tokio")]
pub mod pipelines;
pub mod upstreams;
pub mod verify;
pub use app::{
App, AppPipeBuilder, IntoMountTarget, MountTarget, RunConfig, Shutdown, offline_runtime,
};
#[cfg(feature = "recording")]
pub use causality::{ByteRange, Causal, CausalEdge, CausalIndex};
#[cfg(feature = "recording")]
pub use determinism::check_determinism;
#[cfg(feature = "rayon")]
pub use runtime::RayonBackgroundPool;
#[cfg(feature = "runtime-tokio")]
pub use runtime::TokioPerCoreRuntime;
pub use runtime::{BackgroundHandle, BackgroundPool, CoreId, Runtime};
#[cfg(all(
feature = "runtime-prime-executor",
feature = "runtime-prime-inbox-alloc",
feature = "runtime-prime-reactor",
feature = "runtime-prime-bgpool"
))]
pub mod prime {
pub use crate::runtime::{BackgroundHandle, BackgroundPool, CoreId, Runtime, SpawnError};
pub use prime::config::{Affinity, Builder, CoreSelection, PoolKind, PrimeConfig};
pub use prime::os::runtime::PrimeRuntime;
}
#[cfg(any(feature = "macros", test))]
pub use proxima_macros::test;
#[cfg(any(feature = "macros", test))]
pub use proxima_macros::main;
#[cfg(any(feature = "macros", test))]
pub use proxima_macros::fixture;
#[cfg(any(feature = "macros", test))]
pub use proxima_macros::piped;
#[cfg(any(feature = "macros", test))]
pub use proxima_macros::instrument;
#[cfg(any(feature = "macros", test))]
pub use proxima_macros::span;
#[cfg(any(feature = "macros", test))]
pub use proxima_macros::pipe;
#[cfg(any(feature = "macros", test))]
pub use proxima_macros::filter;
#[cfg(any(feature = "macros", test))]
pub use proxima_macros::fanout;
#[cfg(any(feature = "macros", test))]
pub use proxima_macros::fanin;
#[cfg(any(test, feature = "test-support", feature = "macros"))]
pub mod test_support;
#[cfg(any(test, feature = "test-support", feature = "macros"))]
pub mod cassette_config;
pub use app_builder::AppBuilder;
pub use body::{ChunkStream, RequestStream, ResponseStream};
pub use buffer_pool::{BufferPool, DEFAULT_BUFFER_BYTES, DEFAULT_POOL_PER_WORKER, PooledBuf};
pub use client::{
Client, ClientBuilder, ClientProtocol, ClientProtocolExt, ClientSecurityExt,
ClientTransportExt, FramedClient, RequestBuilder as ClientRequestBuilder,
Response as ClientResponse,
};
pub use codec::{BytesPassthrough, FrameCodec, JsonCodec, MessageCodec, StatefulCodec, WireCodec};
pub use codec_factory::{
BytesPassthroughCodecFactory, BytesPassthroughDynCodec, CodecBuildFuture, CodecFactory,
CodecRegistry, DynCodec, DynCodecFactory, DynCodecHandle, JsonCodecFactory, JsonDynCodec,
};
pub use config_format::{
ConfigFormatFactory, ConfigFormatRegistry, DynConfigFormatFactory, Json5ConfigFormat,
JsonConfigFormat, RonConfigFormat, TomlConfigFormat, XmlConfigFormat, YamlConfigFormat,
default_config_format_registry,
};
pub use control_plane::{
ControlPlane, ControlPlanePipe, DynControlPlane, PipeState, PipeStatus, StaticControlPlane,
};
pub use daemon_control_plane::{DaemonControlPlane, PipeConfig};
pub use error::{ProximaError, ProximaResult};
pub use bytes::Bytes;
pub use header_list::{HeaderList, IntoHeaderBytes};
pub use kv::{CacheEntry, EvictionPolicy, KvCaps, KvHandle};
pub use listen::{
AnyProtocol, ClassifyOutcome, ListenProtocol, ListenProtocolFluent, ListenRegistry,
ProbeVerdict, ServeBuilder, ServeContext, ThreadLocalListenProtocol, ThreadLocalListenRegistry,
};
pub use listen_handle::{Listener, ListenerHandle, ListenerSpec, ShutdownPolicy};
pub use listener::{
ListenerBuilder, ListenerBuilderEntry, ListenerProtocolExt, ListenerTransportExt,
};
#[cfg(feature = "tokio")]
pub use listeners::McpListenProtocol;
#[cfg(any(feature = "http1", feature = "http1-native"))]
pub use listeners::{HttpListenProtocol, serve_h1_connection};
pub use load::{LoadContext, Spec, load};
pub use log_buffer::{DEFAULT_LOG_BUFFER_CAPACITY, LiveTailReceiver, LogBuffer, LogBufferRegistry};
pub use middlewares::auth::{Auth, AuthFactory};
pub use middlewares::diff::{Diff, diff_handle};
pub use middlewares::isolate::{Isolate, IsolateFactory};
pub use middlewares::rate_limit::{
ExceededAction, KeyExtractor, KeyOf, RateLimit, RateLimitCaps, RateLimitFactory,
TokenBucketConfig,
};
pub use middlewares::retry::{Retry, RetryBudget, RetryFactory, RetryPredicate};
pub use middlewares::transform::{RequestOp, ResponseOp, Transform, TransformFactory};
pub use middlewares::write_back::{WriteBack, WriteBackTarget};
pub use mount::{MethodFilter, Mount, Router};
pub use packet::{Packet, PacketListener, PacketListenerExt};
pub use path_pattern::PathPattern;
pub use pipe::{
Handler, PipeHandle, ThreadLocalHandler, ThreadLocalPipeHandle, into_handle,
into_thread_local_handle,
};
pub use proxima_patterns::middleware::context_inject::ContextInjector;
pub use proxima_primitives::pipe::RoutingPipe;
pub use proxima_primitives::pipe::SendPipe;
#[cfg(feature = "recording")]
pub use recording::{
AccumulatingSink, AppendFuture as RecordingAppendFuture, AppendLog, BinSource,
BinSourceFactory, BoundedRecordingSink, CacheOutcome, DeferredRuntime, DropReason,
DynRecordingSink, DynRecordingSource, DynRecordingSourceFactory, EventSource, EventTap,
FailMode, FanOut, FormatKind, HttpEvent, INDEX_RECORD_BYTES, IndexReader, IndexRecord,
IndexWriter, InteractionId, JsonlSource, JsonlSourceFactory, LazyFanOut, PipelineEvent,
PipelineOutcome, ProcessEvent, ProtocolEvent, RECORD_DROP_METRIC, RECORDING_FORMAT_VERSION,
RecordMeta, RecordingEvent, RecordingEventStream, RecordingSink, RecordingSource,
RecordingSourceFactory, RecordingSourceRegistry, ReplayLog,
RequestHeader as RecordingRequestHeader, SinkSpec, SourceBuildFuture, TerminalSignal,
deferred_runtime,
};
pub use request::{Request, RequestBuilder, RequestContext, Response};
pub use scenarios::{
CompareOp, Expectation, OrchestrationMode, Scenario, ScenarioPipeSpec, WorkloadSpec,
};
#[cfg(feature = "tokio")]
pub use scenarios::{ScenarioReport, run_scenario};
pub use schema::{
EmptyResolver, EnumVariant, FieldFlags, PathSegment, Schema, SchemaRegistry, SchemaResolver,
StringFormat, StructField, ValidationError,
};
pub use selection::{
DispatchOutcome, DynSelection, Fallthrough, LeastConn, MissPolicy, MissReason, RoundRobin,
Selection, SelectionHandle, ThreadLocalDynSelection, ThreadLocalSelection,
ThreadLocalSelectionHandle, WeightedLeastConn, WeightedRoundRobin,
};
pub use swap::{SwapRegistry, SwappablePipe};
pub use pipe_factory::{DynPipeFactory, PipeFactory, PipeFactoryRegistry};
#[cfg(feature = "tokio")]
pub use pipelines::{
DynPipelineControlPlane, FsPipelineControlPlane, InMemoryPipelineControlPlane,
PipelineControlPlane, PipelineControlPlanePipe, PipelineExecutor, PipelineRunReport,
PipelineSpec, PipelineStatus, PipelineSubmission, PipelineSummary, StageReport, StageSpec,
};
pub use settings::{BearerAuth, ClientAuth, Composable, HttpListener, HttpUpstream, OauthAuth};
#[cfg(feature = "http1")]
pub use shared_http::{SharedHttpClient, SharedHyperClient};
pub use stream::{
Accept, BindAddr, Connect, PeerInfo, StreamConnection, StreamListener, StreamListenerExt,
StreamUpstream, StreamUpstreamExt,
};
pub use sugar::desugar;
pub use proxima_primitives::transport;
pub use proxima_primitives::transport::{
DEFAULT_REPLAY_CAP_BYTES, Replay, ReplayEvent, tap_complete, tap_complete_with_size,
};
pub use sugar::SpecBuilder;
pub use telemetry::{
HistogramSummary, Labels, Metrics, MetricsSnapshot, NoopTelemetry, Telemetry, TelemetryHandle,
};
#[cfg(any(feature = "http1", feature = "http-prime-deps"))]
pub use templates::{TemplateContext, expand as expand_template};
#[allow(deprecated)]
pub use tracing_init::{LogFormat, init_tracing, init_tracing_default};
pub use tracing_init::{init_telemetry, init_telemetry_with};
pub use upgrade::{
HijackStream, HijackedSocket, LocalHijackStream, LocalHijackedSocket, LocalUpgradeFuture,
LocalUpgradeHandler, UpgradeFuture, UpgradeHandler,
};
pub use upstream_ref::{
CallTracker, OutlierPolicy, ThreadLocalUpstreamRef, UpstreamMetrics, UpstreamRef,
};
pub use upstreams::{
CallbackFn, CallbackFuture, CallbackPipeFactory, CallbackRegistry, CallbackUpstream,
DynCallbackFn, KvCache, KvCacheFactory, KvFile, KvFileFactory, SynthPipeFactory, SynthUpstream,
};
#[cfg(feature = "tokio")]
pub use upstreams::{
ProcessPipeFactory, ProcessSpec, ProcessUpstream, ReadyProbe, RestartPolicy, ShutdownSignal,
};
#[cfg(unix)]
pub use upstreams::{ProcessRpcPipeFactory, ProcessRpcSpec, ProcessRpcUpstream};
#[cfg(feature = "recording")]
pub use upstreams::{RecordPipeFactory, RecordUpstream, ReplayPipeFactory, ReplayUpstream};
pub use write_back::{WriteBackConditions, WriteBackRule};
pub mod prelude {
pub use crate::{
AnyProtocol, App, ClassifyOutcome, Client, ClientBuilder, ClientProtocol,
ClientProtocolExt, ClientSecurityExt, ClientTransportExt, Listener, ListenerBuilder,
ListenerBuilderEntry, ListenerProtocolExt, ListenerTransportExt, ProbeVerdict,
};
}
#[macro_export]
macro_rules! block_on {
($rt:expr, $fut:expr) => {
$crate::runtime::block_on(&$rt, $fut)
};
($fut:expr) => {
$crate::block_on($fut)
};
}
#[macro_export]
macro_rules! run {
(prime, $fut:expr) => {
$crate::runtime::run_prime($fut)
};
(tokio, $fut:expr) => {
$crate::runtime::run_tokio(true, ::core::option::Option::None, $fut)
};
($fut:expr) => {
$crate::runtime::run($fut)
};
}
#[cfg(test)]
#[allow(clippy::disallowed_methods, clippy::unwrap_used, clippy::expect_used)]
mod drive_macro_tests {
#[test]
fn block_on_bang_no_runtime_drives_to_completion() {
let output: u32 = crate::block_on!(async { 40 + 2 });
assert_eq!(output, 42);
}
#[test]
fn run_bang_adaptive_boots_and_drives() {
let output = crate::run!(async { 40 + 2 }).expect("adaptive run drives the body");
assert_eq!(output, 42);
}
#[cfg(feature = "tokio")]
#[test]
fn run_bang_tokio_arm_boots_and_drives() {
let output = crate::run!(tokio, async { 40 + 2 }).expect("tokio run drives the body");
assert_eq!(output, 42);
}
#[cfg(all(
feature = "runtime-prime-executor",
feature = "runtime-prime-inbox-alloc",
feature = "runtime-prime-reactor",
feature = "runtime-prime-bgpool"
))]
#[test]
fn run_bang_prime_arm_boots_and_drives() {
let output = crate::run!(prime, async { 40 + 2 }).expect("prime run drives the body");
assert_eq!(output, 42);
}
#[cfg(all(
feature = "runtime-prime-executor",
feature = "runtime-prime-inbox-alloc",
feature = "runtime-prime-reactor",
feature = "runtime-prime-bgpool"
))]
#[test]
fn block_on_bang_runtime_arm_drives_on_held_runtime() {
let runtime = crate::runtime::PrimeRuntime::new(1).expect("build a one-core prime runtime");
let output = crate::block_on!(runtime, async { 40 + 2 })
.expect("block_on drives the body on the held runtime");
assert_eq!(output, 42);
}
}