github.com/mgoltzsche/ctnr@v0.7.1-alpha/image/image.go (about)

     1  package image
     2  
     3  import (
     4  	"time"
     5  
     6  	digest "github.com/opencontainers/go-digest"
     7  	ispecs "github.com/opencontainers/image-spec/specs-go/v1"
     8  )
     9  
    10  type ImageInfo struct {
    11  	Tag            *TagName
    12  	ManifestDigest digest.Digest
    13  	Manifest       ispecs.Manifest
    14  	Created        time.Time
    15  	LastUsed       time.Time
    16  }
    17  
    18  func NewImageInfo(manifestDigest digest.Digest, manifest ispecs.Manifest, name *TagName, created, lastUsed time.Time) ImageInfo {
    19  	return ImageInfo{name, manifestDigest, manifest, created, lastUsed}
    20  }
    21  
    22  func (img *ImageInfo) ID() digest.Digest {
    23  	return img.Manifest.Config.Digest
    24  }
    25  
    26  func (img *ImageInfo) Size() (size uint64) {
    27  	for _, l := range img.Manifest.Layers {
    28  		if l.Size > 0 {
    29  			size += uint64(l.Size)
    30  		}
    31  	}
    32  	return
    33  }
    34  
    35  type Image struct {
    36  	ImageInfo
    37  	Config ispecs.Image
    38  }
    39  
    40  type TagName struct {
    41  	Repo string
    42  	Ref  string
    43  }
    44  
    45  func (t *TagName) String() string {
    46  	s := "<no tag>"
    47  	if t != nil {
    48  		s = t.Repo + ":" + t.Ref
    49  	}
    50  	return s
    51  }
    52  
    53  func NewImage(info ImageInfo, config ispecs.Image) Image {
    54  	return Image{info, config}
    55  }
    56  
    57  type UnpackableImage struct {
    58  	*Image
    59  	unpacker ImageUnpacker
    60  }
    61  
    62  func NewUnpackableImage(img *Image, unpacker ImageUnpacker) *UnpackableImage {
    63  	return &UnpackableImage{img, unpacker}
    64  }
    65  
    66  func (img *UnpackableImage) Unpack(dest string) error {
    67  	return img.unpacker.UnpackImageLayers(img.ID(), dest)
    68  }
    69  
    70  func (img *UnpackableImage) Config() *ispecs.Image {
    71  	return &img.Image.Config
    72  }