github.com/lmorg/murex@v0.0.0-20240217211045-e081c89cd4ef/builtins/core/config/eval.go (about)

     1  package cmdconfig
     2  
     3  import (
     4  	"errors"
     5  
     6  	"github.com/lmorg/murex/lang"
     7  	"github.com/lmorg/murex/lang/types"
     8  )
     9  
    10  func evalConfig(p *lang.Process) error {
    11  	p.Stdout.SetDataType(types.Null)
    12  
    13  	app, err := p.Parameters.String(1)
    14  	if err != nil {
    15  		return err
    16  	}
    17  
    18  	key, err := p.Parameters.String(2)
    19  	if err != nil {
    20  		return err
    21  	}
    22  
    23  	block, err := p.Parameters.Block(3)
    24  	if err != nil {
    25  		return err
    26  	}
    27  
    28  	dataType := p.Config.DataType(app, key)
    29  
    30  	v, err := p.Config.Get(app, key, dataType)
    31  	if err != nil {
    32  		return err
    33  	}
    34  
    35  	fork := p.Fork(lang.F_PARENT_VARTABLE | lang.F_CREATE_STDIN | lang.F_CREATE_STDOUT)
    36  	fork.Stdin.SetDataType(dataType)
    37  
    38  	_, err = fork.Stdin.Write([]byte(v.(string)))
    39  	if err != nil {
    40  		return errors.New("Couldn't write to eval's stdin: " + err.Error())
    41  	}
    42  
    43  	p.ExitNum, err = fork.Execute(block)
    44  	if err != nil {
    45  		return err
    46  	}
    47  
    48  	b, err := fork.Stdout.ReadAll()
    49  	if err != nil {
    50  		return err
    51  	}
    52  
    53  	return p.Config.Set(app, key, string(b), p.FileRef)
    54  }