src.elv.sh@v0.21.0-dev.0.20240515223629-06979efb9a2a/pkg/daemon/service.go (about) 1 package daemon 2 3 import ( 4 "syscall" 5 6 "src.elv.sh/pkg/daemon/internal/api" 7 "src.elv.sh/pkg/store/storedefs" 8 ) 9 10 // A net/rpc service for the daemon. 11 type service struct { 12 version int 13 store storedefs.Store 14 err error 15 } 16 17 // Implementations of RPC methods. 18 19 // Version returns the API version number. 20 func (s *service) Version(req *api.VersionRequest, res *api.VersionResponse) error { 21 res.Version = s.version 22 return nil 23 } 24 25 // Pid returns the process ID of the daemon. 26 func (s *service) Pid(req *api.PidRequest, res *api.PidResponse) error { 27 res.Pid = syscall.Getpid() 28 return nil 29 } 30 31 func (s *service) NextCmdSeq(req *api.NextCmdSeqRequest, res *api.NextCmdSeqResponse) error { 32 if s.err != nil { 33 return s.err 34 } 35 seq, err := s.store.NextCmdSeq() 36 res.Seq = seq 37 return err 38 } 39 40 func (s *service) AddCmd(req *api.AddCmdRequest, res *api.AddCmdResponse) error { 41 if s.err != nil { 42 return s.err 43 } 44 seq, err := s.store.AddCmd(req.Text) 45 res.Seq = seq 46 return err 47 } 48 49 func (s *service) DelCmd(req *api.DelCmdRequest, res *api.DelCmdResponse) error { 50 if s.err != nil { 51 return s.err 52 } 53 err := s.store.DelCmd(req.Seq) 54 return err 55 } 56 57 func (s *service) Cmd(req *api.CmdRequest, res *api.CmdResponse) error { 58 if s.err != nil { 59 return s.err 60 } 61 text, err := s.store.Cmd(req.Seq) 62 res.Text = text 63 return err 64 } 65 66 func (s *service) CmdsWithSeq(req *api.CmdsWithSeqRequest, res *api.CmdsWithSeqResponse) error { 67 if s.err != nil { 68 return s.err 69 } 70 cmds, err := s.store.CmdsWithSeq(req.From, req.Upto) 71 res.Cmds = cmds 72 return err 73 } 74 75 func (s *service) NextCmd(req *api.NextCmdRequest, res *api.NextCmdResponse) error { 76 if s.err != nil { 77 return s.err 78 } 79 cmd, err := s.store.NextCmd(req.From, req.Prefix) 80 res.Seq, res.Text = cmd.Seq, cmd.Text 81 return err 82 } 83 84 func (s *service) PrevCmd(req *api.PrevCmdRequest, res *api.PrevCmdResponse) error { 85 if s.err != nil { 86 return s.err 87 } 88 cmd, err := s.store.PrevCmd(req.Upto, req.Prefix) 89 res.Seq, res.Text = cmd.Seq, cmd.Text 90 return err 91 } 92 93 func (s *service) AddDir(req *api.AddDirRequest, res *api.AddDirResponse) error { 94 if s.err != nil { 95 return s.err 96 } 97 return s.store.AddDir(req.Dir, req.IncFactor) 98 } 99 100 func (s *service) DelDir(req *api.DelDirRequest, res *api.DelDirResponse) error { 101 if s.err != nil { 102 return s.err 103 } 104 return s.store.DelDir(req.Dir) 105 } 106 107 func (s *service) Dirs(req *api.DirsRequest, res *api.DirsResponse) error { 108 if s.err != nil { 109 return s.err 110 } 111 dirs, err := s.store.Dirs(req.Blacklist) 112 res.Dirs = dirs 113 return err 114 }