github.com/treeverse/lakefs@v1.24.1-0.20240520134607-95648127bfb0/pkg/actions/lua/strings/strings.go (about) 1 package strings 2 3 import ( 4 "strings" 5 6 "github.com/Shopify/go-lua" 7 "github.com/treeverse/lakefs/pkg/actions/lua/util" 8 ) 9 10 func Open(l *lua.State) { 11 strOpen := func(l *lua.State) int { 12 lua.NewLibrary(l, stringLibrary) 13 return 1 14 } 15 lua.Require(l, "strings", strOpen, false) 16 l.Pop(1) 17 } 18 19 var stringLibrary = []lua.RegistryFunction{ 20 {Name: "split", Function: split}, 21 {Name: "trim", Function: trim}, 22 {Name: "replace", Function: replace}, 23 {Name: "has_prefix", Function: hasPrefix}, 24 {Name: "has_suffix", Function: hasSuffix}, 25 {Name: "contains", Function: contains}, 26 } 27 28 func split(l *lua.State) int { 29 str := lua.CheckString(l, 1) 30 sep := lua.CheckString(l, 2) 31 32 strArr := strings.Split(str, sep) 33 34 return util.DeepPush(l, strArr) 35 } 36 37 func trim(l *lua.State) int { 38 str := lua.CheckString(l, 1) 39 l.PushString(strings.TrimSpace(str)) 40 return 1 41 } 42 43 func replace(l *lua.State) int { 44 s := lua.CheckString(l, 1) 45 oldStr := lua.CheckString(l, 2) 46 newStr := lua.CheckString(l, 3) 47 n := lua.CheckInteger(l, 4) 48 49 l.PushString(strings.Replace(s, oldStr, newStr, n)) 50 return 1 51 } 52 53 func hasPrefix(l *lua.State) int { 54 s := lua.CheckString(l, 1) 55 prefix := lua.CheckString(l, 2) 56 l.PushBoolean(strings.HasPrefix(s, prefix)) 57 return 1 58 } 59 60 func hasSuffix(l *lua.State) int { 61 s := lua.CheckString(l, 1) 62 suffix := lua.CheckString(l, 2) 63 l.PushBoolean(strings.HasSuffix(s, suffix)) 64 return 1 65 } 66 67 func contains(l *lua.State) int { 68 s := lua.CheckString(l, 1) 69 substr := lua.CheckString(l, 2) 70 l.PushBoolean(strings.Contains(s, substr)) 71 return 1 72 }