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  }