Files
promptkit/internal/domain/resource_identity.go

71 lines
2.2 KiB
Go

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
}