// automatically generated by stateify.

package ports

import (
	"gvisor.dev/gvisor/pkg/state"
)

func (f *Flags) StateTypeName() string {
	return "pkg/tcpip/ports.Flags"
}

func (f *Flags) StateFields() []string {
	return []string{
		"MostRecent",
		"LoadBalanced",
		"TupleOnly",
	}
}

func (f *Flags) beforeSave() {}

func (f *Flags) StateSave(stateSinkObject state.Sink) {
	f.beforeSave()
	stateSinkObject.Save(0, &f.MostRecent)
	stateSinkObject.Save(1, &f.LoadBalanced)
	stateSinkObject.Save(2, &f.TupleOnly)
}

func (f *Flags) afterLoad() {}

func (f *Flags) StateLoad(stateSourceObject state.Source) {
	stateSourceObject.Load(0, &f.MostRecent)
	stateSourceObject.Load(1, &f.LoadBalanced)
	stateSourceObject.Load(2, &f.TupleOnly)
}

func init() {
	state.Register((*Flags)(nil))
}
