1package entity
2
3import "fmt"
4
5// MergeStatus represent the result of a merge operation of an entity
6type MergeStatus int
7
8const (
9 _ MergeStatus = iota
10 MergeStatusNew
11 MergeStatusInvalid
12 MergeStatusUpdated
13 MergeStatusNothing
14)
15
16type MergeResult struct {
17 // Err is set when a terminal error occur in the process
18 Err error
19
20 Id string
21 Status MergeStatus
22
23 // Only set for invalid status
24 Reason string
25
26 // Not set for invalid status
27 Entity Interface
28}
29
30func (mr MergeResult) String() string {
31 switch mr.Status {
32 case MergeStatusNew:
33 return "new"
34 case MergeStatusInvalid:
35 return fmt.Sprintf("invalid data: %s", mr.Reason)
36 case MergeStatusUpdated:
37 return "updated"
38 case MergeStatusNothing:
39 return "nothing to do"
40 default:
41 panic("unknown merge status")
42 }
43}
44
45func NewMergeError(err error, id string) MergeResult {
46 return MergeResult{
47 Err: err,
48 Id: id,
49 }
50}
51
52func NewMergeStatus(status MergeStatus, id string, entity Interface) MergeResult {
53 return MergeResult{
54 Id: id,
55 Status: status,
56
57 // Entity is not set for an invalid merge result
58 Entity: entity,
59 }
60}
61
62func NewMergeInvalidStatus(id string, reason string) MergeResult {
63 return MergeResult{
64 Id: id,
65 Status: MergeStatusInvalid,
66 Reason: reason,
67 }
68}