package taskfile type ( NodeOption func(*BaseNode) // BaseNode is a generic node that implements the Parent() 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 dir string } ) func NewBaseNode(dir string, opts ...NodeOption) *BaseNode { node := &BaseNode{ parent: nil, dir: dir, } // 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 (node *BaseNode) Dir() string { return node.dir }