1
0
mirror of https://github.com/regclient/regclient.git synced 2025-07-29 09:01:11 +03:00

Refactoring the blob package

The main goal was to remove unnecessary interfaces. To avoid breaking
users, type aliases were used on the old interface names.
Comments were updated to better align with the godoc style.

Signed-off-by: Brandon Mitchell <git@bmitch.net>
This commit is contained in:
Brandon Mitchell
2023-09-26 20:18:19 -04:00
parent 934e52602a
commit cf47d837b7
6 changed files with 273 additions and 223 deletions

View File

@ -1,19 +1,39 @@
// Package blob is the underlying type for pushing and pulling blobs
// Package blob is the underlying type for pushing and pulling blobs.
package blob
import (
"io"
"net/http"
"github.com/opencontainers/go-digest"
"github.com/regclient/regclient/types"
v1 "github.com/regclient/regclient/types/oci/v1"
"github.com/regclient/regclient/types/ref"
)
// Blob interface is used for returning blobs
// Blob interface is used for returning blobs.
type Blob interface {
Common
// GetDescriptor returns the descriptor associated with the blob.
GetDescriptor() types.Descriptor
// RawBody returns the raw content of the blob.
RawBody() ([]byte, error)
// RawHeaders returns the headers received from the registry.
RawHeaders() http.Header
// Response returns the response associated with the blob.
Response() *http.Response
// Digest returns the provided or calculated digest of the blob.
//
// Deprecated: Digest should be replaced by GetDescriptor().Digest.
Digest() digest.Digest
// Length returns the provided or calculated length of the blob.
//
// Deprecated: Length should be replaced by GetDescriptor().Size.
Length() int64
// MediaType returns the Content-Type header received from the registry.
//
// Deprecated: MediaType should be replaced by GetDescriptor().MediaType.
MediaType() string
}
type blobConfig struct {
@ -26,51 +46,52 @@ type blobConfig struct {
rawBody []byte
}
// Opts is used for options to create a new blob.
type Opts func(*blobConfig)
// WithDesc specifies the descriptor associated with the blob
// WithDesc specifies the descriptor associated with the blob.
func WithDesc(d types.Descriptor) Opts {
return func(bc *blobConfig) {
bc.desc = d
}
}
// WithHeader defines the headers received when pulling a blob
// WithHeader defines the headers received when pulling a blob.
func WithHeader(header http.Header) Opts {
return func(bc *blobConfig) {
bc.header = header
}
}
// WithImage provides the OCI Image config needed for config blobs
// WithImage provides the OCI Image config needed for config blobs.
func WithImage(image v1.Image) Opts {
return func(bc *blobConfig) {
bc.image = &image
}
}
// WithRawBody defines the raw blob contents for OCIConfig
// WithRawBody defines the raw blob contents for OCIConfig.
func WithRawBody(raw []byte) Opts {
return func(bc *blobConfig) {
bc.rawBody = raw
}
}
// WithReader defines the reader for a new blob
// WithReader defines the reader for a new blob.
func WithReader(rc io.Reader) Opts {
return func(bc *blobConfig) {
bc.rdr = rc
}
}
// WithRef specifies the reference where the blob was pulled from
// WithRef specifies the reference where the blob was pulled from.
func WithRef(r ref.Ref) Opts {
return func(bc *blobConfig) {
bc.r = r
}
}
// WithResp includes the http response, which is used to extract the headers and reader
// WithResp includes the http response, which is used to extract the headers and reader.
func WithResp(resp *http.Response) Opts {
return func(bc *blobConfig) {
bc.resp = resp