1 // This file is called zerialize.go so the following go:generate runs last.
3 //go:generate ./mkserialize.sh
13 // ErrTooLong reports a length that is too long to serialize.
14 var ErrTooLong = errors.New("len too long")
16 var be = binary.BigEndian
18 type serializer interface {
19 serialize(w io.Writer)
22 func serialize(w io.Writer, s interface{}) error {
23 return pcall(func() { s.(serializer).serialize(w) })
26 type deserializer interface {
27 deserialize(r io.Reader)
30 func deserialize(r io.Reader, d interface{}) error {
31 return pcall(func() { d.(deserializer).deserialize(r) })
34 type serializationError struct {
38 func pcall(f func()) (rerr error) {
40 switch r := recover().(type) {
41 case serializationError:
54 panic(serializationError{err})