diff options
author | Michael Muré <batolettre@gmail.com> | 2022-08-20 10:14:09 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-08-20 10:14:09 +0200 |
commit | 58df94d38d754bff4dcca11e2ae4b99326a9a87e (patch) | |
tree | 8701efc87732439f993eb4f1d00585fc419b87ab /entities/identity/common.go | |
parent | 5ca686b59751e3c87740b84108c54fc675a074cf (diff) | |
parent | 5511c230b678a181cc596238bf6669428d1b1902 (diff) | |
download | git-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.go | 37 |
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") +} |