42 lines
1.2 KiB
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))
|
|
}
|
|
}
|