Signed-off-by: Matheus Sampaio Queiroga <srherobrine20@gmail.com>
35 lines
895 B
Go
35 lines
895 B
Go
package exec
|
|
|
|
import (
|
|
"fmt"
|
|
"io"
|
|
)
|
|
|
|
var makeFs = make(map[string]RegisterNewRootfs[Rootfs])
|
|
|
|
type RegisterNewRootfs[T Rootfs] func(...any) (T, error)
|
|
|
|
type Rootfs interface {
|
|
NewProcess() (Proc, error) // Return new struct to start process
|
|
Close() error // Close session
|
|
Tar(io.Writer) error // return tar reader file without copression
|
|
FromTar(r io.Reader) error // Extract tar to rootfs path
|
|
}
|
|
|
|
// Register new rootfs
|
|
func RegisterRootfs[T Rootfs](typeName string, makeProc RegisterNewRootfs[T]) error {
|
|
if makeFs == nil {
|
|
return fmt.Errorf("cannot append to makeFs register")
|
|
}
|
|
makeFs[typeName] = func(a ...any) (Rootfs, error) { return makeProc(a...) }
|
|
return nil
|
|
}
|
|
|
|
// Return new rootfs struct
|
|
func NewRootfs(typeName string, opts ...any) (Rootfs, error) {
|
|
if newProc, ok := makeFs[typeName]; ok {
|
|
return newProc(opts...)
|
|
}
|
|
return nil, ErrNoProcFound
|
|
}
|