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