use std::time::Duration;
#[derive(Debug, PartialEq)]
pub struct TelemetryConfig {
i_key: String,
endpoint: String,
interval: Duration,
}
impl TelemetryConfig {
pub fn new(i_key: String) -> Self {
TelemetryConfig::builder().i_key(i_key).build()
}
pub fn builder() -> DefaultTelemetryConfigBuilder {
DefaultTelemetryConfigBuilder::default()
}
pub fn i_key(&self) -> &str {
&self.i_key
}
pub fn endpoint(&self) -> &str {
&self.endpoint
}
pub fn interval(&self) -> Duration {
self.interval
}
}
#[derive(Default)]
pub struct DefaultTelemetryConfigBuilder;
impl DefaultTelemetryConfigBuilder {
pub fn i_key<I>(self, i_key: I) -> TelemetryConfigBuilder
where
I: Into<String>,
{
TelemetryConfigBuilder {
i_key: i_key.into(),
endpoint: "https://dc.services.visualstudio.com/v2/track".into(),
interval: Duration::from_secs(2),
}
}
}
pub struct TelemetryConfigBuilder {
i_key: String,
endpoint: String,
interval: Duration,
}
impl TelemetryConfigBuilder {
pub fn i_key<I>(mut self, i_key: I) -> Self
where
I: Into<String>,
{
self.i_key = i_key.into();
self
}
pub fn endpoint<E>(mut self, endpoint: E) -> Self
where
E: Into<String>,
{
self.endpoint = endpoint.into();
self
}
pub fn interval(mut self, interval: Duration) -> Self {
self.interval = interval;
self
}
pub fn build(self) -> TelemetryConfig {
TelemetryConfig {
i_key: self.i_key,
endpoint: self.endpoint,
interval: self.interval,
}
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn it_creates_config_with_default_values() {
let config = TelemetryConfig::new("instrumentation key".into());
assert_eq!(
TelemetryConfig {
i_key: "instrumentation key".into(),
endpoint: "https://dc.services.visualstudio.com/v2/track".into(),
interval: Duration::from_secs(2)
},
config
)
}
#[test]
fn it_builds_config_with_custom_parameters() {
let config = TelemetryConfig::builder()
.i_key("instrumentation key")
.endpoint("https://google.com")
.interval(Duration::from_micros(100))
.build();
assert_eq!(
TelemetryConfig {
i_key: "instrumentation key".into(),
endpoint: "https://google.com".into(),
interval: Duration::from_micros(100)
},
config
);
}
}