diff --git a/context.go b/context.go index f18535f..4af24c3 100644 --- a/context.go +++ b/context.go @@ -100,6 +100,9 @@ type Context struct { func (ctx *Context) GQLType(t reflect.Type, node_type string) (graphql.Type, error) { if t == reflect.TypeFor[NodeID]() { + if node_type == "" { + node_type = "Base" + } node_info, mapped := ctx.NodeTypes[node_type] if mapped == false { return nil, fmt.Errorf("Cannot get GQL type for unregistered Node Type \"%s\"", node_type) @@ -149,10 +152,15 @@ type Pair struct { } func RegisterMap(ctx *Context, reflect_type reflect.Type, node_type string) error { - node_types := strings.SplitN(node_type, ":", 2) + var node_types []string + if node_type == "" { + node_types = []string{"", ""} + } else { + node_types = strings.SplitN(node_type, ":", 2) - if len(node_types) != 2 { - return fmt.Errorf("Invalid node tag for map type %s: \"%s\"", reflect_type, node_type) + if len(node_types) != 2 { + return fmt.Errorf("Invalid node tag for map type %s: \"%s\"", reflect_type, node_type) + } } key_type, err := ctx.GQLType(reflect_type.Key(), node_types[0]) @@ -505,6 +513,10 @@ func (ctx *Context) GQLInterfaces(known_type NodeType, extensions []ExtType) gra } } +func RegisterSignal[S Signal](ctx *Context) error { + return RegisterObject[S](ctx) +} + func RegisterObject[T any](ctx *Context) error { reflect_type := reflect.TypeFor[T]() serialized_type := SerializedTypeFor[T]() @@ -997,6 +1009,11 @@ func NewContext(db * badger.DB, log Logger) (*Context, error) { return nil, err } + err = RegisterScalar[ExtType](ctx, identity, coerce[ExtType], astInt[ExtType], nil) + if err != nil { + return nil, err + } + err = RegisterNodeType(ctx, "Base", []ExtType{}) if err != nil { return nil, err @@ -1052,17 +1069,23 @@ func NewContext(db * badger.DB, log Logger) (*Context, error) { return nil, err } + err = RegisterScalar[Change](ctx, identity, coerce[Change], astString[Change], nil) + if err != nil { + return nil, err + } + + // TODO: Register as a GQL type with Signal as an interface err = RegisterObjectNoGQL[QueuedSignal](ctx) if err != nil { return nil, err } - err = RegisterObjectNoGQL[TimeoutSignal](ctx) + err = RegisterSignal[TimeoutSignal](ctx) if err != nil { return nil, err } - err = RegisterObjectNoGQL[StatusSignal](ctx) + err = RegisterSignal[StatusSignal](ctx) if err != nil { return nil, err }