Skip to content

Commit 3282314

Browse files
committed
feat: accept owned string for service'name and version
1 parent 3108365 commit 3282314

1 file changed

Lines changed: 22 additions & 16 deletions

File tree

init-tracing-opentelemetry/src/resource.rs

Lines changed: 22 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
use std::borrow::Cow;
2+
13
use opentelemetry::KeyValue;
24
// use opentelemetry_resource_detectors::OsResourceDetector;
35
use opentelemetry_sdk::{Resource, resource::ResourceDetector};
@@ -16,37 +18,43 @@ use opentelemetry_semantic_conventions::resource;
1618
/// ```
1719
#[derive(Debug, Default, Clone)]
1820
pub struct DetectResource {
19-
fallback_service_name: Option<&'static str>,
20-
fallback_service_version: Option<&'static str>,
21+
fallback_service_name: Option<Cow<'static, str>>,
22+
fallback_service_version: Option<Cow<'static, str>>,
2123
}
2224

2325
impl DetectResource {
2426
/// `service.name` is first extracted from environment variables
2527
/// (in this order) `OTEL_SERVICE_NAME`, `SERVICE_NAME`, `APP_NAME`.
2628
/// But a default value can be provided with this method.
2729
#[must_use]
28-
pub fn with_fallback_service_name(mut self, fallback_service_name: &'static str) -> Self {
29-
self.fallback_service_name = Some(fallback_service_name);
30+
pub fn with_fallback_service_name(
31+
mut self,
32+
fallback_service_name: impl Into<Cow<'static, str>>,
33+
) -> Self {
34+
self.fallback_service_name = Some(fallback_service_name.into());
3035
self
3136
}
3237

3338
/// `service.name` is first extracted from environment variables
3439
/// (in this order) `SERVICE_VERSION`, `APP_VERSION`.
3540
/// But a default value can be provided with this method.
3641
#[must_use]
37-
pub fn with_fallback_service_version(mut self, fallback_service_version: &'static str) -> Self {
38-
self.fallback_service_version = Some(fallback_service_version);
42+
pub fn with_fallback_service_version(
43+
mut self,
44+
fallback_service_version: impl Into<Cow<'static, str>>,
45+
) -> Self {
46+
self.fallback_service_version = Some(fallback_service_version.into());
3947
self
4048
}
4149

4250
#[must_use]
43-
pub fn build(&mut self) -> Resource {
51+
pub fn build(self) -> Resource {
4452
//Box::new(OsResourceDetector), //FIXME enable when available for opentelemetry >= 0.25
4553
//Box::new(ProcessResourceDetector),
4654
let rsrc = Resource::builder()
4755
.with_detector(Box::new(ServiceInfoDetector {
48-
fallback_service_name: self.fallback_service_name.take(),
49-
fallback_service_version: self.fallback_service_version.take(),
56+
fallback_service_name: self.fallback_service_name,
57+
fallback_service_version: self.fallback_service_version,
5058
}))
5159
.build();
5260
debug_resource(&rsrc);
@@ -62,8 +70,8 @@ pub fn debug_resource(rsrc: &Resource) {
6270

6371
#[derive(Debug)]
6472
pub struct ServiceInfoDetector {
65-
fallback_service_name: Option<&'static str>,
66-
fallback_service_version: Option<&'static str>,
73+
fallback_service_name: Option<Cow<'static, str>>,
74+
fallback_service_version: Option<Cow<'static, str>>,
6775
}
6876

6977
impl ResourceDetector for ServiceInfoDetector {
@@ -72,17 +80,15 @@ impl ResourceDetector for ServiceInfoDetector {
7280
.or_else(|_| std::env::var("SERVICE_NAME"))
7381
.or_else(|_| std::env::var("APP_NAME"))
7482
.ok()
75-
.or_else(|| {
76-
self.fallback_service_name
77-
.map(std::string::ToString::to_string)
78-
})
83+
.or_else(|| self.fallback_service_name.clone().map(|v| v.to_string()))
7984
.map(|v| KeyValue::new(resource::SERVICE_NAME, v));
8085
let service_version = std::env::var("SERVICE_VERSION")
8186
.or_else(|_| std::env::var("APP_VERSION"))
8287
.ok()
8388
.or_else(|| {
8489
self.fallback_service_version
85-
.map(std::string::ToString::to_string)
90+
.clone()
91+
.map(std::borrow::Cow::into_owned)
8692
})
8793
.map(|v| KeyValue::new(resource::SERVICE_VERSION, v));
8894
let mut resource = Resource::builder_empty();

0 commit comments

Comments
 (0)