github.com/nevalang/neva@v0.23.1-0.20240507185603-7696a9bb8dda/internal/runtime/funcs/unwrap.go (about) 1 package funcs 2 3 import ( 4 "context" 5 6 "github.com/nevalang/neva/internal/runtime" 7 ) 8 9 type unwrap struct{} 10 11 func (unwrap) 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 someOut, err := io.Out.Port("some") 18 if err != nil { 19 return nil, err 20 } 21 22 noneOut, err := io.Out.Port("none") 23 if err != nil { 24 return nil, err 25 } 26 27 return func(ctx context.Context) { 28 var dataMsg runtime.Msg 29 30 for { 31 select { 32 case <-ctx.Done(): 33 return 34 case dataMsg = <-dataIn: 35 } 36 37 if dataMsg == nil { 38 select { 39 case <-ctx.Done(): 40 return 41 case noneOut <- runtime.NewMapMsg(nil): 42 } 43 continue 44 } 45 46 select { 47 case <-ctx.Done(): 48 return 49 case someOut <- dataMsg: 50 } 51 } 52 }, nil 53 }