| // Copyright The OpenTelemetry Authors |
| // SPDX-License-Identifier: Apache-2.0 |
| |
| package telemetry // import "go.opentelemetry.io/otel/trace/internal/telemetry" |
| |
| import ( |
| "encoding/json" |
| "strconv" |
| ) |
| |
| // protoInt64 represents the protobuf encoding of integers which can be either |
| // strings or integers. |
| type protoInt64 int64 |
| |
| // Int64 returns the protoInt64 as an int64. |
| func (i *protoInt64) Int64() int64 { return int64(*i) } |
| |
| // UnmarshalJSON decodes both strings and integers. |
| func (i *protoInt64) UnmarshalJSON(data []byte) error { |
| if data[0] == '"' { |
| var str string |
| if err := json.Unmarshal(data, &str); err != nil { |
| return err |
| } |
| parsedInt, err := strconv.ParseInt(str, 10, 64) |
| if err != nil { |
| return err |
| } |
| *i = protoInt64(parsedInt) |
| } else { |
| var parsedInt int64 |
| if err := json.Unmarshal(data, &parsedInt); err != nil { |
| return err |
| } |
| *i = protoInt64(parsedInt) |
| } |
| return nil |
| } |
| |
| // protoUint64 represents the protobuf encoding of integers which can be either |
| // strings or integers. |
| type protoUint64 uint64 |
| |
| // Int64 returns the protoUint64 as a uint64. |
| func (i *protoUint64) Uint64() uint64 { return uint64(*i) } |
| |
| // UnmarshalJSON decodes both strings and integers. |
| func (i *protoUint64) UnmarshalJSON(data []byte) error { |
| if data[0] == '"' { |
| var str string |
| if err := json.Unmarshal(data, &str); err != nil { |
| return err |
| } |
| parsedUint, err := strconv.ParseUint(str, 10, 64) |
| if err != nil { |
| return err |
| } |
| *i = protoUint64(parsedUint) |
| } else { |
| var parsedUint uint64 |
| if err := json.Unmarshal(data, &parsedUint); err != nil { |
| return err |
| } |
| *i = protoUint64(parsedUint) |
| } |
| return nil |
| } |