modelRT/model/data_object_token.go

42 lines
1.2 KiB
Go

// Package model defines data models and domain rules for model runtime service.
package model
import (
"fmt"
"slices"
"strings"
"modelRT/constants"
)
// ClassifyDataObjectToken determines whether token identifies a parameter or a
// measurement. Seven-part and four-part tokens are classified by token6, while
// two-part tokens are treated as measurements at the current stage.
func ClassifyDataObjectToken(token string) (constants.DataObjectType, error) {
parts := strings.Split(token, ".")
if slices.Contains(parts, "") {
return "", fmt.Errorf("invalid data object token %q: token segment cannot be empty", token)
}
switch len(parts) {
case 2:
return constants.DataObjectTypeMeasurement, nil
case 4, 7:
token6Index := 2
if len(parts) == 7 {
token6Index = 5
}
token6 := parts[token6Index]
if constants.IsSupportedParameterAttributeGroup(token6) {
return constants.DataObjectTypeParameter, nil
}
if token6 == "bay" {
return constants.DataObjectTypeMeasurement, nil
}
return "", fmt.Errorf("invalid data object token %q: unsupported token6 %q", token, token6)
default:
return "", fmt.Errorf("invalid data object token %q: expected 2, 4, or 7 segments, got %d", token, len(parts))
}
}