openmeter / api /v3 /labels /convert.go
Leon4gr45's picture
Upload folder using huggingface_hub (part 4)
1f10f31 verified
Raw
History Blame Contribute Delete
2.08 kB
package labels
import (
"encoding"
"errors"
"fmt"
"strings"
api "github.com/openmeterio/openmeter/api/v3"
"github.com/openmeterio/openmeter/pkg/models"
)
const AnnotationsPrefix = "openmeter_"
type MetadataAnnotations struct {
Metadata models.Metadata
Annotations models.Annotations
}
func ToMetadataAnnotations(labels *api.Labels) (MetadataAnnotations, error) {
if labels == nil || len(*labels) == 0 {
return MetadataAnnotations{}, nil
}
var (
metadata models.Metadata
annotations models.Annotations
errs []error
)
for k, v := range *labels {
if err := ValidateLabel(k, v); err != nil {
errs = append(errs, err)
continue
}
if strings.HasPrefix(k, AnnotationsPrefix) {
if annotations == nil {
annotations = make(models.Annotations)
}
annotations[strings.TrimPrefix(k, AnnotationsPrefix)] = v
} else {
if metadata == nil {
metadata = make(models.Metadata)
}
metadata[k] = v
}
}
return MetadataAnnotations{metadata, annotations}, models.NewNillableGenericValidationError(errors.Join(errs...))
}
func FromMetadataAnnotations(metadata models.Metadata, annotations models.Annotations) *api.Labels {
labels := make(api.Labels, len(annotations)+len(metadata))
for k, v := range metadata {
if err := ValidateLabel(k, v); err != nil {
continue
}
labels[k] = v
}
for k, v := range annotations {
var val string
switch vv := v.(type) {
case fmt.Stringer:
val = vv.String()
case string:
val = vv
case encoding.TextMarshaler:
b, err := vv.MarshalText()
if err != nil {
continue
}
val = string(b)
}
if err := ValidateLabel(k, val); err != nil {
continue
}
if !strings.HasPrefix(k, AnnotationsPrefix) {
k = AnnotationsPrefix + k
}
labels[k] = val
}
return &labels
}
func FromMetadata[T ~map[string]string](metadata T) *api.Labels {
return FromMetadataAnnotations(models.Metadata(metadata), nil)
}
func ToMetadata(labels *api.Labels) (models.Metadata, error) {
m, err := ToMetadataAnnotations(labels)
return m.Metadata, err
}