terraform-provider-gitea/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov6/internal/fromproto/schema.go
dependabot[bot] 910ccdb092
Bump github.com/hashicorp/terraform-plugin-sdk/v2 from 2.26.1 to 2.27.0
Bumps [github.com/hashicorp/terraform-plugin-sdk/v2](https://github.com/hashicorp/terraform-plugin-sdk) from 2.26.1 to 2.27.0.
- [Release notes](https://github.com/hashicorp/terraform-plugin-sdk/releases)
- [Changelog](https://github.com/hashicorp/terraform-plugin-sdk/blob/main/CHANGELOG.md)
- [Commits](https://github.com/hashicorp/terraform-plugin-sdk/compare/v2.26.1...v2.27.0)

---
updated-dependencies:
- dependency-name: github.com/hashicorp/terraform-plugin-sdk/v2
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-07-03 20:21:30 +00:00

148 lines
3.6 KiB
Go

// Copyright (c) HashiCorp, Inc.
// SPDX-License-Identifier: MPL-2.0
package fromproto
import (
"fmt"
"github.com/hashicorp/terraform-plugin-go/tfprotov6"
"github.com/hashicorp/terraform-plugin-go/tfprotov6/internal/tfplugin6"
"github.com/hashicorp/terraform-plugin-go/tftypes"
)
func Schema(in *tfplugin6.Schema) (*tfprotov6.Schema, error) {
var resp tfprotov6.Schema
resp.Version = in.Version
if in.Block != nil {
block, err := SchemaBlock(in.Block)
if err != nil {
return &resp, err
}
resp.Block = block
}
return &resp, nil
}
func SchemaBlock(in *tfplugin6.Schema_Block) (*tfprotov6.SchemaBlock, error) {
resp := &tfprotov6.SchemaBlock{
Version: in.Version,
Description: in.Description,
DescriptionKind: StringKind(in.DescriptionKind),
Deprecated: in.Deprecated,
}
attrs, err := SchemaAttributes(in.Attributes)
if err != nil {
return resp, err
}
resp.Attributes = attrs
blocks, err := SchemaNestedBlocks(in.BlockTypes)
if err != nil {
return resp, err
}
resp.BlockTypes = blocks
return resp, nil
}
func SchemaAttribute(in *tfplugin6.Schema_Attribute) (*tfprotov6.SchemaAttribute, error) {
resp := &tfprotov6.SchemaAttribute{
Name: in.Name,
Description: in.Description,
Required: in.Required,
Optional: in.Optional,
Computed: in.Computed,
Sensitive: in.Sensitive,
DescriptionKind: StringKind(in.DescriptionKind),
Deprecated: in.Deprecated,
}
if in.Type != nil {
typ, err := tftypes.ParseJSONType(in.Type) //nolint:staticcheck
if err != nil {
return resp, err
}
resp.Type = typ
}
if in.NestedType != nil {
nb, err := SchemaObject(in.NestedType)
if err != nil {
return resp, err
}
resp.NestedType = nb
}
return resp, nil
}
func SchemaAttributes(in []*tfplugin6.Schema_Attribute) ([]*tfprotov6.SchemaAttribute, error) {
resp := make([]*tfprotov6.SchemaAttribute, 0, len(in))
for pos, a := range in {
if a == nil {
resp = append(resp, nil)
continue
}
attr, err := SchemaAttribute(a)
if err != nil {
return resp, fmt.Errorf("error converting schema attribute %d: %w", pos, err)
}
resp = append(resp, attr)
}
return resp, nil
}
func SchemaNestedBlock(in *tfplugin6.Schema_NestedBlock) (*tfprotov6.SchemaNestedBlock, error) {
resp := &tfprotov6.SchemaNestedBlock{
TypeName: in.TypeName,
Nesting: SchemaNestedBlockNestingMode(in.Nesting),
MinItems: in.MinItems,
MaxItems: in.MaxItems,
}
if in.Block != nil {
block, err := SchemaBlock(in.Block)
if err != nil {
return resp, err
}
resp.Block = block
}
return resp, nil
}
func SchemaNestedBlocks(in []*tfplugin6.Schema_NestedBlock) ([]*tfprotov6.SchemaNestedBlock, error) {
resp := make([]*tfprotov6.SchemaNestedBlock, 0, len(in))
for pos, b := range in {
if b == nil {
resp = append(resp, nil)
continue
}
block, err := SchemaNestedBlock(b)
if err != nil {
return resp, fmt.Errorf("error converting nested block %d: %w", pos, err)
}
resp = append(resp, block)
}
return resp, nil
}
func SchemaNestedBlockNestingMode(in tfplugin6.Schema_NestedBlock_NestingMode) tfprotov6.SchemaNestedBlockNestingMode {
return tfprotov6.SchemaNestedBlockNestingMode(in)
}
func SchemaObjectNestingMode(in tfplugin6.Schema_Object_NestingMode) tfprotov6.SchemaObjectNestingMode {
return tfprotov6.SchemaObjectNestingMode(in)
}
func SchemaObject(in *tfplugin6.Schema_Object) (*tfprotov6.SchemaObject, error) {
resp := &tfprotov6.SchemaObject{
Nesting: SchemaObjectNestingMode(in.Nesting),
}
attrs, err := SchemaAttributes(in.Attributes)
if err != nil {
return nil, err
}
resp.Attributes = attrs
return resp, nil
}