github.com/buildpacks/pack@v0.33.3-0.20240516162812-884dd1837311/pkg/dist/image.go (about)

     1  package dist
     2  
     3  import (
     4  	"encoding/json"
     5  
     6  	"github.com/pkg/errors"
     7  
     8  	"github.com/buildpacks/pack/internal/style"
     9  )
    10  
    11  type Labeled interface {
    12  	Label(name string) (value string, err error)
    13  }
    14  
    15  type Labelable interface {
    16  	SetLabel(name string, value string) error
    17  }
    18  
    19  func SetLabel(labelable Labelable, label string, data interface{}) error {
    20  	dataBytes, err := json.Marshal(data)
    21  	if err != nil {
    22  		return errors.Wrapf(err, "marshalling data to JSON for label %s", style.Symbol(label))
    23  	}
    24  	if err := labelable.SetLabel(label, string(dataBytes)); err != nil {
    25  		return errors.Wrapf(err, "setting label %s", style.Symbol(label))
    26  	}
    27  	return nil
    28  }
    29  
    30  func GetLabel(labeled Labeled, label string, obj interface{}) (ok bool, err error) {
    31  	labelData, err := labeled.Label(label)
    32  	if err != nil {
    33  		return false, errors.Wrapf(err, "retrieving label %s", style.Symbol(label))
    34  	}
    35  	if labelData != "" {
    36  		if err := json.Unmarshal([]byte(labelData), obj); err != nil {
    37  			return false, errors.Wrapf(err, "unmarshalling label %s", style.Symbol(label))
    38  		}
    39  		return true, nil
    40  	}
    41  	return false, nil
    42  }