mirror of
https://github.com/LukeHagar/plexterraform.git
synced 2025-12-06 04:20:52 +00:00
112 lines
3.1 KiB
Go
112 lines
3.1 KiB
Go
// Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
|
|
|
|
package reflect
|
|
|
|
import (
|
|
"context"
|
|
"errors"
|
|
"reflect"
|
|
|
|
"github.com/hashicorp/terraform-plugin-framework/attr"
|
|
"github.com/hashicorp/terraform-plugin-framework/attr/xattr"
|
|
"github.com/hashicorp/terraform-plugin-framework/diag"
|
|
"github.com/hashicorp/terraform-plugin-framework/path"
|
|
"github.com/hashicorp/terraform-plugin-go/tftypes"
|
|
)
|
|
|
|
// Primitive builds a string or boolean, depending on the type of `target`, and
|
|
// populates it with the data in `val`.
|
|
//
|
|
// It is meant to be called through `Into`, not directly.
|
|
func Primitive(ctx context.Context, typ attr.Type, val tftypes.Value, target reflect.Value, path path.Path) (reflect.Value, diag.Diagnostics) {
|
|
var diags diag.Diagnostics
|
|
|
|
switch target.Kind() {
|
|
case reflect.Bool:
|
|
var b bool
|
|
err := val.As(&b)
|
|
if err != nil {
|
|
diags.Append(diag.WithPath(path, DiagIntoIncompatibleType{
|
|
Val: val,
|
|
TargetType: target.Type(),
|
|
Err: err,
|
|
}))
|
|
return target, diags
|
|
}
|
|
return reflect.ValueOf(b).Convert(target.Type()), nil
|
|
case reflect.String:
|
|
var s string
|
|
err := val.As(&s)
|
|
if err != nil {
|
|
diags.Append(diag.WithPath(path, DiagIntoIncompatibleType{
|
|
Val: val,
|
|
TargetType: target.Type(),
|
|
Err: err,
|
|
}))
|
|
return target, diags
|
|
}
|
|
return reflect.ValueOf(s).Convert(target.Type()), nil
|
|
default:
|
|
diags.Append(diag.WithPath(path, DiagIntoIncompatibleType{
|
|
Val: val,
|
|
TargetType: target.Type(),
|
|
Err: errors.New("unknown type"),
|
|
}))
|
|
return target, diags
|
|
}
|
|
}
|
|
|
|
// FromString returns an attr.Value as produced by `typ` from a string.
|
|
//
|
|
// It is meant to be called through FromValue, not directly.
|
|
func FromString(ctx context.Context, typ attr.Type, val string, path path.Path) (attr.Value, diag.Diagnostics) {
|
|
var diags diag.Diagnostics
|
|
err := tftypes.ValidateValue(tftypes.String, val)
|
|
if err != nil {
|
|
return nil, append(diags, validateValueErrorDiag(err, path))
|
|
}
|
|
tfStr := tftypes.NewValue(tftypes.String, val)
|
|
|
|
if typeWithValidate, ok := typ.(xattr.TypeWithValidate); ok {
|
|
diags.Append(typeWithValidate.Validate(ctx, tfStr, path)...)
|
|
|
|
if diags.HasError() {
|
|
return nil, diags
|
|
}
|
|
}
|
|
|
|
str, err := typ.ValueFromTerraform(ctx, tfStr)
|
|
if err != nil {
|
|
return nil, append(diags, valueFromTerraformErrorDiag(err, path))
|
|
}
|
|
|
|
return str, diags
|
|
}
|
|
|
|
// FromBool returns an attr.Value as produced by `typ` from a bool.
|
|
//
|
|
// It is meant to be called through FromValue, not directly.
|
|
func FromBool(ctx context.Context, typ attr.Type, val bool, path path.Path) (attr.Value, diag.Diagnostics) {
|
|
var diags diag.Diagnostics
|
|
err := tftypes.ValidateValue(tftypes.Bool, val)
|
|
if err != nil {
|
|
return nil, append(diags, validateValueErrorDiag(err, path))
|
|
}
|
|
tfBool := tftypes.NewValue(tftypes.Bool, val)
|
|
|
|
if typeWithValidate, ok := typ.(xattr.TypeWithValidate); ok {
|
|
diags.Append(typeWithValidate.Validate(ctx, tfBool, path)...)
|
|
|
|
if diags.HasError() {
|
|
return nil, diags
|
|
}
|
|
}
|
|
|
|
b, err := typ.ValueFromTerraform(ctx, tfBool)
|
|
if err != nil {
|
|
return nil, append(diags, valueFromTerraformErrorDiag(err, path))
|
|
}
|
|
|
|
return b, diags
|
|
}
|