github.com/hamba/avro/v2@v2.22.1-0.20240518180522-aff3955acf7d/cmd/avrosv/main.go (about)

     1  package main
     2  
     3  import (
     4  	"flag"
     5  	"fmt"
     6  	"io"
     7  	"os"
     8  
     9  	"github.com/hamba/avro/v2"
    10  )
    11  
    12  type config struct {
    13  	Verbose bool
    14  }
    15  
    16  func main() {
    17  	os.Exit(realMain(os.Args, os.Stdout, os.Stderr))
    18  }
    19  
    20  func realMain(args []string, stdout, stderr io.Writer) int {
    21  	var cfg config
    22  	flgs := flag.NewFlagSet("avrosv", flag.ExitOnError)
    23  	flgs.SetOutput(stderr)
    24  	flgs.BoolVar(&cfg.Verbose, "v", false, "Verbose output (dump final parsed schema).")
    25  	flgs.Usage = func() {
    26  		_, _ = fmt.Fprintln(stderr, "Usage: avrosv [options] schemas")
    27  		_, _ = fmt.Fprintln(stderr, "Options:")
    28  		flgs.PrintDefaults()
    29  		_, _ = fmt.Fprintln(stderr, "\nSchemas are processed in the order they appear.")
    30  	}
    31  	if err := flgs.Parse(args[1:]); err != nil {
    32  		return 1
    33  	}
    34  	if flgs.NArg() < 1 {
    35  		_, _ = fmt.Fprintln(stderr, "Error: at least one schema is required")
    36  		return 1
    37  	}
    38  
    39  	schema, err := avro.ParseFiles(flgs.Args()...)
    40  	if err != nil {
    41  		_, _ = fmt.Fprintf(stderr, "Error: %v\n", err)
    42  		return 2
    43  	}
    44  
    45  	if cfg.Verbose {
    46  		fmt.Fprintln(stdout, schema)
    47  	}
    48  
    49  	return 0
    50  }