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 }