tagging was bad
parent
69902a8009
commit
a4c60c2fd8
@ -1,4 +1,9 @@
|
||||
package wire
|
||||
|
||||
type OK struct {}
|
||||
func (OK) NetTag() Tag { return T_OK }
|
||||
type OK struct{}
|
||||
|
||||
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
|
||||
|
||||
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