54 lines
1.4 KiB
Go
54 lines
1.4 KiB
Go
// Package model defines data models and domain rules for model runtime service.
|
|
package model
|
|
|
|
import (
|
|
"fmt"
|
|
"slices"
|
|
"strings"
|
|
|
|
"modelRT/constants"
|
|
)
|
|
|
|
var parameterAttributeGroups = map[string]struct{}{
|
|
"component": {},
|
|
"base_extend": {},
|
|
"rated": {},
|
|
"setup": {},
|
|
"model": {},
|
|
"stable": {},
|
|
"craft": {},
|
|
"integrity": {},
|
|
"behavior": {},
|
|
}
|
|
|
|
// 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 _, ok := parameterAttributeGroups[token6]; ok {
|
|
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))
|
|
}
|
|
}
|