github.com/myhau/pulumi/pkg/v3@v3.70.2-0.20221116134521-f2775972e587/codegen/go/gen_crd2pulumi.go (about)

     1  package gen
     2  
     3  import (
     4  	"bytes"
     5  	"fmt"
     6  
     7  	"github.com/pulumi/pulumi/pkg/v3/codegen/schema"
     8  )
     9  
    10  // CRDTypes returns a map from each module name to a buffer containing the
    11  // code for its generated types.
    12  func CRDTypes(tool string, pkg *schema.Package) (map[string]*bytes.Buffer, error) {
    13  	if err := pkg.ImportLanguages(map[string]schema.Language{"go": Importer}); err != nil {
    14  		return map[string]*bytes.Buffer{}, err
    15  	}
    16  
    17  	var goPkgInfo GoPackageInfo
    18  	if goInfo, ok := pkg.Language["go"].(GoPackageInfo); ok {
    19  		goPkgInfo = goInfo
    20  	}
    21  	packages := generatePackageContextMap(tool, pkg, goPkgInfo, nil)
    22  
    23  	var pkgMods []string
    24  	for mod := range packages {
    25  		pkgMods = append(pkgMods, mod)
    26  	}
    27  
    28  	buffers := map[string]*bytes.Buffer{}
    29  
    30  	for _, mod := range pkgMods {
    31  		pkg := packages[mod]
    32  		buffer := &bytes.Buffer{}
    33  
    34  		for _, r := range pkg.resources {
    35  			importsAndAliases := map[string]string{}
    36  			pkg.getImports(r, importsAndAliases)
    37  			pkg.genHeader(buffer, []string{"context", "reflect"}, importsAndAliases)
    38  
    39  			if err := pkg.genResource(buffer, r, goPkgInfo.GenerateResourceContainerTypes); err != nil {
    40  				return nil, fmt.Errorf("generating resource %s: %w", mod, err)
    41  			}
    42  		}
    43  
    44  		if len(pkg.types) > 0 {
    45  			for _, t := range pkg.types {
    46  				if err := pkg.genType(buffer, t); err != nil {
    47  					return nil, err
    48  				}
    49  			}
    50  			pkg.genTypeRegistrations(buffer, pkg.types)
    51  		}
    52  
    53  		buffers[mod] = buffer
    54  	}
    55  
    56  	return buffers, nil
    57  }