package taskfile type ( NodeOption func(*BaseNode) // BaseNode is a generic node that implements the Parent() and Optional() // methods of the NodeReader interface. It does not implement the Read() method // and it designed to be embedded in other node types so that this boilerplate // code does not need to be repeated. BaseNode struct { parent Node optional bool } ) func NewBaseNode(opts ...NodeOption) *BaseNode { node := &BaseNode{ parent: nil, optional: false, } // Apply options for _, opt := range opts { opt(node) } return node } func WithParent(parent Node) NodeOption { return func(node *BaseNode) { node.parent = parent } } func (node *BaseNode) Parent() Node { return node.parent } func WithOptional(optional bool) NodeOption { return func(node *BaseNode) { node.optional = optional } } func (node *BaseNode) Optional() bool { return node.optional }