package ref import ( "fmt" "github.com/oklog/ulid/v2" ) type IDOrKey struct { ID string `json:"id"` Key string `json:"key"` } func (i IDOrKey) GetIDs() []string { if i.ID == "" { return nil } return []string{i.ID} } func (i IDOrKey) GetKeys() []string { if i.Key == "" { return nil } return []string{i.Key} } func (i IDOrKey) Validate() error { if i.ID == "" && i.Key == "" { return fmt.Errorf("either id or key is required") } return nil } func ParseIDOrKey(s string) IDOrKey { n := IDOrKey{} _, err := ulid.Parse(s) if err != nil { n.Key = s } else { n.ID = s } return n }