88 lines
1.6 KiB
Go
88 lines
1.6 KiB
Go
package haunt
|
|
|
|
import (
|
|
"errors"
|
|
"reflect"
|
|
|
|
"github.com/abs3ntdev/haunt/src/config"
|
|
)
|
|
|
|
// Schema projects list
|
|
type Schema struct {
|
|
Projects []Project `yaml:"schema" json:"schema"`
|
|
}
|
|
|
|
// Add a project if unique
|
|
func (s *Schema) Add(p Project) {
|
|
for _, val := range s.Projects {
|
|
if reflect.DeepEqual(val, p) {
|
|
return
|
|
}
|
|
}
|
|
s.Projects = append(s.Projects, p)
|
|
}
|
|
|
|
// Remove a project
|
|
func (s *Schema) Remove(name string) error {
|
|
for key, val := range s.Projects {
|
|
if name == val.Name {
|
|
s.Projects = append(s.Projects[:key], s.Projects[key+1:]...)
|
|
return nil
|
|
}
|
|
}
|
|
return errors.New("project not found")
|
|
}
|
|
|
|
// New create a project using cli fields
|
|
func (s *Schema) New(flags config.Flags) Project {
|
|
project := Project{
|
|
Name: flags.Name,
|
|
Path: flags.Path,
|
|
Tools: Tools{
|
|
Vet: Tool{
|
|
Status: flags.Vet,
|
|
},
|
|
Fmt: Tool{
|
|
Status: flags.Format,
|
|
},
|
|
Test: Tool{
|
|
Status: flags.Test,
|
|
},
|
|
Generate: Tool{
|
|
Status: flags.Generate,
|
|
},
|
|
Build: Tool{
|
|
Status: flags.Build,
|
|
},
|
|
Install: Tool{
|
|
Status: flags.Install,
|
|
},
|
|
Run: Tool{
|
|
Status: flags.Run,
|
|
},
|
|
},
|
|
Watcher: Watch{
|
|
Paths: []string{"/"},
|
|
Ignore: []string{".git", ".haunt", "vendor"},
|
|
Exts: []string{"go"},
|
|
},
|
|
}
|
|
return project
|
|
}
|
|
|
|
// Filter project list by field
|
|
func (s *Schema) Filter(field string, value interface{}) []Project {
|
|
result := []Project{}
|
|
for _, item := range s.Projects {
|
|
v := reflect.ValueOf(item)
|
|
for i := 0; i < v.NumField(); i++ {
|
|
if v.Type().Field(i).Name == field {
|
|
if reflect.DeepEqual(v.Field(i).Interface(), value) {
|
|
result = append(result, item)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return result
|
|
}
|