Files
exec/process/quick.go
T
2026-06-18 22:39:18 -03:00

58 lines
1.3 KiB
Go

package process
import (
"errors"
"fmt"
)
type RegisterNewProc[T Proc] func() (T, error)
var (
ErrNoProcFound = errors.New("cannot locate procType")
ErrNoProcess = errors.New("process not running")
ErrNoCallStart = errors.New("process ared runnning, dont call Start")
ErrAppendProcess = errors.New("cannot append to makeProcs register")
makeProcs = make(map[string]RegisterNewProc[Proc])
)
// RegisterProcess new proc
func RegisterProcess[T Proc](makeProc RegisterNewProc[T], names ...string) error {
if makeProcs == nil {
return ErrAppendProcess
}
for _, name := range names {
makeProcs[name] = func() (proc Proc, err error) {
defer func() {
if err2, ok := recover().(error); ok && err != nil {
err = fmt.Errorf("return new process: %w", err2)
}
}()
return makeProc()
}
}
return nil
}
// Return new process struct
func GetNewProc(typeName string) (Proc, error) {
if newProc, ok := makeProcs[typeName]; ok {
return newProc()
}
return nil, ErrNoProcFound
}
// Make new process and start command
func ReturnNewProcess(typeName string, options *Exec) (Proc, error) {
if newProc, ok := makeProcs[typeName]; ok {
proc, err := newProc()
if err != nil {
return nil, err
}
err = proc.Start(options)
return proc, err
}
return nil, ErrNoProcFound
}