1package bootstrap
2
3import (
4 "fmt"
5)
6
7// MergeStatus represent the result of a merge operation of an entity
8type MergeStatus int
9
10const (
11 _ MergeStatus = iota
12 MergeStatusNew // a new Entity was created locally
13 MergeStatusInvalid // the remote data is invalid
14 MergeStatusUpdated // a local Entity has been updated
15 MergeStatusNothing // no changes were made to a local Entity (already up to date)
16 MergeStatusError // a terminal error happened
17)
18
19// MergeResult hold the result of a merge operation on an Entity.
20type MergeResult struct {
21 // Err is set when a terminal error occur in the process
22 Err error
23
24 Id Id
25 Status MergeStatus
26
27 // Only set for Invalid status
28 Reason string
29
30 // Only set for New or Updated status
31 Entity Entity
32}
33
34func (mr MergeResult) String() string {
35 switch mr.Status {
36 case MergeStatusNew:
37 return "new"
38 case MergeStatusInvalid:
39 return fmt.Sprintf("invalid data: %s", mr.Reason)
40 case MergeStatusUpdated:
41 return "updated"
42 case MergeStatusNothing:
43 return "nothing to do"
44 case MergeStatusError:
45 if mr.Id != "" {
46 return fmt.Sprintf("merge error on %s: %s", mr.Id, mr.Err.Error())
47 }
48 return fmt.Sprintf("merge error: %s", mr.Err.Error())
49 default:
50 panic("unknown merge status")
51 }
52}
53
54func NewMergeNewStatus(id Id, entity Entity) MergeResult {
55 return MergeResult{
56 Id: id,
57 Status: MergeStatusNew,
58 Entity: entity,
59 }
60}
61
62func NewMergeInvalidStatus(id Id, reason string) MergeResult {
63 return MergeResult{
64 Id: id,
65 Status: MergeStatusInvalid,
66 Reason: reason,
67 }
68}
69
70func NewMergeUpdatedStatus(id Id, entity Entity) MergeResult {
71 return MergeResult{
72 Id: id,
73 Status: MergeStatusUpdated,
74 Entity: entity,
75 }
76}
77
78func NewMergeNothingStatus(id Id) MergeResult {
79 return MergeResult{
80 Id: id,
81 Status: MergeStatusNothing,
82 }
83}
84
85func NewMergeError(err error, id Id) MergeResult {
86 return MergeResult{
87 Id: id,
88 Status: MergeStatusError,
89 Err: err,
90 }
91}