github.com/elves/elvish@v0.15.0/pkg/eval/mods/daemon/daemon.go (about) 1 // Package daemon implements the builtin daemon: module. 2 package daemon 3 4 import ( 5 "errors" 6 "strconv" 7 8 "github.com/elves/elvish/pkg/daemon" 9 "github.com/elves/elvish/pkg/eval" 10 "github.com/elves/elvish/pkg/eval/vars" 11 ) 12 13 // errDontKnowHowToSpawnDaemon is thrown by daemon:spawn when the Evaler's 14 // DaemonSpawner field is nil. 15 var errDontKnowHowToSpawnDaemon = errors.New("don't know how to spawn daemon") 16 17 // Ns makes the daemon: namespace. 18 func Ns(d daemon.Client, spawnCfg *daemon.SpawnConfig) *eval.Ns { 19 getPid := func() (string, error) { 20 pid, err := d.Pid() 21 return string(strconv.Itoa(pid)), err 22 } 23 24 spawn := func() error { 25 if spawnCfg == nil { 26 return errDontKnowHowToSpawnDaemon 27 } 28 return daemon.Spawn(spawnCfg) 29 } 30 31 // TODO: Deprecate the variable in favor of the function. 32 getPidVar := func() interface{} { 33 pid, err := getPid() 34 if err != nil { 35 return "-1" 36 } 37 return pid 38 } 39 40 return eval.NsBuilder{ 41 "pid": vars.FromGet(getPidVar), 42 "sock": vars.NewReadOnly(string(d.SockPath())), 43 }.AddGoFns("daemon:", map[string]interface{}{ 44 "pid": getPid, 45 "spawn": spawn, 46 }).Ns() 47 }