mirror of
https://github.com/opentffoundation/opentf.git
synced 2026-05-09 12:02:55 -04:00
Support for attributes with NestedTypes was added in https://github.com/hashicorp/terraform/pull/28055, and should have included a format version bump: this is a backwards-compatible change, but consumers will need to be updated in order to properly decode attributes (with NestedTypes) going forward.
71 lines
1.6 KiB
Go
71 lines
1.6 KiB
Go
package jsonprovider
|
|
|
|
import (
|
|
"encoding/json"
|
|
|
|
"github.com/hashicorp/terraform/terraform"
|
|
)
|
|
|
|
// FormatVersion represents the version of the json format and will be
|
|
// incremented for any change to this format that requires changes to a
|
|
// consuming parser.
|
|
const FormatVersion = "0.2"
|
|
|
|
// providers is the top-level object returned when exporting provider schemas
|
|
type providers struct {
|
|
FormatVersion string `json:"format_version"`
|
|
Schemas map[string]*Provider `json:"provider_schemas,omitempty"`
|
|
}
|
|
|
|
type Provider struct {
|
|
Provider *schema `json:"provider,omitempty"`
|
|
ResourceSchemas map[string]*schema `json:"resource_schemas,omitempty"`
|
|
DataSourceSchemas map[string]*schema `json:"data_source_schemas,omitempty"`
|
|
}
|
|
|
|
func newProviders() *providers {
|
|
schemas := make(map[string]*Provider)
|
|
return &providers{
|
|
FormatVersion: FormatVersion,
|
|
Schemas: schemas,
|
|
}
|
|
}
|
|
|
|
func Marshal(s *terraform.Schemas) ([]byte, error) {
|
|
providers := newProviders()
|
|
|
|
for k, v := range s.Providers {
|
|
providers.Schemas[k.String()] = marshalProvider(v)
|
|
}
|
|
|
|
ret, err := json.Marshal(providers)
|
|
return ret, err
|
|
}
|
|
|
|
func marshalProvider(tps *terraform.ProviderSchema) *Provider {
|
|
if tps == nil {
|
|
return &Provider{}
|
|
}
|
|
|
|
var ps *schema
|
|
var rs, ds map[string]*schema
|
|
|
|
if tps.Provider != nil {
|
|
ps = marshalSchema(tps.Provider)
|
|
}
|
|
|
|
if tps.ResourceTypes != nil {
|
|
rs = marshalSchemas(tps.ResourceTypes, tps.ResourceTypeSchemaVersions)
|
|
}
|
|
|
|
if tps.DataSources != nil {
|
|
ds = marshalSchemas(tps.DataSources, tps.ResourceTypeSchemaVersions)
|
|
}
|
|
|
|
return &Provider{
|
|
Provider: ps,
|
|
ResourceSchemas: rs,
|
|
DataSourceSchemas: ds,
|
|
}
|
|
}
|