code: func (rg *ResourceGenerator) Generate() error {
  
  	// Process the primary template first, since the primary template resources
  	// are added to the JSON schema for fragment transform specs
  	fmt.Printf("Downloading cloudformation specification from %s\n", rg.primaryUrl)
  	primaryData, err := rg.downloadSpec(rg.primaryUrl)
  	if err != nil {
  		return err
  	}
  	primarySpec, err := rg.processSpec("cloudformation", primaryData)
  	if err != nil {
  		return err
  	}
  	if err := rg.generateJSONSchema("cloudformation", primarySpec); err != nil {
  		return err
  	}
  
  	for name, url := range rg.fragmentUrls {
  		fmt.Printf("Downloading %s specification from %s\n", name, url)
  		data, err := rg.downloadSpec(url)
  		if err != nil {
  			return err
  		}
  		spec, err := rg.processSpec(name, data)
  		if err != nil {
  			return err
  		}
  		// Append main CloudFormation schema resource types and property types to this fragment
  		for k, v := range primarySpec.Resources {
  			spec.Resources[k] = v
  		}
  		for k, v := range primarySpec.Properties {
  			spec.Properties[k] = v
  		}
  		if err := rg.generateJSONSchema(name, spec); err != nil {
  			return err
  		}
  	}
  
  	if err := rg.generateAllResourcesMap(rg.Results.AllResources); err != nil {
  		return err
  	}
  
  	return nil
  }
docs: // Generate generates Go structs and a JSON Schema from the AWS CloudFormation
  // Resource Specifications provided to NewResourceGenerator