package tunnel import ( "compress/gzip" "encoding/gob" "io" ) type DataFrame struct { ID ID Type Type Payload []byte } func (d *DataFrame) Encode(w io.Writer) error { gz := gzip.NewWriter(w) defer gz.Close() gob := gob.NewEncoder(gz) return gob.Encode(d) } func (d *DataFrame) Decode(r io.Reader) error { gz, err := gzip.NewReader(r) if err != nil { return err } defer gz.Close() gob := gob.NewDecoder(gz) return gob.Decode(d) } func (d *DataFrame) Read(p []byte) (int, error) { return copy(p, d.Payload), nil } func (d *DataFrame) Write(p []byte) (int, error) { return copy(d.Payload, p), nil }