Files
Marwan Sulaiman 0bb95c7351 pkg/storage: make Checker optional in storage.Backend (#1580)
* pkg/storage: make Checker optional in storage.Backend

* pass storage
2020-03-18 19:07:00 -04:00

39 lines
877 B
Go

package storage
import (
"context"
"github.com/gomods/athens/pkg/errors"
)
// Checker is the interface that checks if the version of the module exists
type Checker interface {
// Exists checks whether or not module in specified version is present
// in the backing storage
Exists(ctx context.Context, module, version string) (bool, error)
}
// WithChecker wraps the backend with a Checker implementaiton
func WithChecker(strg Backend) Checker {
if checker, ok := strg.(Checker); ok {
return checker
}
return &checker{strg}
}
type checker struct {
strg Backend
}
func (c *checker) Exists(ctx context.Context, module, version string) (bool, error) {
const op errors.Op = "checker.Exists"
_, err := c.strg.Info(ctx, module, version)
if err != nil {
if errors.Is(err, errors.KindNotFound) {
return false, nil
}
return false, err
}
return true, nil
}