mirror of
https://github.com/arkadiyt/protodump.git
synced 2026-10-21 17:56:51 +02:00
64 lines
1.4 KiB
Go
64 lines
1.4 KiB
Go
package main
|
|
|
|
import (
|
|
"flag"
|
|
"fmt"
|
|
"log"
|
|
"os"
|
|
"path"
|
|
"strings"
|
|
|
|
"github.com/arkadiyt/protodump/pkg/proto"
|
|
"github.com/arkadiyt/protodump/pkg/scan"
|
|
)
|
|
|
|
var debug bool
|
|
|
|
func Debug(str string, a ...any) (int, error) {
|
|
if debug {
|
|
return fmt.Printf(str, a...)
|
|
}
|
|
return 0, nil
|
|
}
|
|
|
|
func main() {
|
|
cwd, err := os.Getwd()
|
|
if err != nil {
|
|
log.Fatalf("Couldn't determine current working directory: %v\n", err)
|
|
}
|
|
|
|
var file = flag.String("file", "", "The file to extract definitions from")
|
|
var output = flag.String("output", cwd, "The output directory to save definitions in (will be created if it doesn't exist). Defaults to current directory.")
|
|
flag.BoolVar(&debug, "v", false, "Verbose output")
|
|
flag.Parse()
|
|
|
|
if *file == "" {
|
|
fmt.Printf("Usage:\n")
|
|
flag.PrintDefaults()
|
|
return
|
|
}
|
|
|
|
results, err := scan.ScanFile(*file)
|
|
if err != nil {
|
|
log.Fatalf("Got error scanning: %v\n", err)
|
|
}
|
|
|
|
for _, result := range results {
|
|
definition, err := proto.NewFromBytes(result)
|
|
if err != nil {
|
|
Debug("Got error parsing definition: %v\n", err)
|
|
} else {
|
|
filename := definition.Filename()
|
|
if strings.HasSuffix(filename, ".proto") {
|
|
dir := path.Join(*output, path.Dir(filename))
|
|
final := path.Join(dir, path.Base(filename))
|
|
os.MkdirAll(dir, 0700)
|
|
os.WriteFile(final, []byte(definition.String()), 0700)
|
|
fmt.Printf("Wrote %s\n", final)
|
|
} else {
|
|
// Need to investigate further
|
|
}
|
|
}
|
|
}
|
|
}
|