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  }