github.com/nevalang/neva@v0.23.1-0.20240507185603-7696a9bb8dda/internal/runtime/funcs/string_join.go (about) 1 package funcs 2 3 import ( 4 "context" 5 "strings" 6 7 "github.com/nevalang/neva/internal/runtime" 8 ) 9 10 type stringJoin struct{} 11 12 func (p stringJoin) 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 builder := strings.Builder{} 34 list := data.List() 35 for i := range list { 36 builder.WriteString(list[i].Str()) 37 } 38 39 resOut <- runtime.NewStrMsg(builder.String()) 40 } 41 }, nil 42 }