Skip to main content

liminal_server/server/
connection.rs

1#[cfg(test)]
2#[path = "connection/anchor_settle_tests.rs"]
3mod anchor_settle_tests;
4#[path = "connection/apply.rs"]
5mod apply;
6mod broker_route;
7#[path = "connection/channel_registry.rs"]
8pub mod channel_registry;
9#[path = "connection/conversation.rs"]
10mod conversation;
11pub mod declared_holder;
12#[path = "connection/delivery.rs"]
13mod delivery;
14#[path = "connection/incarnation.rs"]
15mod incarnation;
16#[cfg(test)]
17#[path = "connection/incarnation_abandon_tests.rs"]
18mod incarnation_abandon_tests;
19#[cfg(test)]
20#[path = "connection/incarnation_start_tests.rs"]
21mod incarnation_start_tests;
22#[cfg(test)]
23#[path = "connection/incarnation_tests.rs"]
24mod incarnation_tests;
25mod lifecycle_route;
26mod link_route;
27#[path = "connection/loopback.rs"]
28mod loopback;
29#[path = "connection/notifier.rs"]
30pub mod notifier;
31#[path = "connection/outbound.rs"]
32mod outbound;
33#[path = "connection/participant_delivery.rs"]
34mod participant_delivery;
35#[cfg(test)]
36#[path = "connection/participant_only_services.rs"]
37pub(in crate::server) mod participant_only_services;
38#[cfg(test)]
39#[path = "connection/participant_runtime_tests.rs"]
40mod participant_runtime_tests;
41#[path = "connection/pending_reply.rs"]
42mod pending_reply;
43#[path = "connection/pre_admission.rs"]
44pub(crate) mod pre_admission;
45#[path = "connection/process.rs"]
46mod process;
47#[path = "connection/readiness_refusal.rs"]
48mod readiness_refusal;
49#[cfg(test)]
50#[path = "connection/readiness_refusal_tests.rs"]
51mod readiness_refusal_tests;
52#[path = "connection/reclaim_placement.rs"]
53pub(crate) mod reclaim_placement;
54#[cfg(test)]
55#[path = "connection/reclaim_placement_tests.rs"]
56mod reclaim_placement_tests;
57#[path = "connection/refusal.rs"]
58pub(crate) mod refusal;
59#[cfg(test)]
60#[path = "connection/refusal_tests.rs"]
61mod refusal_tests;
62mod reply_service;
63#[path = "connection/service_directory.rs"]
64mod service_directory;
65mod service_route;
66mod service_tap;
67#[path = "connection/services.rs"]
68pub mod services;
69#[cfg(test)]
70#[path = "connection/services_a1_dedup_tests.rs"]
71mod services_a1_dedup_tests;
72#[cfg(test)]
73#[path = "connection/services_adopt_config_tests.rs"]
74mod services_adopt_config_tests;
75#[path = "connection/services_cluster.rs"]
76mod services_cluster;
77#[cfg(test)]
78#[path = "connection/services_r5_tests.rs"]
79mod services_r5_tests;
80#[path = "connection/services_schema.rs"]
81mod services_schema;
82#[cfg(test)]
83mod services_tap_tests;
84#[cfg(test)]
85#[path = "connection/services_unresolved_restart_tests.rs"]
86mod services_unresolved_restart_tests;
87#[cfg(test)]
88#[path = "connection/services_unresolved_tests.rs"]
89mod services_unresolved_tests;
90#[path = "connection/state.rs"]
91mod state;
92#[path = "connection/supervisor.rs"]
93mod supervisor;
94#[cfg(test)]
95#[path = "connection/tests_no_path_refusal.rs"]
96mod tests_no_path_refusal;
97#[path = "connection/wake.rs"]
98pub(crate) mod wake;
99#[path = "connection/websocket.rs"]
100pub(crate) mod websocket;
101#[path = "connection/worker_front_door.rs"]
102mod worker_front_door;
103#[path = "connection/worker_route.rs"]
104mod worker_route;
105
106pub use channel_registry::{
107    CONSOLE_NAMESPACE_PREFIX, CONSOLE_TAP_PREFIX, ChannelAccessError, ChannelConfigField,
108    ChannelDescriptor, ChannelOrigin, ChannelRegistration, ChannelRegistryError, ChannelState,
109    ChannelStatus, MAX_CHANNELS_KEY, Registered, console_tap_target, is_console_subject,
110};
111pub use conversation::{ConnectionConversation, ConversationResource};
112// The in-process transport's public surface is exactly two names: the type an
113// embedded caller holds and the constructor that mints it. `LoopbackServerEnd`
114// is deliberately NOT re-exported — it is the half that touches the connection
115// machinery, so the private `loopback` module is its visibility ceiling and the
116// step-3 sites that need it (all of them inside `connection`) reach it as
117// `loopback::LoopbackServerEnd`.
118pub use loopback::{LoopbackClientEnd, LoopbackDuplex};
119pub use notifier::{CheckpointCrossing, ConnectionNotifier, CrossingBinding, CrossingRecipient};
120#[cfg(test)]
121pub(crate) const fn assert_held_heads_are_move_only() {
122    macro_rules! assert_not_impl {
123        ($type:ty: $trait:path) => {
124            const _: fn() = || {
125                struct Probe<T: ?Sized>(core::marker::PhantomData<T>);
126                trait AmbiguousIfImplemented<A> {
127                    fn probe() {}
128                }
129                impl<T: ?Sized> AmbiguousIfImplemented<()> for Probe<T> {}
130                impl<T: ?Sized + $trait> AmbiguousIfImplemented<u8> for Probe<T> {}
131                let _ = <Probe<$type> as AmbiguousIfImplemented<_>>::probe;
132            };
133        };
134    }
135    assert_not_impl!(participant_delivery::HeldParticipantHead: Clone);
136    assert_not_impl!(participant_delivery::HeldParticipantHead: Copy);
137    assert_not_impl!(participant_delivery::HeldObserverHead: Clone);
138    assert_not_impl!(participant_delivery::HeldObserverHead: Copy);
139}
140pub use services::{
141    ChannelCluster, ChannelOperation, ConnectionServices, ConnectionSubscription,
142    LiminalConnectionServices, PublishOutcome, build_connection_services,
143};
144pub use supervisor::ConnectionSupervisor;
145pub use supervisor::builder::ConnectionSupervisorBuilder;
146#[cfg(feature = "test-support")]
147pub(crate) use supervisor::builder::configured_lys;
148pub(crate) use supervisor::builder::{LysInstall, configured_lys_after_bind, lys_ask_runtime};
149#[cfg(feature = "test-support")]
150pub use supervisor::console_for_tests::ConsoleForTests;
151pub use supervisor::context_watch::start_context_watch;
152pub use supervisor::handle::{ConnectionHandle, PushReplyAwaiter};
153pub(crate) use wake::ReadyWaker;
154#[cfg(test)]
155pub(in crate::server) use websocket::bound_tests as websocket_bound_tests;
156pub use websocket::{BoundWebSocket, WebSocketListener};
157pub use worker_front_door::WorkerFrontDoorServices;