From 89f766854443a6f7ae20c330547083fd0e075ba9 Mon Sep 17 00:00:00 2001 From: Teddy Wing Date: Sun, 12 Mar 2017 17:43:20 +0100 Subject: fields.go: Add methods that allow us to extract objects by name We want to be able to get Client, Project, etc. objects given their name. These functions will look through the fields or objects containing a list of the thing looked for and return if if its name matches the search string. Originally had the idea to generalise the body of the function, but had trouble making the types generic. Still on the table for later if we want to deduplicate the code. For now I'm leaving in the repetition because it works and I don't care with this project. --- timetask/fields.go | 63 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 63 insertions(+) diff --git a/timetask/fields.go b/timetask/fields.go index 4e3ac7c..6d1fa69 100644 --- a/timetask/fields.go +++ b/timetask/fields.go @@ -1,5 +1,7 @@ package timetask +import "fmt" + type Client struct { ID uint Name string @@ -31,3 +33,64 @@ type Fields struct { PersonID uint `yaml:"person_id"` Clients []Client } + +// func thingByName(things []interface{}, name string) (*interface{}, error) { +// for _, thing := range things { +// t = IDName(thing.(IDName)) +// if t.Name == name { +// return &thing, nil +// } +// } +// +// return nil, fmt.Errorf("Thing not found") +// } + +func (f *Fields) ClientByName(client_name string) (*Client, error) { + for _, client := range f.Clients { + if client.Name == client_name { + return &client, nil + } + } + + return nil, fmt.Errorf("Client %s not found", client_name) +} + +func (c *Client) ProjectByName(project_name string) (*Project, error) { + for _, project := range c.Projects { + if project.Name == project_name { + return &project, nil + } + } + + return nil, fmt.Errorf("Project %s not found", project_name) +} + +func (p *Project) ModuleByName(module_name string) (*Module, error) { + for _, module := range p.Modules { + if module.Name == module_name { + return &module, nil + } + } + + return nil, fmt.Errorf("Module %s not found", module_name) +} + +func (p *Project) TaskByName(task_name string) (*Task, error) { + for _, task := range p.Tasks { + if task.Name == task_name { + return &task, nil + } + } + + return nil, fmt.Errorf("Task %s not found", task_name) +} + +func (p *Project) WorkTypeByName(work_type_name string) (*WorkType, error) { + for _, work_type := range p.WorkTypes { + if work_type.Name == work_type_name { + return &work_type, nil + } + } + + return nil, fmt.Errorf("Work type %s not found", work_type_name) +} -- cgit v1.2.3