package main import "os" import "fmt" import "strings" import "path/filepath" import "git.tebibyte.media/sashakoshka/hopp/generate" func main() { name := os.Args[0] if len(os.Args) != 3 { fmt.Fprintf(os.Stderr, "Usage: %s SOURCE DESTINATION\n", name) os.Exit(2) } source := os.Args[1] destination := os.Args[2] input, err := os.Open(source) handleErr(1, err) defer input.Close() protocol, err := generate.ParseReader(input) handleErr(1, err) absDestination, err := filepath.Abs(destination) handleErr(1, err) packageName := cleanPackageName(strings.ReplaceAll( strings.ToLower(filepath.Base(absDestination)), " ", "_")) destination = filepath.Join(os.Args[2], "generated.go") output, err := os.Create(destination) handleErr(1, err) err = protocol.Generate(output, packageName) handleErr(1, err) fmt.Fprintf(os.Stderr, "%s: OK\n", name) } func handleErr(code int, err error) { if err != nil { fmt.Fprintf(os.Stderr, "%s: %v\n", os.Args[0], err) os.Exit(code) } } func cleanPackageName(str string) string { buffer := []byte(str) j := 0 for _, b := range buffer { if ('a' <= b && b <= 'z') || ('A' <= b && b <= 'Z') || ('0' <= b && b <= '9') || b == '_' || b == ' ' { buffer[j] = b j++ } } return string(buffer[:j]) }