func Open(path string) (Layout, error) {
	return newDirLayout(path)
}
Open will create an Layout reference to the OCI image at the provided
path. If the image format is not supported, ErrNotImplemented will be
returned. If the path does not exist, os.ErrNotExist will be returned.
package oci
import (
	"errors"
	"fmt"
	"io"
	"path/filepath"
	"strings"
	"github.com/opencontainers/image-spec/specs-go/v1"
	"golang.org/x/net/context"
)
const (
	BlobAlgorithm = "sha256"
	refDirectory = "refs"
	blobDirectory = "blobs"
	layoutFile = "oci-layout"
)
var (
	ErrInvalid = errors.New("invalid image detected")
	ErrNotImplemented = errors.New("operation not implemented")
	ErrClobber = errors.New("operation would clobber existing object")
)
type Layout interface {
	PutBlob(ctx context.Context, reader io.Reader) (digest string, size int64, err error)
	PutReference(ctx context.Context, name string, descriptor *v1.Descriptor) (err error)
	GetBlob(ctx context.Context, digest string) (reader io.ReadCloser, err error)
	Exist(ctx context.Context, digest string) (exist bool, err error)
	GetReference(ctx context.Context, name string) (descriptor *v1.Descriptor, err error)
	DeleteBlob(ctx context.Context, digest string) (err error)
	DeleteReference(ctx context.Context, name string) (err error)
	ListBlobs(ctx context.Context) (digests []string, err error)
	ListReferences(ctx context.Context) (names []string, err error)
	Close() (err error)
	GetBlobPath(ctx context.Context, digest string) (path string, err error)
}