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  }