コード例 #1
0
ファイル: api.go プロジェクト: bketelsen/goa
// Trait defines an API trait. A trait encapsulates arbitrary DSL that gets executed wherever the
// trait is called via the UseTrait function.
func Trait(name string, val ...func()) {
	var ver *design.APIVersionDefinition
	if a, ok := apiDefinition(false); ok {
		ver = a.APIVersionDefinition
	} else if v, ok := versionDefinition(true); ok {
		ver = v
	}
	if len(val) < 1 {
		ReportError("missing trait DSL for %s", name)
		return
	} else if len(val) > 1 {
		ReportError("too many arguments given to Trait")
		return
	}
	if ver == nil {
		return
	}
	if _, ok := ver.Traits[name]; ok {
		ReportError("multiple definitions for trait %s%s", name, ver.Context())
		return
	}
	trait := &design.TraitDefinition{Name: name, DSLFunc: val[0]}
	if ver.Traits == nil {
		ver.Traits = make(map[string]*design.TraitDefinition)
	}
	ver.Traits[name] = trait
}