go-hep.org/x/hep@v0.38.1/cmd/podio-gen/main.go (about) 1 // Copyright ©2020 The go-hep Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style 3 // license that can be found in the LICENSE file. 4 5 // Command podio-gen generates a complete EDM from a PODIO YAML file definition. 6 // 7 // Usage: podio-gen [OPTIONS] edm.yaml 8 // 9 // Example: 10 // 11 // $> podio-gen -p myedm -o out.go -r 'edm4hep::->edm_,ExNamespace::->exns_' edm.yaml 12 // 13 // Options: 14 // 15 // -o string 16 // path to the output file containing the generated code (default "out.go") 17 // -p string 18 // package name for the PODIO generated types (default "podio") 19 // -r string 20 // comma-separated list of rewrite rules (e.g., 'edm4hep::->edm_') 21 package main // import "go-hep.org/x/hep/cmd/podio-gen" 22 23 import ( 24 "flag" 25 "fmt" 26 "io" 27 "log" 28 "os" 29 ) 30 31 func main() { 32 log.SetPrefix("podio: ") 33 log.SetFlags(0) 34 35 var ( 36 pkg = flag.String("p", "podio", "package name for the PODIO generated types") 37 oname = flag.String("o", "out.go", "path to the output file containing the generated code") 38 rewrite = flag.String("r", "", "comma-separated list of rewrite rules (e.g., 'edm4hep::->edm_')") 39 ) 40 41 flag.Usage = func() { 42 fmt.Printf(`podio-gen generates a complete EDM from a PODIO YAML file definition. 43 44 Usage: podio-gen [OPTIONS] edm.yaml 45 46 Example: 47 48 $> podio-gen -p myedm -o out.go -r 'edm4hep::->edm_,ExNamespace::->exns_' edm.yaml 49 50 Options: 51 `) 52 flag.PrintDefaults() 53 } 54 55 flag.Parse() 56 57 switch flag.NArg() { 58 case 0: 59 flag.Usage() 60 log.Fatalf("missing input PODIO file") 61 case 1: 62 // ok 63 default: 64 flag.Usage() 65 log.Fatalf("too many input PODIO files") 66 } 67 68 out, err := os.Create(*oname) 69 if err != nil { 70 log.Fatalf("could not create output file %q: %+v", *oname, err) 71 } 72 defer out.Close() 73 74 fname := flag.Arg(0) 75 76 err = process(out, *pkg, fname, *rewrite) 77 if err != nil { 78 log.Fatalf("could not process %q: %+v", fname, err) 79 } 80 81 err = out.Close() 82 if err != nil { 83 log.Fatalf("could not save output file %q: %+v", *oname, err) 84 } 85 } 86 87 func process(w io.Writer, pkg, fname, rules string) error { 88 g, err := newGenerator(w, pkg, fname, rules) 89 if err != nil { 90 return fmt.Errorf("could not create PODIO generator: %w", err) 91 } 92 93 err = g.generate() 94 if err != nil { 95 return fmt.Errorf("could not generate PODIO code for %q: %w", fname, err) 96 } 97 98 return nil 99 }