blob: e6398577987729a78ddeb450f527c1159c566467 [file] [log] [blame]
package loop
import (
"fmt"
"strings"
"sync"
"github.com/invopop/jsonschema"
)
type Comment struct {
Author string `json:"author"`
Comment string `json:"comment"`
}
func (c Comment) String() string {
return fmt.Sprintf("%s: %s", c.Author, c.Comment)
}
type ToDo struct {
ID string `json:"id"`
Title string `json:"title"`
Description string `json:"description"`
Items []*ToDo `json:"items"`
Done bool `json:"done"`
AssignedTo string `json:"assignedTo"`
Discussion []Comment `json:"discussion"`
lock sync.Locker
}
const tmpl = `%s: %s
%s
%s
%s`
func (t ToDo) String() string {
var comments []string
for _, c := range t.Discussion {
comments = append(comments, fmt.Sprintf("\t - %s", c.String()))
}
var items []string
for _, i := range t.Items {
items = append(items, fmt.Sprintf("\t%s", i.String()))
}
return fmt.Sprintf(tmpl, t.ID, t.Title, t.Description, strings.Join(comments, "\n"), strings.Join(items, "\n"))
}
func ToDoJSONSchema() string {
reflector := jsonschema.Reflector{
AllowAdditionalProperties: false,
RequiredFromJSONSchemaTags: true,
DoNotReference: false,
}
var v ToDo
s := reflector.Reflect(v)
b, err := s.MarshalJSON()
if err != nil {
panic(err)
}
return string(b)
}