package garage import ( "errors" "fmt" "github.com/minio/minio-go/v7" "github.com/minio/minio-go/v7/pkg/credentials" ) // IsKeyNotFound returns true if the given error is the result of a key not // being found in a bucket. func IsKeyNotFound(err error) bool { var mErr minio.ErrorResponse return errors.As(err, &mErr) && mErr.Code == "NoSuchKey" } // S3APIClient is a client used to interact with garage's S3 API. type S3APIClient = *minio.Client // S3APICredentials describe data fields necessary for authenticating with a // garage S3 API endpoint. type S3APICredentials struct { ID string Secret string } // NewS3APIClient returns a minio client configured to use the given garage S3 API // endpoint. func NewS3APIClient(addr string, creds S3APICredentials) S3APIClient { client, err := minio.New(addr, &minio.Options{ Creds: credentials.NewStaticV4(creds.ID, creds.Secret, ""), Region: Region, }) if err != nil { panic(fmt.Sprintf("initializing minio client at addr %q and with creds %+v", addr, creds)) } return client }