blob: 0875504302c5deec56f25d1e7a583602131638b9 [file] [log] [blame]
Abhay Kumara61c5222025-11-10 07:32:50 +00001// Copyright The OpenTelemetry Authors
2// SPDX-License-Identifier: Apache-2.0
3
4/*
5Package attribute provide several helper functions for some commonly used
6logic of processing attributes.
7*/
8package attribute // import "go.opentelemetry.io/otel/attribute/internal"
9
10import (
11 "reflect"
12)
13
14// BoolSliceValue converts a bool slice into an array with same elements as slice.
bseeniva0b9cbcb2026-02-12 19:11:11 +053015func BoolSliceValue(v []bool) any {
Abhay Kumara61c5222025-11-10 07:32:50 +000016 var zero bool
17 cp := reflect.New(reflect.ArrayOf(len(v), reflect.TypeOf(zero))).Elem()
18 reflect.Copy(cp, reflect.ValueOf(v))
19 return cp.Interface()
20}
21
22// Int64SliceValue converts an int64 slice into an array with same elements as slice.
bseeniva0b9cbcb2026-02-12 19:11:11 +053023func Int64SliceValue(v []int64) any {
Abhay Kumara61c5222025-11-10 07:32:50 +000024 var zero int64
25 cp := reflect.New(reflect.ArrayOf(len(v), reflect.TypeOf(zero))).Elem()
26 reflect.Copy(cp, reflect.ValueOf(v))
27 return cp.Interface()
28}
29
30// Float64SliceValue converts a float64 slice into an array with same elements as slice.
bseeniva0b9cbcb2026-02-12 19:11:11 +053031func Float64SliceValue(v []float64) any {
Abhay Kumara61c5222025-11-10 07:32:50 +000032 var zero float64
33 cp := reflect.New(reflect.ArrayOf(len(v), reflect.TypeOf(zero))).Elem()
34 reflect.Copy(cp, reflect.ValueOf(v))
35 return cp.Interface()
36}
37
38// StringSliceValue converts a string slice into an array with same elements as slice.
bseeniva0b9cbcb2026-02-12 19:11:11 +053039func StringSliceValue(v []string) any {
Abhay Kumara61c5222025-11-10 07:32:50 +000040 var zero string
41 cp := reflect.New(reflect.ArrayOf(len(v), reflect.TypeOf(zero))).Elem()
42 reflect.Copy(cp, reflect.ValueOf(v))
43 return cp.Interface()
44}
45
46// AsBoolSlice converts a bool array into a slice into with same elements as array.
bseeniva0b9cbcb2026-02-12 19:11:11 +053047func AsBoolSlice(v any) []bool {
Abhay Kumara61c5222025-11-10 07:32:50 +000048 rv := reflect.ValueOf(v)
49 if rv.Type().Kind() != reflect.Array {
50 return nil
51 }
52 cpy := make([]bool, rv.Len())
53 if len(cpy) > 0 {
54 _ = reflect.Copy(reflect.ValueOf(cpy), rv)
55 }
56 return cpy
57}
58
59// AsInt64Slice converts an int64 array into a slice into with same elements as array.
bseeniva0b9cbcb2026-02-12 19:11:11 +053060func AsInt64Slice(v any) []int64 {
Abhay Kumara61c5222025-11-10 07:32:50 +000061 rv := reflect.ValueOf(v)
62 if rv.Type().Kind() != reflect.Array {
63 return nil
64 }
65 cpy := make([]int64, rv.Len())
66 if len(cpy) > 0 {
67 _ = reflect.Copy(reflect.ValueOf(cpy), rv)
68 }
69 return cpy
70}
71
72// AsFloat64Slice converts a float64 array into a slice into with same elements as array.
bseeniva0b9cbcb2026-02-12 19:11:11 +053073func AsFloat64Slice(v any) []float64 {
Abhay Kumara61c5222025-11-10 07:32:50 +000074 rv := reflect.ValueOf(v)
75 if rv.Type().Kind() != reflect.Array {
76 return nil
77 }
78 cpy := make([]float64, rv.Len())
79 if len(cpy) > 0 {
80 _ = reflect.Copy(reflect.ValueOf(cpy), rv)
81 }
82 return cpy
83}
84
85// AsStringSlice converts a string array into a slice into with same elements as array.
bseeniva0b9cbcb2026-02-12 19:11:11 +053086func AsStringSlice(v any) []string {
Abhay Kumara61c5222025-11-10 07:32:50 +000087 rv := reflect.ValueOf(v)
88 if rv.Type().Kind() != reflect.Array {
89 return nil
90 }
91 cpy := make([]string, rv.Len())
92 if len(cpy) > 0 {
93 _ = reflect.Copy(reflect.ValueOf(cpy), rv)
94 }
95 return cpy
96}