tagging was bad
parent
69902a8009
commit
a4c60c2fd8
@ -1,4 +1,9 @@
|
|||||||
package wire
|
package wire
|
||||||
|
|
||||||
type OK struct {}
|
type OK struct{}
|
||||||
func (OK) NetTag() Tag { return T_OK }
|
|
||||||
|
func (OK) NetTag() string { return "ok" }
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
Register(func() Value { return new(OK) })
|
||||||
|
}
|
||||||
|
@ -1,51 +0,0 @@
|
|||||||
package wire
|
|
||||||
|
|
||||||
import (
|
|
||||||
"encoding/json"
|
|
||||||
"fmt"
|
|
||||||
)
|
|
||||||
|
|
||||||
type Tag uint
|
|
||||||
|
|
||||||
const (
|
|
||||||
T_None Tag = iota
|
|
||||||
T_Error
|
|
||||||
T_OK
|
|
||||||
T_Client_Move
|
|
||||||
)
|
|
||||||
|
|
||||||
func (t Tag) String() string {
|
|
||||||
switch t {
|
|
||||||
case T_Error:
|
|
||||||
return "error"
|
|
||||||
case T_OK:
|
|
||||||
return "ok"
|
|
||||||
case T_Client_Move:
|
|
||||||
return "self/move"
|
|
||||||
default:
|
|
||||||
panic("unknown type tag")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (t *Tag) UnmarshalJSON(b []byte) error {
|
|
||||||
var name string
|
|
||||||
if err := json.Unmarshal(b, &name); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
switch name {
|
|
||||||
case "error":
|
|
||||||
*t = T_Error
|
|
||||||
return nil
|
|
||||||
case "ok":
|
|
||||||
*t = T_OK
|
|
||||||
return nil
|
|
||||||
case "self/move":
|
|
||||||
*t = T_Client_Move
|
|
||||||
return nil
|
|
||||||
default:
|
|
||||||
return fmt.Errorf("unknown type tag: %q", name)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (t Tag) MarshalJSON() ([]byte, error) { return json.Marshal(t.String()) }
|
|
@ -1,3 +1,24 @@
|
|||||||
package wire
|
package wire
|
||||||
|
|
||||||
type Value interface{ NetTag() Tag }
|
type Value interface {
|
||||||
|
NetTag() string
|
||||||
|
}
|
||||||
|
|
||||||
|
var registry = make(map[string]func() Value)
|
||||||
|
|
||||||
|
func Register(f func() Value) {
|
||||||
|
v := f()
|
||||||
|
t := v.NetTag()
|
||||||
|
if _, exists := registry[t]; exists {
|
||||||
|
panic("cannot register type: a type already exists with tag " + t)
|
||||||
|
}
|
||||||
|
registry[t] = f
|
||||||
|
}
|
||||||
|
|
||||||
|
func New(name string) Value {
|
||||||
|
f, ok := registry[name]
|
||||||
|
if !ok {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
return f()
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue