pub struct ServiceRegistry {
services: Arc<RwLock<HashMap<String, LocalService>>>,
cert_manager: Option<Arc<Mutex<CertificateManager>>>,
}Expand description
Registry for tracking local HTTP/HTTPS services
Provides thread-safe methods to register and lookup services by domain name. Supports both HTTP and HTTPS protocols with automatic TLS certificate provisioning.
Fields§
§services: Arc<RwLock<HashMap<String, LocalService>>>Inner storage using Arc<RwLock> for thread-safe concurrent access
cert_manager: Option<Arc<Mutex<CertificateManager>>>Optional certificate manager for HTTPS support
Implementations§
Source§impl ServiceRegistry
impl ServiceRegistry
Sourcepub fn new() -> Self
pub fn new() -> Self
Create a new ServiceRegistry instance
Returns an empty registry ready to accept service registrations.
Sourcepub fn with_tls(cert_manager: Arc<Mutex<CertificateManager>>) -> Self
pub fn with_tls(cert_manager: Arc<Mutex<CertificateManager>>) -> Self
Create a new ServiceRegistry instance with TLS support
§Parameters
cert_manager- Certificate manager for provisioning TLS certificates
Returns a registry ready to accept both HTTP and HTTPS service registrations.
Sourcepub fn register(
&self,
name: String,
port: u16,
health_check_path: Option<String>,
)
pub fn register( &self, name: String, port: u16, health_check_path: Option<String>, )
Register a local HTTP service
§Parameters
name: Domain name (e.g., “code.editor.land”)port: Local port where the service is listeninghealth_check_path: Optional path for health check endpoint (e.g., “/health”)
§Example
registry.register("code.editor.land".to_string(), 8080, Some("/health".to_string())); Sourcepub fn register_with_options(
&self,
name: String,
port: u16,
tls_port: Option<u16>,
use_tls: bool,
health_check_path: Option<String>,
)
pub fn register_with_options( &self, name: String, port: u16, tls_port: Option<u16>, use_tls: bool, health_check_path: Option<String>, )
Register a local service with TLS options
§Parameters
name: Domain name (e.g., “code.editor.land”)port: Local HTTP porttls_port: Optional TLS port (defaults to port + 1000)use_tls: Whether to enable HTTPShealth_check_path: Optional path for health check endpoint
§Example
// Register with TLS enabled
registry.register_with_options(
"code.editor.land".to_string(),
8080,
None, // Use default TLS port (9080)
true,
Some("/health".to_string()),
);Sourcepub fn lookup(&self, name: &str) -> Option<LocalService>
pub fn lookup(&self, name: &str) -> Option<LocalService>
Sourcepub fn all_services(&self) -> Vec<LocalService>
pub fn all_services(&self) -> Vec<LocalService>
Sourcepub fn unregister(&self, name: &str) -> Option<LocalService>
pub fn unregister(&self, name: &str) -> Option<LocalService>
Sourcepub async fn get_tls_config(&self, name: &str) -> Option<Arc<ServerConfig>>
pub async fn get_tls_config(&self, name: &str) -> Option<Arc<ServerConfig>>
Trait Implementations§
Source§impl Clone for ServiceRegistry
impl Clone for ServiceRegistry
Source§fn clone(&self) -> ServiceRegistry
fn clone(&self) -> ServiceRegistry
Returns a duplicate of the value. Read more
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
source. Read moreAuto Trait Implementations§
impl Freeze for ServiceRegistry
impl RefUnwindSafe for ServiceRegistry
impl Send for ServiceRegistry
impl Sync for ServiceRegistry
impl Unpin for ServiceRegistry
impl UnsafeUnpin for ServiceRegistry
impl UnwindSafe for ServiceRegistry
Blanket Implementations§
§impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
§impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Convert
Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can
then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Convert
Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be
further downcast into Rc<ConcreteType> where ConcreteType implements Trait.§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
Convert
&Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &Any’s vtable from &Trait’s.§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
Convert
&mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &mut Any’s vtable from &mut Trait’s.§impl<T> DowncastSync for T
impl<T> DowncastSync for T
§impl<T> FutureExt for T
impl<T> FutureExt for T
§fn with_context(self, otel_cx: Context) -> WithContext<Self>
fn with_context(self, otel_cx: Context) -> WithContext<Self>
§fn with_current_context(self) -> WithContext<Self>
fn with_current_context(self) -> WithContext<Self>
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
§impl<T> IntoRequest<T> for T
impl<T> IntoRequest<T> for T
§fn into_request(self) -> Request<T>
fn into_request(self) -> Request<T>
Wrap the input message
T in a tonic::Request§impl<L> LayerExt<L> for L
impl<L> LayerExt<L> for L
§fn named_layer<S>(&self, service: S) -> Layered<<L as Layer<S>>::Service, S>where
L: Layer<S>,
fn named_layer<S>(&self, service: S) -> Layered<<L as Layer<S>>::Service, S>where
L: Layer<S>,
Applies the layer to a service and wraps it in [
Layered].