func (t *twalk) decode(b *buffer) {
	t.fid = b.ReadFID()
	t.newFID = b.ReadFID()
	n := b.Read16()
	t.Names = t.Names[:0]
	for i := 0; i < int(n); i++ {
		t.Names = append(t.Names, b.ReadString())
	}
}
decode implements encoder.decode.
package p9
import (
	"fmt"
	"math"
)
type ErrInvalidMsgType struct {
	msgType
}
func (e *ErrInvalidMsgType) Error() string {
	return fmt.Sprintf("invalid message type: %d", e.msgType)
}
type message interface {
	encoder
	fmt.Stringer
	typ() msgType
}
type payloader interface {
	FixedSize() uint32
	Payload() []byte
	SetPayload([]byte)
}
type tversion struct {
	MSize uint32
	Version string
}
func (t *tversion) decode(b *buffer) {
	t.MSize = b.Read32()
	t.Version = b.ReadString()
}
func (t *tversion) encode(b *buffer) {
	b.Write32(t.MSize)
	b.WriteString(t.Version)
}
func (*tversion) typ() msgType {
	return msgTversion
}
func (t *tversion) String() string {
	return fmt.Sprintf("Tversion{MSize: %d, Version: %s}", t.MSize, t.Version)
}
type rversion struct {
	MSize uint32
	Version string
}
func (r *rversion) decode(b *buffer) {
	r.MSize = b.Read32()
	r.Version = b.ReadString()
}
func (r *rversion) encode(b *buffer) {
	b.Write32(r.MSize)
	b.WriteString(r.Version)
}
func (*rversion) typ() msgType {
	return msgRversion
}
func (r *rversion) String() string {
	return fmt.Sprintf("Rversion{MSize: %d, Version: %s}", r.MSize, r.Version)
}
type tflush struct {
	OldTag tag
}
func (t *tflush) decode(b *buffer) {
	t.OldTag = b.ReadTag()
}
func (t *tflush) encode(b *buffer) {
	b.WriteTag(t.OldTag)
}
func (*tflush) typ() msgType {
	return msgTflush
}
func (t *tflush) String() string {
	return fmt.Sprintf("Tflush{OldTag: %d}", t.OldTag)
}
type rflush struct {
}
func (*rflush) decode(b *buffer) {
}
func (*rflush) encode(b *buffer) {
}
func (*rflush) typ() msgType {
	return msgRflush
}
func (r *rflush) String() string {
	return fmt.Sprintf("Rflush{}")
}
type twalk struct {
	fid fid
	newFID fid
	Names []string
}