a love letter to tangled (android, iOS, and a search API)
at main 56 lines 1.5 kB view raw
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}