From 59862e42577d84d110f449347b06fd57b5f32f3a Mon Sep 17 00:00:00 2001 From: Trask Stalnaker Date: Wed, 4 Dec 2024 13:33:58 -0800 Subject: [PATCH] Add convenience value builder --- .../io/opentelemetry/api/common/Value.java | 5 +++ .../api/common/ValueBuilder.java | 33 +++++++++++++++++++ .../api/common/ValueBuilderImpl.java | 25 ++++++++++++++ 3 files changed, 63 insertions(+) create mode 100644 api/all/src/main/java/io/opentelemetry/api/common/ValueBuilder.java create mode 100644 api/all/src/main/java/io/opentelemetry/api/common/ValueBuilderImpl.java diff --git a/api/all/src/main/java/io/opentelemetry/api/common/Value.java b/api/all/src/main/java/io/opentelemetry/api/common/Value.java index a29be801e27..01b8f994389 100644 --- a/api/all/src/main/java/io/opentelemetry/api/common/Value.java +++ b/api/all/src/main/java/io/opentelemetry/api/common/Value.java @@ -84,6 +84,11 @@ static Value> of(Map> value) { return KeyValueList.createFromMap(value); } + /** Returns a new {@link ValueBuilder} instance for creating an arbitrary {@link Value}. */ + static ValueBuilder builder() { + return new ValueBuilderImpl(); + } + /** Returns the type of this {@link Value}. Useful for building switch statements. */ ValueType getType(); diff --git a/api/all/src/main/java/io/opentelemetry/api/common/ValueBuilder.java b/api/all/src/main/java/io/opentelemetry/api/common/ValueBuilder.java new file mode 100644 index 00000000000..5da6ed477e3 --- /dev/null +++ b/api/all/src/main/java/io/opentelemetry/api/common/ValueBuilder.java @@ -0,0 +1,33 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + +package io.opentelemetry.api.common; + +public interface ValueBuilder { + + default ValueBuilder put(String key, String value) { + put(key, Value.of(value)); + return this; + } + + default ValueBuilder put(String key, long value) { + put(key, Value.of(value)); + return this; + } + + default ValueBuilder put(String key, double value) { + put(key, Value.of(value)); + return this; + } + + default ValueBuilder put(String key, boolean value) { + put(key, Value.of(value)); + return this; + } + + ValueBuilder put(String key, Value value); + + Value build(); +} diff --git a/api/all/src/main/java/io/opentelemetry/api/common/ValueBuilderImpl.java b/api/all/src/main/java/io/opentelemetry/api/common/ValueBuilderImpl.java new file mode 100644 index 00000000000..0d2e784736b --- /dev/null +++ b/api/all/src/main/java/io/opentelemetry/api/common/ValueBuilderImpl.java @@ -0,0 +1,25 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + +package io.opentelemetry.api.common; + +import java.util.ArrayList; +import java.util.List; + +class ValueBuilderImpl implements ValueBuilder { + + private final List keyValues = new ArrayList<>(); + + @Override + public ValueBuilder put(String key, Value value) { + keyValues.add(KeyValue.of(key, value)); + return this; + } + + @Override + public Value build() { + return Value.of(keyValues.toArray(new KeyValue[0])); + } +}