github.com/nevalang/neva@v0.23.1-0.20240507185603-7696a9bb8dda/internal/runtime/funcs/list_sort_string.go (about) 1 package funcs 2 3 import ( 4 "context" 5 6 "github.com/nevalang/neva/internal/runtime" 7 "golang.org/x/exp/slices" 8 ) 9 10 type listSortString struct{} 11 12 func (p listSortString) Create(io runtime.FuncIO, _ runtime.Msg) (func(ctx context.Context), error) { 13 dataIn, err := io.In.Port("data") 14 if err != nil { 15 return nil, err 16 } 17 18 resOut, err := io.Out.Port("res") 19 if err != nil { 20 return nil, err 21 } 22 23 return func(ctx context.Context) { 24 var data runtime.Msg 25 26 for { 27 select { 28 case <-ctx.Done(): 29 return 30 case data = <-dataIn: 31 } 32 33 clone := slices.Clone(data.List()) 34 slices.SortFunc(clone, func(i, j runtime.Msg) bool { 35 return i.Str() < j.Str() 36 }) 37 38 select { 39 case <-ctx.Done(): 40 return 41 case resOut <- runtime.NewListMsg(clone...): 42 } 43 } 44 }, nil 45 }