1package cache
2
3import (
4 "github.com/MichaelMure/git-bug/entities/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}