package secrets import ( "encoding/json" "fmt" ) type AssignmentSecretMergeResult struct { Metadata map[string]any Keys []string } func MergeResourceSecretIntoAssignmentMetadata(metadata map[string]any, payload json.RawMessage) (AssignmentSecretMergeResult, error) { if metadata == nil { metadata = map[string]any{} } var secretPayload map[string]any if err := json.Unmarshal(payload, &secretPayload); err != nil { return AssignmentSecretMergeResult{}, fmt.Errorf("decode resolved resource secret: %w", err) } resource, _ := metadata["resource"].(map[string]any) if resource == nil { resource = map[string]any{} metadata["resource"] = resource } resourceMetadata, _ := resource["metadata"].(map[string]any) if resourceMetadata == nil { resourceMetadata = map[string]any{} resource["metadata"] = resourceMetadata } keys := make([]string, 0, len(secretPayload)) for key, value := range secretPayload { resourceMetadata[key] = value keys = append(keys, key) } return AssignmentSecretMergeResult{Metadata: metadata, Keys: keys}, nil }