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