use apollo_configuration::configuration;
#[configuration]
pub(crate) struct ConsoleExporterConfig {
pub(crate) format: OutputFormat,
pub(crate) target: ConsoleTarget,
}
impl ConsoleExporterConfig {
pub(crate) fn use_color(&self) -> bool {
use apollo_opentelemetry_stdout::__private::{
should_use_color_stderr, should_use_color_stdout,
};
match self.target {
ConsoleTarget::Stderr => should_use_color_stderr(),
ConsoleTarget::Stdout => should_use_color_stdout(),
}
}
}
#[configuration]
#[derive(Copy, PartialEq, Eq, Default)]
pub enum OutputFormat {
#[default]
Auto,
Pretty,
Json,
}
#[configuration]
#[derive(Copy, PartialEq, Eq, Default)]
pub(crate) enum ConsoleTarget {
#[default]
Stdout,
Stderr,
}
impl From<OutputFormat> for apollo_opentelemetry_stdout::__private::OutputFormat {
fn from(format: OutputFormat) -> Self {
match format {
OutputFormat::Auto => Self::Auto,
OutputFormat::Json => Self::Json,
OutputFormat::Pretty => Self::Pretty,
}
}
}
impl From<ConsoleTarget> for apollo_opentelemetry_stdout::__private::SharedWriter {
fn from(target: ConsoleTarget) -> Self {
match target {
ConsoleTarget::Stderr => Self::Stderr,
ConsoleTarget::Stdout => Self::Stdout,
}
}
}
#[cfg(test)]
mod tests {
use apollo_configuration::parse_yaml;
use crate::config::OpenTelemetryConfig;
#[test]
fn parse_console_exporter() {
let config: OpenTelemetryConfig = parse_yaml(
indoc::indoc! {"
tracer_provider:
processors:
- simple:
exporter:
console:
format: auto
target: stderr
"},
&Default::default(),
)
.unwrap();
assert!(!config.tracer_provider.processors.is_empty());
}
}