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 }