package process 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 }