mirror of
https://github.com/LukeHagar/plexterraform.git
synced 2025-12-06 04:20:52 +00:00
95 lines
3.3 KiB
Go
95 lines
3.3 KiB
Go
// Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
|
|
|
|
package reflect
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
"math/big"
|
|
"reflect"
|
|
|
|
"github.com/hashicorp/terraform-plugin-framework/attr"
|
|
"github.com/hashicorp/terraform-plugin-framework/diag"
|
|
"github.com/hashicorp/terraform-plugin-framework/path"
|
|
"github.com/hashicorp/terraform-plugin-go/tftypes"
|
|
)
|
|
|
|
// FromValue is the inverse of Into, taking a Go value (`val`) and transforming it
|
|
// into an attr.Value using the attr.Type supplied. `val` will first be
|
|
// transformed into a tftypes.Value, then passed to `typ`'s ValueFromTerraform
|
|
// method.
|
|
func FromValue(ctx context.Context, typ attr.Type, val interface{}, path path.Path) (attr.Value, diag.Diagnostics) {
|
|
var diags diag.Diagnostics
|
|
|
|
if v, ok := val.(attr.Value); ok {
|
|
return FromAttributeValue(ctx, typ, v, path)
|
|
}
|
|
if v, ok := val.(tftypes.ValueCreator); ok {
|
|
return FromValueCreator(ctx, typ, v, path)
|
|
}
|
|
if v, ok := val.(Unknownable); ok {
|
|
return FromUnknownable(ctx, typ, v, path)
|
|
}
|
|
if v, ok := val.(Nullable); ok {
|
|
return FromNullable(ctx, typ, v, path)
|
|
}
|
|
if bf, ok := val.(*big.Float); ok {
|
|
return FromBigFloat(ctx, typ, bf, path)
|
|
}
|
|
if bi, ok := val.(*big.Int); ok {
|
|
return FromBigInt(ctx, typ, bi, path)
|
|
}
|
|
value := reflect.ValueOf(val)
|
|
kind := value.Kind()
|
|
switch kind {
|
|
case reflect.Struct:
|
|
t, ok := typ.(attr.TypeWithAttributeTypes)
|
|
if !ok {
|
|
err := fmt.Errorf("cannot use type %T as schema type %T; %T must be an attr.TypeWithAttributeTypes to hold %T", val, typ, typ, val)
|
|
diags.AddAttributeError(
|
|
path,
|
|
"Value Conversion Error",
|
|
"An unexpected error was encountered trying to convert from value. This is always an error in the provider. Please report the following to the provider developer:\n\n"+err.Error(),
|
|
)
|
|
return nil, diags
|
|
}
|
|
return FromStruct(ctx, t, value, path)
|
|
case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32,
|
|
reflect.Int64:
|
|
return FromInt(ctx, typ, value.Int(), path)
|
|
case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32,
|
|
reflect.Uint64:
|
|
return FromUint(ctx, typ, value.Uint(), path)
|
|
case reflect.Float32, reflect.Float64:
|
|
return FromFloat(ctx, typ, value.Float(), path)
|
|
case reflect.Bool:
|
|
return FromBool(ctx, typ, value.Bool(), path)
|
|
case reflect.String:
|
|
return FromString(ctx, typ, value.String(), path)
|
|
case reflect.Slice:
|
|
return FromSlice(ctx, typ, value, path)
|
|
case reflect.Map:
|
|
t, ok := typ.(attr.TypeWithElementType)
|
|
if !ok {
|
|
err := fmt.Errorf("cannot use type %T as schema type %T; %T must be an attr.TypeWithElementType to hold %T", val, typ, typ, val)
|
|
diags.AddAttributeError(
|
|
path,
|
|
"Value Conversion Error",
|
|
"An unexpected error was encountered trying to convert from value. This is always an error in the provider. Please report the following to the provider developer:\n\n"+err.Error(),
|
|
)
|
|
return nil, diags
|
|
}
|
|
return FromMap(ctx, t, value, path)
|
|
case reflect.Ptr:
|
|
return FromPointer(ctx, typ, value, path)
|
|
default:
|
|
err := fmt.Errorf("cannot construct attr.Type from %T (%s)", val, kind)
|
|
diags.AddAttributeError(
|
|
path,
|
|
"Value Conversion Error",
|
|
"An unexpected error was encountered trying to convert from value. This is always an error in the provider. Please report the following to the provider developer:\n\n"+err.Error(),
|
|
)
|
|
return nil, diags
|
|
}
|
|
}
|