github.com/treeverse/lakefs@v1.24.1-0.20240520134607-95648127bfb0/pkg/actions/lua/encoding/yaml/yaml.go (about)

     1  package yaml
     2  
     3  import (
     4  	"bytes"
     5  
     6  	"github.com/Shopify/go-lua"
     7  	"github.com/treeverse/lakefs/pkg/actions/lua/util"
     8  	"gopkg.in/yaml.v3"
     9  )
    10  
    11  func Open(l *lua.State) {
    12  	yamlOpen := func(l *lua.State) int {
    13  		lua.NewLibrary(l, yamlLibrary)
    14  		return 1
    15  	}
    16  	lua.Require(l, "encoding/yaml", yamlOpen, false)
    17  	l.Pop(1)
    18  }
    19  
    20  var yamlLibrary = []lua.RegistryFunction{
    21  	{Name: "marshal", Function: yamlMarshal},
    22  	{Name: "unmarshal", Function: yamlUnmarshal},
    23  }
    24  
    25  func check(l *lua.State, err error) {
    26  	if err != nil {
    27  		lua.Errorf(l, "%s", err.Error())
    28  		panic("unreachable")
    29  	}
    30  }
    31  
    32  func yamlMarshal(l *lua.State) int {
    33  	var t interface{}
    34  	var err error
    35  	if !l.IsNil(1) {
    36  		t, err = util.PullTable(l, 1)
    37  		check(l, err)
    38  	}
    39  	var buf bytes.Buffer
    40  	e := yaml.NewEncoder(&buf)
    41  	err = e.Encode(t)
    42  	check(l, err)
    43  	l.PushString(buf.String())
    44  	return 1
    45  }
    46  
    47  func yamlUnmarshal(l *lua.State) int {
    48  	payload := lua.CheckString(l, 1)
    49  	var output interface{}
    50  	check(l, yaml.Unmarshal([]byte(payload), &output))
    51  	return util.DeepPush(l, output)
    52  }