use super::{TelemetryLayerConfig, TelemetryService};
use std::sync::Arc;
use tower::Layer;
#[derive(Debug, Clone)]
pub struct TelemetryLayer {
config: Arc<TelemetryLayerConfig>,
}
impl TelemetryLayer {
#[must_use]
pub fn new(config: TelemetryLayerConfig) -> Self {
Self {
config: Arc::new(config),
}
}
#[must_use]
pub fn default_layer() -> Self {
Self::new(TelemetryLayerConfig::default())
}
#[must_use]
pub fn config(&self) -> &TelemetryLayerConfig {
&self.config
}
}
impl Default for TelemetryLayer {
fn default() -> Self {
Self::default_layer()
}
}
impl<S> Layer<S> for TelemetryLayer {
type Service = TelemetryService<S>;
fn layer(&self, inner: S) -> Self::Service {
TelemetryService::new(inner, Arc::clone(&self.config))
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_layer_creation() {
let layer = TelemetryLayer::new(TelemetryLayerConfig::default());
assert_eq!(layer.config().service_name, "turbomcp-service");
}
#[test]
fn test_layer_default() {
let layer = TelemetryLayer::default();
assert!(layer.config().record_timing);
}
}