Skip to main content

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}