package images import ( imagesapi "github.com/containerd/containerd/api/services/images" "github.com/containerd/containerd/api/types/descriptor" "github.com/containerd/containerd/images" ocispec "github.com/opencontainers/image-spec/specs-go/v1" "github.com/pkg/errors" "google.golang.org/grpc" "google.golang.org/grpc/codes" ) func imagesToProto(images []images.Image) []imagesapi.Image { var imagespb []imagesapi.Image for _, image := range images { imagespb = append(imagespb, imageToProto(&image)) } return imagespb } func imagesFromProto(imagespb []imagesapi.Image) []images.Image { var images []images.Image for _, image := range imagespb { images = append(images, imageFromProto(&image)) } return images } func imageToProto(image *images.Image) imagesapi.Image { return imagesapi.Image{ Name: image.Name, Target: descToProto(&image.Target), } } func imageFromProto(imagepb *imagesapi.Image) images.Image { return images.Image{ Name: imagepb.Name, Target: descFromProto(&imagepb.Target), } } func descFromProto(desc *descriptor.Descriptor) ocispec.Descriptor { return ocispec.Descriptor{ MediaType: desc.MediaType, Size: desc.Size_, Digest: desc.Digest, } } func descToProto(desc *ocispec.Descriptor) descriptor.Descriptor { return descriptor.Descriptor{ MediaType: desc.MediaType, Size_: desc.Size, Digest: desc.Digest, } } func rewriteGRPCError(err error) error { if err == nil { return err } switch grpc.Code(errors.Cause(err)) { case codes.AlreadyExists: return images.ErrExists case codes.NotFound: return images.ErrNotFound } return err } func mapGRPCError(err error, id string) error { switch { case images.IsNotFound(err): return grpc.Errorf(codes.NotFound, "image %v not found", id) case images.IsExists(err): return grpc.Errorf(codes.AlreadyExists, "image %v already exists", id) } return err }