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

     1  package string
     2  
     3  import (
     4  	"net/url"
     5  
     6  	"github.com/lmorg/murex/config"
     7  	"github.com/lmorg/murex/lang/stdio"
     8  	"github.com/lmorg/murex/lang/types"
     9  )
    10  
    11  func readMap(read stdio.Io, _ *config.Config, callback func(*stdio.Map)) 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  	values, err := url.ParseQuery(string(b))
    29  	if err != nil {
    30  		return err
    31  	}
    32  
    33  	for k := range values {
    34  		for i := range values[k] {
    35  			callback(&stdio.Map{
    36  				Key:      k,
    37  				Value:    values[k][i],
    38  				DataType: types.String,
    39  				Last:     true,
    40  			})
    41  		}
    42  	}
    43  
    44  	return nil
    45  }