package domain import "strings" func validResourceID(id string) bool { if !strings.Contains(id, "/") { return strings.TrimSpace(id) != "" } if strings.Count(id, "/") != 1 { return false } namespace, localID, _ := strings.Cut(id, "/") return namespace != "" && localID != "" } func validResourceNamespace(namespace string) bool { return strings.TrimSpace(namespace) != "" && !strings.Contains(namespace, "/") } func validLocalResourceKey(key string) bool { return strings.TrimSpace(key) != "" && !strings.Contains(key, "/") } func qualifyResourceID(id, namespace string) (string, bool) { if !validResourceID(id) || (namespace != "" && !validResourceNamespace(namespace)) { return "", false } if strings.Contains(id, "/") || namespace == "" { return id, true } return namespace + "/" + id, true } func resourceNamespaceFromID(id string) (string, bool) { if !validResourceID(id) || !strings.Contains(id, "/") { return "", false } namespace, _, _ := strings.Cut(id, "/") return namespace, true } // IsValidResourceID reports whether id is an unqualified resource ID or one // valid namespace/local-ID pair. func IsValidResourceID(id string) bool { return validResourceID(id) } // QualifyResourceID validates id and applies namespace to an unqualified ID. // An already-qualified ID is returned unchanged. func QualifyResourceID(id, namespace string) (string, bool) { return qualifyResourceID(id, namespace) } // IsValidResourceNamespace reports whether namespace is nonblank and contains // no namespace separator. func IsValidResourceNamespace(namespace string) bool { return validResourceNamespace(namespace) } // IsValidLocalResourceKey reports whether key is a nonblank key for a // namespace-local resource mapping. func IsValidLocalResourceKey(key string) bool { return validLocalResourceKey(key) } // QualifyLocalResourceID combines a validated namespace and local mapping key. // An empty namespace leaves a valid unqualified key unchanged. func QualifyLocalResourceID(namespace, key string) (string, bool) { if !validLocalResourceKey(key) || (namespace != "" && !validResourceNamespace(namespace)) { return "", false } if namespace == "" { return key, true } return namespace + "/" + key, true }