in generate/generate.go [160:232]
func (rg *ResourceGenerator) processSpec(specname string, data []byte) (*CloudFormationResourceSpecification, error) {
// Unmarshall the JSON specification
spec := &CloudFormationResourceSpecification{}
if err := json.Unmarshal(data, spec); err != nil {
return nil, err
}
// Add the resources processed to the ResourceGenerator output
for name := range spec.Resources {
sname, err := structName(name)
if err != nil {
return nil, err
}
pname, err := packageName(name, true)
if err != nil {
return nil, err
}
basename, err := packageName(name, false)
if err != nil {
return nil, err
}
rg.Results.AllResources = append(rg.Results.AllResources, GeneratedResource{
Name: name,
BaseName: basename,
PackageName: pname,
StructName: sname,
Global: false,
})
}
// Add the globals processed to the ResourceGenerator output
for name := range spec.Globals.Children {
pname, basename, sname := "global", name, name
rg.Results.AllResources = append(rg.Results.AllResources, GeneratedResource{
Name: name,
BaseName: basename,
PackageName: pname,
StructName: sname,
Global: true,
})
}
// Write all of the resources in the spec file
for name, resource := range spec.Resources {
if err := rg.generateResources(name, resource, false, spec); err != nil {
return nil, err
}
}
// Write all of the custom types in the spec file
for name, resource := range spec.Properties {
if err := rg.generateResources(name, resource, true, spec); err != nil {
return nil, err
}
}
// Write all of the globals in the spec file
for name, globals := range spec.Globals.Children {
if err := rg.generateGlobals(name, globals, spec); err != nil {
return nil, err
}
}
return spec, nil
}