github.com/tilt-dev/tilt@v0.33.15-0.20240515162809-0a22ed45d8a0/internal/controllers/core/uibutton/hash.go (about) 1 package uibutton 2 3 import ( 4 "crypto" 5 "fmt" 6 7 jsoniter "github.com/json-iterator/go" 8 "github.com/pkg/errors" 9 10 "github.com/tilt-dev/tilt/pkg/apis/core/v1alpha1" 11 ) 12 13 const annotationSpecHash = "uibuttonspec-hash" 14 15 var defaultJSONIterator = createDefaultJSONIterator() 16 17 func createDefaultJSONConfig() jsoniter.Config { 18 return jsoniter.Config{ 19 EscapeHTML: true, 20 SortMapKeys: true, 21 ValidateJsonRawMessage: true, 22 CaseSensitive: true, 23 } 24 } 25 26 func createDefaultJSONIterator() jsoniter.API { 27 return createDefaultJSONConfig().Froze() 28 } 29 30 func hashUIButtonSpec(spec v1alpha1.UIButtonSpec) (string, error) { 31 data, err := defaultJSONIterator.Marshal(spec) 32 if err != nil { 33 return "", errors.Wrap(err, "serializing spec to json") 34 } 35 36 h := crypto.SHA1.New() 37 _, err = h.Write(data) 38 if err != nil { 39 return "", errors.Wrap(err, "writing to hash") 40 } 41 return fmt.Sprintf("%x", h.Sum(nil)[:10]), nil 42 }