GraphQL API and utilities for the rpdata project
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
package changekeys
import ( "reflect"
"git.aiterp.net/rpdata/api/models" )
// One makes a ChangeKey for a model, or panics if it's not supported.
func One(object interface{}) models.ChangeKey { switch v := object.(type) { case models.Post: return models.ChangeKey{Model: "Post", ID: v.ID} case models.Character: return models.ChangeKey{Model: "Character", ID: v.ID} case models.Channel: return models.ChangeKey{Model: "Channel", ID: v.Name} }
model := "" if t := reflect.TypeOf(object); t.Kind() == reflect.Ptr { model = t.Elem().Name() } else { model = t.Name() }
id := "" v := reflect.ValueOf(object) for v.Kind() == reflect.Ptr { v = v.Elem() }
if f := v.FieldByName("ID"); f.Kind() == reflect.String { id = f.String() } else if f = v.FieldByName("Name"); f.Kind() == reflect.String { id = f.String() } else { panic("Unsupported model") }
return models.ChangeKey{Model: models.ChangeModel(model), ID: id} }
|