esp-modman/main.go

161 lines
2.7 KiB
Go
Raw Normal View History

2022-12-02 02:24:13 +01:00
package main
import (
"archive/zip"
"fmt"
"os"
"strings"
)
type Command struct {
Name string
Description string
Action func([]string) Result
Arguments []string
IsVarargs bool
}
func Failed(message string) Result {
return Result{
HasFailed: true,
Message: message,
}
}
func Ok(message string) Result {
return Result{
HasFailed: false,
Message: message,
}
}
type Result struct {
Message string
HasFailed bool
}
var commands = []Command{
{
Name: "install",
Description: "Install one or more mod archives into modman",
Arguments: []string{"archive path"},
IsVarargs: true,
Action: func(arguments []string) Result {
var processed = 0
for i := range arguments {
var archivePath = arguments[i]
if strings.HasSuffix(archivePath, ".zip") {
var reader, err = zip.OpenReader(archivePath)
if err == nil {
defer reader.Close()
processed += 1
}
continue
}
}
return Ok(fmt.Sprint(processed, "of", len(arguments), "installed"))
},
},
{
Name: "remove",
Description: "Remove one or more mods from modman",
Arguments: []string{"mod name"},
IsVarargs: true,
Action: func(arguments []string) Result {
// TODO: Implement.
return Failed("Not implemented")
},
},
{
Name: "rename",
Description: "Rename a mod within modman",
Arguments: []string{"mod name", "new name"},
IsVarargs: false,
Action: func(arguments []string) Result {
// TODO: Implement.
return Failed("Not implemented")
},
},
{
Name: "list",
Description: "List all installed mods",
Arguments: []string{},
IsVarargs: false,
Action: func(arguments []string) Result {
// TODO: Implement.
return Failed("Not implemented")
},
},
{
Name: "deploy",
Description: "Deploy all installed and enabled mods",
Arguments: []string{},
IsVarargs: false,
Action: func(arguments []string) Result {
// TODO: Implement.
return Failed("Not implemented")
},
},
}
func main() {
var argCount = len(os.Args)
if argCount == 1 {
fmt.Println("Modman v0.1")
fmt.Println("Enter one of the following commands following modman:")
for i := range commands {
var command = commands[i]
fmt.Print("\t", command.Name)
for j := range command.Arguments {
fmt.Print(" [", command.Arguments[j], "]")
}
if command.IsVarargs {
fmt.Println("...")
} else {
fmt.Println()
}
}
return
}
var commandName = os.Args[1]
for i := range commands {
var command = commands[i]
if command.Name == commandName {
var result = command.Action(os.Args[2:])
if result.HasFailed {
fmt.Fprint(os.Stderr, result.Message)
os.Exit(1)
}
fmt.Print(result.Message)
return
}
}
}