a love letter to tangled (android, iOS, and a search API)
1package normalize
2
3import "fmt"
4
5const (
6 collectionIssueState string = "sh.tangled.repo.issue.state"
7 collectionPullStatus string = "sh.tangled.repo.pull.status"
8)
9
10// IssueStateHandler processes sh.tangled.repo.issue.state records.
11type IssueStateHandler struct{}
12
13func (h *IssueStateHandler) Collection() string { return collectionIssueState }
14
15func (h *IssueStateHandler) HandleState(event TapRecordEvent) (*StateUpdate, error) {
16 r := event.Record
17 rec := r.Record
18
19 subject := firstString(rec, "issue", "subject")
20 if subject == "" {
21 return nil, fmt.Errorf("issue state record missing issue field")
22 }
23 state := firstString(rec, "state", "status")
24 if state == "" {
25 return nil, fmt.Errorf("issue state record missing state field")
26 }
27
28 return &StateUpdate{
29 SubjectURI: subject,
30 State: state,
31 }, nil
32}
33
34// PullStatusHandler processes sh.tangled.repo.pull.status records.
35type PullStatusHandler struct{}
36
37func (h *PullStatusHandler) Collection() string { return collectionPullStatus }
38
39func (h *PullStatusHandler) HandleState(event TapRecordEvent) (*StateUpdate, error) {
40 r := event.Record
41 rec := r.Record
42
43 subject := firstString(rec, "pull", "subject")
44 if subject == "" {
45 return nil, fmt.Errorf("pull status record missing pull field")
46 }
47 status := firstString(rec, "status", "state")
48 if status == "" {
49 return nil, fmt.Errorf("pull status record missing status field")
50 }
51
52 return &StateUpdate{
53 SubjectURI: subject,
54 State: status,
55 }, nil
56}