github.com/lmorg/murex@v0.0.0-20240217211045-e081c89cd4ef/builtins/types/querystring/array.go (about)

     1  package string
     2  
     3  import (
     4  	"bytes"
     5  	"context"
     6  
     7  	"github.com/lmorg/murex/lang/stdio"
     8  	"github.com/lmorg/murex/lang/types"
     9  )
    10  
    11  func readArray(_ context.Context, read stdio.Io, callback func([]byte)) error {
    12  	b, err := read.ReadAll()
    13  	if err != nil {
    14  		return err
    15  	}
    16  
    17  	if len(b) == 0 {
    18  		return nil
    19  	}
    20  
    21  	if b[0] == '?' {
    22  		if len(b) == 1 {
    23  			return nil
    24  		}
    25  		b = b[1:]
    26  	}
    27  
    28  	split := bytes.Split(b, []byte{'&'})
    29  	for i := range split {
    30  		callback(split[i])
    31  	}
    32  
    33  	return nil
    34  }
    35  
    36  func readArrayWithType(_ context.Context, read stdio.Io, callback func(interface{}, string)) error {
    37  	b, err := read.ReadAll()
    38  	if err != nil {
    39  		return err
    40  	}
    41  
    42  	if len(b) == 0 {
    43  		return nil
    44  	}
    45  
    46  	if b[0] == '?' {
    47  		if len(b) == 1 {
    48  			return nil
    49  		}
    50  		b = b[1:]
    51  	}
    52  
    53  	split := bytes.Split(b, []byte{'&'})
    54  	for i := range split {
    55  		callback(split[i], types.String)
    56  	}
    57  
    58  	return nil
    59  }