MCPcopy
hub / github.com/google/go-jsonnet / builtinBase64

Function builtinBase64

builtins.go:985–1046  ·  view source on GitHub ↗
(i *interpreter, input value)

Source from the content-addressed store, hash-verified

983}
984
985func builtinBase64(i *interpreter, input value) (value, error) {
986 var byteArr []byte
987
988 var sanityCheck = func(v int) (string, bool) {
989 if v < 0 || 255 < v {
990 msg := fmt.Sprintf("base64 encountered invalid codepoint value in the array (must be 0 <= X <= 255), got %d", v)
991 return msg, false
992 }
993
994 return "", true
995 }
996
997 switch input.(type) {
998 case valueString:
999 vStr, err := i.getString(input)
1000 if err != nil {
1001 return nil, err
1002 }
1003
1004 str := vStr.getGoString()
1005 for _, r := range str {
1006 n := int(r)
1007 msg, ok := sanityCheck(n)
1008 if !ok {
1009 return nil, makeRuntimeError(msg, i.getCurrentStackTrace())
1010 }
1011 }
1012
1013 byteArr = []byte(str)
1014 case *valueArray:
1015 vArr, err := i.getArray(input)
1016 if err != nil {
1017 return nil, err
1018 }
1019
1020 for _, cThunk := range vArr.elements {
1021 cTv, err := cThunk.getValue(i)
1022 if err != nil {
1023 return nil, err
1024 }
1025
1026 vInt, err := i.getInt(cTv)
1027 if err != nil {
1028 msg := fmt.Sprintf("base64 encountered a non-integer value in the array, got %s", cTv.getType().name)
1029 return nil, makeRuntimeError(msg, i.getCurrentStackTrace())
1030 }
1031
1032 msg, ok := sanityCheck(vInt)
1033 if !ok {
1034 return nil, makeRuntimeError(msg, i.getCurrentStackTrace())
1035 }
1036
1037 byteArr = append(byteArr, byte(vInt))
1038 }
1039 default:
1040 msg := fmt.Sprintf("base64 can only base64 encode strings / arrays of single bytes, got %s", input.getType().name)
1041 return nil, makeRuntimeError(msg, i.getCurrentStackTrace())
1042 }

Callers

nothing calls this directly

Calls 9

makeRuntimeErrorFunction · 0.85
makeValueStringFunction · 0.85
getStringMethod · 0.80
getCurrentStackTraceMethod · 0.80
getArrayMethod · 0.80
getIntMethod · 0.80
getGoStringMethod · 0.65
getValueMethod · 0.65
getTypeMethod · 0.65

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…