37 lines
807 B
Go
37 lines
807 B
Go
|
package depgraph
|
||
|
|
||
|
import (
|
||
|
"github.com/hashicorp/terraform/digraph"
|
||
|
)
|
||
|
|
||
|
// Dependency is used to create a directed edge between two nouns.
|
||
|
// One noun may depend on another and provide version constraints
|
||
|
// that cannot be violated
|
||
|
type Dependency struct {
|
||
|
Name string
|
||
|
Meta interface{}
|
||
|
Constraints []Constraint
|
||
|
Source *Noun
|
||
|
Target *Noun
|
||
|
}
|
||
|
|
||
|
// Constraint is used by dependencies to allow arbitrary constraints
|
||
|
// between nouns
|
||
|
type Constraint interface {
|
||
|
Satisfied(head, tail *Noun) (bool, error)
|
||
|
}
|
||
|
|
||
|
// Head returns the source, or dependent noun
|
||
|
func (d *Dependency) Head() digraph.Node {
|
||
|
return d.Source
|
||
|
}
|
||
|
|
||
|
// Tail returns the target, or depended upon noun
|
||
|
func (d *Dependency) Tail() digraph.Node {
|
||
|
return d.Target
|
||
|
}
|
||
|
|
||
|
func (d *Dependency) String() string {
|
||
|
return d.Name
|
||
|
}
|