mirror of
https://github.com/opentofu/opentofu.git
synced 2024-12-25 16:31:10 -06:00
71 lines
2.1 KiB
Go
71 lines
2.1 KiB
Go
// Copyright (c) HashiCorp, Inc.
|
|
// SPDX-License-Identifier: MPL-2.0
|
|
|
|
package jsonprovider
|
|
|
|
import (
|
|
"encoding/json"
|
|
|
|
"github.com/hashicorp/terraform/internal/configs/configschema"
|
|
"github.com/zclconf/go-cty/cty"
|
|
)
|
|
|
|
type Attribute struct {
|
|
AttributeType json.RawMessage `json:"type,omitempty"`
|
|
AttributeNestedType *NestedType `json:"nested_type,omitempty"`
|
|
Description string `json:"description,omitempty"`
|
|
DescriptionKind string `json:"description_kind,omitempty"`
|
|
Deprecated bool `json:"deprecated,omitempty"`
|
|
Required bool `json:"required,omitempty"`
|
|
Optional bool `json:"optional,omitempty"`
|
|
Computed bool `json:"computed,omitempty"`
|
|
Sensitive bool `json:"sensitive,omitempty"`
|
|
}
|
|
|
|
type NestedType struct {
|
|
Attributes map[string]*Attribute `json:"attributes,omitempty"`
|
|
NestingMode string `json:"nesting_mode,omitempty"`
|
|
}
|
|
|
|
func marshalStringKind(sk configschema.StringKind) string {
|
|
switch sk {
|
|
default:
|
|
return "plain"
|
|
case configschema.StringMarkdown:
|
|
return "markdown"
|
|
}
|
|
}
|
|
|
|
func marshalAttribute(attr *configschema.Attribute) *Attribute {
|
|
ret := &Attribute{
|
|
Description: attr.Description,
|
|
DescriptionKind: marshalStringKind(attr.DescriptionKind),
|
|
Required: attr.Required,
|
|
Optional: attr.Optional,
|
|
Computed: attr.Computed,
|
|
Sensitive: attr.Sensitive,
|
|
Deprecated: attr.Deprecated,
|
|
}
|
|
|
|
// we're not concerned about errors because at this point the schema has
|
|
// already been checked and re-checked.
|
|
if attr.Type != cty.NilType {
|
|
attrTy, _ := attr.Type.MarshalJSON()
|
|
ret.AttributeType = attrTy
|
|
}
|
|
|
|
if attr.NestedType != nil {
|
|
nestedTy := NestedType{
|
|
NestingMode: nestingModeString(attr.NestedType.Nesting),
|
|
}
|
|
attrs := make(map[string]*Attribute, len(attr.NestedType.Attributes))
|
|
for k, attr := range attr.NestedType.Attributes {
|
|
attrs[k] = marshalAttribute(attr)
|
|
}
|
|
nestedTy.Attributes = attrs
|
|
ret.AttributeNestedType = &nestedTy
|
|
}
|
|
|
|
return ret
|
|
}
|