...
1
2
3
4
5 package apidiff
6
7 import (
8 "bytes"
9 "fmt"
10 "io"
11 )
12
13
14 type Report struct {
15 Changes []Change
16 }
17
18
19 type Change struct {
20 Message string
21 Compatible bool
22 }
23
24 func (r Report) messages(compatible bool) []string {
25 var msgs []string
26 for _, c := range r.Changes {
27 if c.Compatible == compatible {
28 msgs = append(msgs, c.Message)
29 }
30 }
31 return msgs
32 }
33
34 func (r Report) String() string {
35 var buf bytes.Buffer
36 if err := r.Text(&buf); err != nil {
37 return fmt.Sprintf("!!%v", err)
38 }
39 return buf.String()
40 }
41
42 func (r Report) Text(w io.Writer) error {
43 if err := r.TextIncompatible(w, true); err != nil {
44 return err
45 }
46 return r.TextCompatible(w)
47 }
48
49 func (r Report) TextIncompatible(w io.Writer, withHeader bool) error {
50 if withHeader {
51 return r.writeMessages(w, "Incompatible changes:", r.messages(false))
52 }
53 return r.writeMessages(w, "", r.messages(false))
54 }
55
56 func (r Report) TextCompatible(w io.Writer) error {
57 return r.writeMessages(w, "Compatible changes:", r.messages(true))
58 }
59
60 func (r Report) writeMessages(w io.Writer, header string, msgs []string) error {
61 if len(msgs) == 0 {
62 return nil
63 }
64 if header != "" {
65 if _, err := fmt.Fprintf(w, "%s\n", header); err != nil {
66 return err
67 }
68 }
69 for _, m := range msgs {
70 if _, err := fmt.Fprintf(w, "- %s\n", m); err != nil {
71 return err
72 }
73 }
74 return nil
75 }
76
View as plain text