src.elv.sh@v0.21.0-dev.0.20240515223629-06979efb9a2a/pkg/mods/daemon/daemon.go (about)

     1  // Package daemon implements the builtin daemon: module.
     2  package daemon
     3  
     4  import (
     5  	"strconv"
     6  
     7  	"src.elv.sh/pkg/daemon/daemondefs"
     8  	"src.elv.sh/pkg/eval"
     9  	"src.elv.sh/pkg/eval/vars"
    10  )
    11  
    12  // Ns makes the daemon: namespace.
    13  func Ns(d daemondefs.Client) *eval.Ns {
    14  	getPid := func() (string, error) {
    15  		pid, err := d.Pid()
    16  		return string(strconv.Itoa(pid)), err
    17  	}
    18  
    19  	// TODO: Deprecate the variable in favor of the function.
    20  	getPidVar := func() any {
    21  		pid, err := getPid()
    22  		if err != nil {
    23  			return "-1"
    24  		}
    25  		return pid
    26  	}
    27  
    28  	return eval.BuildNsNamed("daemon").
    29  		AddVars(map[string]vars.Var{
    30  			"pid":  vars.FromGet(getPidVar),
    31  			"sock": vars.NewReadOnly(string(d.SockPath())),
    32  		}).
    33  		AddGoFns(map[string]any{
    34  			"pid": getPid,
    35  		}).Ns()
    36  }