github.com/nextlinux/gosbom@v0.81.1-0.20230627115839-1ff50c281391/schema/json/generate/main.go (about) 1 package main 2 3 import ( 4 "fmt" 5 "os" 6 7 "github.com/dave/jennifer/jen" 8 "github.com/nextlinux/gosbom/schema/json/internal" 9 ) 10 11 // This program generates internal/generated.go. 12 13 const ( 14 pkgImport = "github.com/nextlinux/gosbom/gosbom/pkg" 15 path = "internal/generated.go" 16 ) 17 18 func main() { 19 typeNames, err := internal.AllGosbomMetadataTypeNames() 20 if err != nil { 21 panic(fmt.Errorf("unable to get all metadata type names: %w", err)) 22 } 23 24 fmt.Printf("updating metadata container object with %+v types\n", len(typeNames)) 25 26 f := jen.NewFile("internal") 27 f.HeaderComment("DO NOT EDIT: generated by schema/json/generate/main.go") 28 f.ImportName(pkgImport, "pkg") 29 f.Comment("ArtifactMetadataContainer is a struct that contains all the metadata types for a package, as represented in the pkg.Package.Metadata field.") 30 f.Type().Id("ArtifactMetadataContainer").StructFunc(func(g *jen.Group) { 31 for _, typeName := range typeNames { 32 g.Id(typeName).Qual(pkgImport, typeName) 33 } 34 }) 35 36 rendered := fmt.Sprintf("%#v", f) 37 38 fh, err := os.OpenFile(path, os.O_RDWR|os.O_CREATE|os.O_TRUNC, 0644) 39 if err != nil { 40 panic(fmt.Errorf("unable to open file: %w", err)) 41 } 42 _, err = fh.WriteString(rendered) 43 if err != nil { 44 panic(fmt.Errorf("unable to write file: %w", err)) 45 } 46 if err := fh.Close(); err != nil { 47 panic(fmt.Errorf("unable to close file: %w", err)) 48 } 49 }