mirror of
https://github.com/rcourtman/Pulse.git
synced 2026-05-07 08:57:12 +00:00
34 lines
1 KiB
Go
34 lines
1 KiB
Go
package unifiedresources
|
|
|
|
import (
|
|
"crypto/sha256"
|
|
"encoding/hex"
|
|
"fmt"
|
|
"strings"
|
|
)
|
|
|
|
func normalizeSourceID(sourceID string) string {
|
|
return strings.TrimSpace(sourceID)
|
|
}
|
|
|
|
// SourceSpecificID returns the deterministic ID used for non-host resources when the registry
|
|
// does not have a canonical identity to key off of.
|
|
//
|
|
// This matches the ResourceRegistry's internal ID derivation:
|
|
// stable := fmt.Sprintf("%s:%s", source, sourceID)
|
|
// id := fmt.Sprintf("%s-%s", resourceType, hex(sha256(stable)[:8]))
|
|
func SourceSpecificID(resourceType ResourceType, source DataSource, sourceID string) string {
|
|
resourceType = CanonicalResourceType(resourceType)
|
|
stable := fmt.Sprintf("%s:%s", source, normalizeSourceID(sourceID))
|
|
hash := sha256.Sum256([]byte(stable))
|
|
return fmt.Sprintf("%s-%s", resourceType, hex.EncodeToString(hash[:8]))
|
|
}
|
|
|
|
// CanonicalResourceID returns the canonical v6 resource identifier.
|
|
func CanonicalResourceID(id string) string {
|
|
trimmed := strings.TrimSpace(id)
|
|
if trimmed == "" {
|
|
return ""
|
|
}
|
|
return trimmed
|
|
}
|