github.com/lmorg/murex@v0.0.0-20240217211045-e081c89cd4ef/builtins/core/config/cmd.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  	"github.com/lmorg/murex/utils/json"
     9  )
    10  
    11  func init() {
    12  	lang.DefineFunction("config", cmdConfig, types.Any)
    13  	lang.DefineFunction("!config", bangConfig, types.Null)
    14  }
    15  
    16  func cmdConfig(p *lang.Process) error {
    17  	if p.Parameters.Len() == 0 {
    18  		return allConfig(p)
    19  	}
    20  
    21  	option, _ := p.Parameters.String(0)
    22  	switch option {
    23  	case "get":
    24  		return getConfig(p)
    25  
    26  	case "set":
    27  		return setConfig(p)
    28  
    29  	case "eval":
    30  		return evalConfig(p)
    31  
    32  	case "define":
    33  		return defineConfig(p)
    34  
    35  	case "default":
    36  		return defaultConfig(p)
    37  
    38  	default:
    39  		p.Stdout.SetDataType(types.Null)
    40  		return errors.New("unknown option. Please get, set, eval, default or define")
    41  	}
    42  }
    43  
    44  func allConfig(p *lang.Process) error {
    45  	p.Stdout.SetDataType(types.Json)
    46  
    47  	b, err := json.Marshal(p.Config.DumpConfig(), p.Stdout.IsTTY())
    48  	if err != nil {
    49  		return err
    50  	}
    51  
    52  	_, err = p.Stdout.Writeln(b)
    53  	return err
    54  }
    55  
    56  func getConfig(p *lang.Process) error {
    57  	app, _ := p.Parameters.String(1)
    58  	key, _ := p.Parameters.String(2)
    59  	val, err := p.Config.Get(app, key, types.String)
    60  	if err != nil {
    61  		return err
    62  	}
    63  	p.Stdout.SetDataType(p.Config.DataType(app, key))
    64  	p.Stdout.Writeln([]byte(val.(string)))
    65  	return nil
    66  }
    67  
    68  func setConfig(p *lang.Process) error {
    69  	p.Stdout.SetDataType(types.Null)
    70  	app, _ := p.Parameters.String(1)
    71  	key, _ := p.Parameters.String(2)
    72  	var val string
    73  
    74  	if p.IsMethod {
    75  		b, err := p.Stdin.ReadAll()
    76  		if err != nil {
    77  			return err
    78  		}
    79  		val = string(b)
    80  
    81  	} else {
    82  		val, _ = p.Parameters.String(3)
    83  	}
    84  
    85  	return p.Config.Set(app, key, val, p.FileRef)
    86  }
    87  
    88  func defaultConfig(p *lang.Process) error {
    89  	app, _ := p.Parameters.String(1)
    90  	key, _ := p.Parameters.String(2)
    91  	return p.Config.Default(app, key, p.FileRef)
    92  }
    93  
    94  func bangConfig(p *lang.Process) error {
    95  	app, _ := p.Parameters.String(0)
    96  	key, _ := p.Parameters.String(1)
    97  	return p.Config.Default(app, key, p.FileRef)
    98  }