irgen
is a code generator for the visitees (elements) in the visitor pattern.
Given a file option.go
in the directory
$GOPATH/src/some-domain.org/option
containing
package option
//go:generate irgen Option OptionConsumer
type Option interface {
FeedTo(consumer OptionConsumer)
}
type OptionConsumer interface {
Some(X interface{})
None()
}
running go generate some-domain.org/option
will generate a file named
option_impl.go
containing something like
package option
type Some struct {
X interface{}
}
type None struct {
}
func (option Some) FeedTo(consumer OptionConsumer) { consumer.Some(Option.X) }
func (option None) FeedTo(consumer OptionConsumer) { consumer.None() }