// 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{}{ "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 } // TODO 后续要完成对component这个token6类型的支持 if token6 == "component" { return "", fmt.Errorf("unsupported data object token %q: token6 component is not queryable", token) } 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)) } }