1package cache
 2
 3import (
 4	"github.com/MichaelMure/git-bug/identity"
 5	"github.com/MichaelMure/git-bug/repository"
 6)
 7
 8var _ identity.Interface = &IdentityCache{}
 9
10// IdentityCache is a wrapper around an Identity for caching.
11type IdentityCache struct {
12	*identity.Identity
13	repoCache *RepoCache
14}
15
16func NewIdentityCache(repoCache *RepoCache, id *identity.Identity) *IdentityCache {
17	return &IdentityCache{
18		Identity:  id,
19		repoCache: repoCache,
20	}
21}
22
23func (i *IdentityCache) notifyUpdated() error {
24	return i.repoCache.identityUpdated(i.Identity.Id())
25}
26
27func (i *IdentityCache) Mutate(repo repository.RepoClock, f func(*identity.Mutator)) error {
28	err := i.Identity.Mutate(repo, f)
29	if err != nil {
30		return err
31	}
32	return i.notifyUpdated()
33}
34
35func (i *IdentityCache) Commit() error {
36	err := i.Identity.Commit(i.repoCache.repo)
37	if err != nil {
38		return err
39	}
40	return i.notifyUpdated()
41}
42
43func (i *IdentityCache) CommitAsNeeded() error {
44	err := i.Identity.CommitAsNeeded(i.repoCache.repo)
45	if err != nil {
46		return err
47	}
48	return i.notifyUpdated()
49}