github.com/beauknowssoftware/makehcl@v0.0.0-20200322000747-1b9bb1e1c008/internal/definition/definition.go (about)

     1  package definition
     2  
     3  type Goal = []string
     4  type Target = string
     5  
     6  type Definition struct {
     7  	defaultGoal       Goal
     8  	rules             map[Target]*Rule
     9  	firstExecutorGoal Goal
    10  	GlobalEnvironment map[string]string
    11  	Shell             string
    12  	ShellFlags        *string
    13  }
    14  
    15  func (d Definition) Rule(t Target) *Rule {
    16  	if d.rules == nil {
    17  		return nil
    18  	}
    19  
    20  	return d.rules[t]
    21  }
    22  
    23  func (d *Definition) SetDefaultGoal(goal Goal) {
    24  	d.defaultGoal = goal
    25  }
    26  
    27  func (d *Definition) AddRule(r *Rule) {
    28  	if d.rules == nil {
    29  		d.rules = make(map[Target]*Rule)
    30  	}
    31  
    32  	d.rules[r.Target] = r
    33  
    34  	if len(d.firstExecutorGoal) == 0 {
    35  		d.firstExecutorGoal = Goal{r.Target}
    36  	}
    37  }
    38  
    39  func (d *Definition) AddCommand(c *Command) {
    40  	d.AddRule(c.AsRule())
    41  }
    42  
    43  func (d Definition) Rules() map[Target]*Rule {
    44  	return d.rules
    45  }
    46  
    47  func (d *Definition) EffectiveGoal(explicitGoal Goal) Goal {
    48  	if len(explicitGoal) == 0 {
    49  		if len(d.defaultGoal) == 0 {
    50  			return d.firstExecutorGoal
    51  		}
    52  
    53  		return d.defaultGoal
    54  	}
    55  
    56  	return explicitGoal
    57  }