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  }