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}