use crate::preview::PreviewFn;
use std::collections::HashMap;
use std::sync::Arc;
#[derive(Clone, Default)]
pub struct InstrumentationOptions {
pub record_metrics: bool,
pub preview_limit: usize,
pub preview_fn: Option<Arc<PreviewFn>>,
pub custom_fields: HashMap<String, String>,
}
impl std::fmt::Debug for InstrumentationOptions {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
f.debug_struct("InstrumentationOptions")
.field("record_metrics", &self.record_metrics)
.field("preview_limit", &self.preview_limit)
.field(
"preview_fn",
&if self.preview_fn.is_some() {
"Some(PreviewFn)"
} else {
"None"
},
)
.field("custom_fields", &self.custom_fields)
.finish()
}
}
impl InstrumentationOptions {
pub fn builder() -> InstrumentationOptionsBuilder {
InstrumentationOptionsBuilder::default()
}
}
#[derive(Default)]
pub struct InstrumentationOptionsBuilder {
record_metrics: bool,
preview_limit: usize,
preview_fn: Option<Arc<PreviewFn>>,
custom_fields: HashMap<String, String>,
}
impl InstrumentationOptionsBuilder {
pub fn record_metrics(mut self, record: bool) -> Self {
self.record_metrics = record;
self
}
pub fn preview_limit(mut self, limit: usize) -> Self {
self.preview_limit = limit;
self
}
pub fn preview_fn(mut self, func: Arc<PreviewFn>) -> Self {
self.preview_fn = Some(func);
self
}
pub fn add_custom_field<K: Into<String>, V: Into<String>>(
mut self,
key: K,
value: V,
) -> Self {
self.custom_fields.insert(key.into(), value.into());
self
}
pub fn custom_fields(mut self, fields: HashMap<String, String>) -> Self {
self.custom_fields = fields;
self
}
pub fn build(self) -> InstrumentationOptions {
InstrumentationOptions {
record_metrics: self.record_metrics,
preview_limit: self.preview_limit,
preview_fn: self.preview_fn,
custom_fields: self.custom_fields,
}
}
}