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