aboutsummaryrefslogtreecommitdiffstats
path: root/entities/identity/common.go
diff options
context:
space:
mode:
authorMichael Muré <batolettre@gmail.com>2022-08-20 10:14:09 +0200
committerGitHub <noreply@github.com>2022-08-20 10:14:09 +0200
commit58df94d38d754bff4dcca11e2ae4b99326a9a87e (patch)
tree8701efc87732439f993eb4f1d00585fc419b87ab /entities/identity/common.go
parent5ca686b59751e3c87740b84108c54fc675a074cf (diff)
parent5511c230b678a181cc596238bf6669428d1b1902 (diff)
downloadgit-bug-58df94d38d754bff4dcca11e2ae4b99326a9a87e.tar.gz
Merge pull request #852 from MichaelMure/move-around
move {bug,identity} to /entities, move input to /commands
Diffstat (limited to 'entities/identity/common.go')
-rw-r--r--entities/identity/common.go37
1 files changed, 37 insertions, 0 deletions
diff --git a/entities/identity/common.go b/entities/identity/common.go
new file mode 100644
index 00000000..5c6445e9
--- /dev/null
+++ b/entities/identity/common.go
@@ -0,0 +1,37 @@
+package identity
+
+import (
+ "encoding/json"
+ "errors"
+ "fmt"
+
+ "github.com/MichaelMure/git-bug/entity"
+)
+
+var ErrIdentityNotExist = errors.New("identity doesn't exist")
+
+func NewErrMultipleMatch(matching []entity.Id) *entity.ErrMultipleMatch {
+ return entity.NewErrMultipleMatch("identity", matching)
+}
+
+// Custom unmarshaling function to allow package user to delegate
+// the decoding of an Identity and distinguish between an Identity
+// and a Bare.
+//
+// If the given message has a "id" field, it's considered being a proper Identity.
+func UnmarshalJSON(raw json.RawMessage) (Interface, error) {
+ aux := &IdentityStub{}
+
+ // First try to decode and load as a normal Identity
+ err := json.Unmarshal(raw, &aux)
+ if err == nil && aux.Id() != "" {
+ return aux, nil
+ }
+
+ // abort if we have an error other than the wrong type
+ if _, ok := err.(*json.UnmarshalTypeError); err != nil && !ok {
+ return nil, err
+ }
+
+ return nil, fmt.Errorf("unknown identity type")
+}