use crate::error::{ObservabilityError, Result};
#[derive(Debug, Clone)]
pub enum ExporterConfig {
Jaeger {
endpoint: String,
},
Zipkin {
endpoint: String,
},
Otlp {
endpoint: String,
},
Stdout,
}
impl ExporterConfig {
pub fn jaeger(endpoint: impl Into<String>) -> Self {
Self::Jaeger {
endpoint: endpoint.into(),
}
}
pub fn zipkin(endpoint: impl Into<String>) -> Self {
Self::Zipkin {
endpoint: endpoint.into(),
}
}
pub fn otlp(endpoint: impl Into<String>) -> Self {
Self::Otlp {
endpoint: endpoint.into(),
}
}
pub fn validate(&self) -> Result<()> {
match self {
ExporterConfig::Jaeger { endpoint } => {
if endpoint.is_empty() {
return Err(ObservabilityError::InvalidConfig(
"Jaeger endpoint cannot be empty".to_string(),
));
}
}
ExporterConfig::Zipkin { endpoint } => {
if endpoint.is_empty() {
return Err(ObservabilityError::InvalidConfig(
"Zipkin endpoint cannot be empty".to_string(),
));
}
}
ExporterConfig::Otlp { endpoint } => {
if endpoint.is_empty() {
return Err(ObservabilityError::InvalidConfig(
"OTLP endpoint cannot be empty".to_string(),
));
}
}
ExporterConfig::Stdout => {}
}
Ok(())
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_exporter_config() {
let config = ExporterConfig::jaeger("localhost:6831");
assert!(config.validate().is_ok());
let config = ExporterConfig::jaeger("");
assert!(config.validate().is_err());
}
}