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