slim_config/server_handler.rs
1// Copyright AGNTCY Contributors (https://github.com/agntcy)
2// SPDX-License-Identifier: Apache-2.0
3
4//! Transport-agnostic server handler.
5//!
6//! Implementations supply only the transport adapters they care about; the
7//! correct one is picked by [`crate::server::ServerConfig::run_server`] based
8//! on `config.transport`. Adding a new transport means adding a method to
9//! this trait — existing handlers stay source-compatible thanks to the
10//! `None` defaults.
11
12use crate::websocket::server::OnAcceptedWebSocket;
13
14pub trait ServerHandler: Send + Sync + 'static {
15 /// gRPC transport: tonic `Routes` bundle to install on the server.
16 /// Default `None` means "this handler does not support gRPC" — running
17 /// against a gRPC `ServerConfig` will then surface
18 /// `ConfigError::HandlerMissingGrpcSupport`.
19 fn grpc_routes(&self) -> Option<tonic::service::Routes> {
20 None
21 }
22
23 /// WebSocket transport: per-connection callback invoked after a successful
24 /// upgrade. Same `None` semantics as [`Self::grpc_routes`].
25 fn on_websocket_accepted(&self) -> Option<OnAcceptedWebSocket> {
26 None
27 }
28}