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 }