use crate::shared::{EnhancedMiddlewareChain, MetricsMiddleware};
use std::sync::Arc;
#[derive(Debug, Clone)]
pub struct PresetConfig {
service_name: String,
}
impl PresetConfig {
pub fn new(service_name: impl Into<String>) -> Self {
Self {
service_name: service_name.into(),
}
}
pub fn stdio() -> Self {
Self::new("pmcp-stdio-client")
}
pub fn http() -> Self {
Self::new("pmcp-http-client")
}
pub fn websocket() -> Self {
Self::new("pmcp-websocket-client")
}
pub fn build_protocol_chain(&self) -> EnhancedMiddlewareChain {
let mut chain = EnhancedMiddlewareChain::new();
chain.add(Arc::new(MetricsMiddleware::new(self.service_name.clone())));
chain
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_stdio_preset() {
let preset = PresetConfig::stdio();
assert_eq!(preset.service_name, "pmcp-stdio-client");
let _chain = preset.build_protocol_chain();
}
#[test]
fn test_http_preset() {
let preset = PresetConfig::http();
assert_eq!(preset.service_name, "pmcp-http-client");
let _chain = preset.build_protocol_chain();
}
#[test]
fn test_websocket_preset() {
let preset = PresetConfig::websocket();
assert_eq!(preset.service_name, "pmcp-websocket-client");
let _chain = preset.build_protocol_chain();
}
#[test]
fn test_custom_service_name() {
let preset = PresetConfig::new("my-custom-service");
assert_eq!(preset.service_name, "my-custom-service");
let _chain = preset.build_protocol_chain();
}
}