package kwallet import ( "context" "email-mcp/internal/secretstore" ) type Client interface { IsAvailable(ctx context.Context) error Open(ctx context.Context) error WriteEntry(ctx context.Context, key string, value []byte) error ReadEntry(ctx context.Context, key string) ([]byte, error) } type Store struct { client Client } var _ secretstore.Store = (*Store)(nil) func NewStore(client Client) *Store { return &Store{client: client} } func (s *Store) Save(ctx context.Context, key string, cred secretstore.Credential) error { if err := s.client.IsAvailable(ctx); err != nil { return err } if err := s.client.Open(ctx); err != nil { return err } data, err := secretstore.MarshalCredential(cred) if err != nil { return err } return s.client.WriteEntry(ctx, key, data) } func (s *Store) Load(ctx context.Context, key string) (secretstore.Credential, error) { if err := s.client.IsAvailable(ctx); err != nil { return secretstore.Credential{}, err } if err := s.client.Open(ctx); err != nil { return secretstore.Credential{}, err } data, err := s.client.ReadEntry(ctx, key) if err != nil { return secretstore.Credential{}, err } return secretstore.UnmarshalCredential(data) }