Documentation ¶
Overview ¶
Package reflect contains the implementation for converting framework-defined data into and from provider-defined Go types.
Index ¶
- func BuildValue(ctx context.Context, typ attr.Type, val tftypes.Value, target reflect.Value, ...) (reflect.Value, diag.Diagnostics)
- func FromAttributeValue(ctx context.Context, typ attr.Type, val attr.Value, path path.Path) (attr.Value, diag.Diagnostics)
- func FromBigFloat(ctx context.Context, typ attr.Type, val *big.Float, path path.Path) (attr.Value, diag.Diagnostics)
- func FromBigInt(ctx context.Context, typ attr.Type, val *big.Int, path path.Path) (attr.Value, diag.Diagnostics)
- func FromBool(ctx context.Context, typ attr.Type, val bool, path path.Path) (attr.Value, diag.Diagnostics)
- func FromFloat(ctx context.Context, typ attr.Type, val float64, path path.Path) (attr.Value, diag.Diagnostics)
- func FromInt(ctx context.Context, typ attr.Type, val int64, path path.Path) (attr.Value, diag.Diagnostics)
- func FromMap(ctx context.Context, typ attr.TypeWithElementType, val reflect.Value, ...) (attr.Value, diag.Diagnostics)
- func FromNullable(ctx context.Context, typ attr.Type, val Nullable, path path.Path) (attr.Value, diag.Diagnostics)
- func FromPointer(ctx context.Context, typ attr.Type, value reflect.Value, path path.Path) (attr.Value, diag.Diagnostics)
- func FromSlice(ctx context.Context, typ attr.Type, val reflect.Value, path path.Path) (attr.Value, diag.Diagnostics)
- func FromString(ctx context.Context, typ attr.Type, val string, path path.Path) (attr.Value, diag.Diagnostics)
- func FromStruct(ctx context.Context, typ attr.TypeWithAttributeTypes, val reflect.Value, ...) (attr.Value, diag.Diagnostics)
- func FromUint(ctx context.Context, typ attr.Type, val uint64, path path.Path) (attr.Value, diag.Diagnostics)
- func FromUnknownable(ctx context.Context, typ attr.Type, val Unknownable, path path.Path) (attr.Value, diag.Diagnostics)
- func FromValue(ctx context.Context, typ attr.Type, val interface{}, path path.Path) (attr.Value, diag.Diagnostics)
- func FromValueCreator(ctx context.Context, typ attr.Type, val tftypes.ValueCreator, path path.Path) (attr.Value, diag.Diagnostics)
- func Into(ctx context.Context, typ attr.Type, val tftypes.Value, target interface{}, ...) diag.Diagnostics
- func IsGenericAttrValue(ctx context.Context, target interface{}) bool
- func Map(ctx context.Context, typ attr.Type, val tftypes.Value, target reflect.Value, ...) (reflect.Value, diag.Diagnostics)
- func NewAttributeValue(ctx context.Context, typ attr.Type, val tftypes.Value, target reflect.Value, ...) (reflect.Value, diag.Diagnostics)
- func NewNullable(ctx context.Context, typ attr.Type, val tftypes.Value, target reflect.Value, ...) (reflect.Value, diag.Diagnostics)
- func NewUnknownable(ctx context.Context, typ attr.Type, val tftypes.Value, target reflect.Value, ...) (reflect.Value, diag.Diagnostics)
- func NewValueConverter(ctx context.Context, typ attr.Type, val tftypes.Value, target reflect.Value, ...) (reflect.Value, diag.Diagnostics)
- func Number(ctx context.Context, typ attr.Type, val tftypes.Value, target reflect.Value, ...) (reflect.Value, diag.Diagnostics)
- func Pointer(ctx context.Context, typ attr.Type, val tftypes.Value, target reflect.Value, ...) (reflect.Value, diag.Diagnostics)
- func Primitive(ctx context.Context, typ attr.Type, val tftypes.Value, target reflect.Value, ...) (reflect.Value, diag.Diagnostics)
- func Struct(ctx context.Context, typ attr.Type, object tftypes.Value, target reflect.Value, ...) (reflect.Value, diag.Diagnostics)
- type DiagIntoIncompatibleType
- type DiagNewAttributeValueIntoWrongType
- type Nullable
- type Options
- type Unknownable
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func BuildValue ¶
func BuildValue(ctx context.Context, typ attr.Type, val tftypes.Value, target reflect.Value, opts Options, path path.Path) (reflect.Value, diag.Diagnostics)
BuildValue constructs a reflect.Value of the same type as `target`, populated with the data in `val`. It will defensively instantiate new values to set, making it safe for use with pointer types which may be nil. It tries to give consumers the ability to override its default behaviors wherever possible.
func FromAttributeValue ¶
func FromAttributeValue(ctx context.Context, typ attr.Type, val attr.Value, path path.Path) (attr.Value, diag.Diagnostics)
FromAttributeValue creates an attr.Value from an attr.Value. It just returns the attr.Value it is passed, but reserves the right in the future to do some validation on that attr.Value to make sure it matches the type produced by `typ`.
It is meant to be called through FromValue, not directly.
func FromBigFloat ¶
func FromBigFloat(ctx context.Context, typ attr.Type, val *big.Float, path path.Path) (attr.Value, diag.Diagnostics)
FromBigFloat creates an attr.Value using `typ` from a *big.Float.
It is meant to be called through FromValue, not directly.
func FromBigInt ¶
func FromBigInt(ctx context.Context, typ attr.Type, val *big.Int, path path.Path) (attr.Value, diag.Diagnostics)
FromBigInt creates an attr.Value using `typ` from a *big.Int.
It is meant to be called through FromValue, not directly.
func FromBool ¶
func FromBool(ctx context.Context, typ attr.Type, val bool, path path.Path) (attr.Value, diag.Diagnostics)
FromBool returns an attr.Value as produced by `typ` from a bool.
It is meant to be called through FromValue, not directly.
func FromFloat ¶
func FromFloat(ctx context.Context, typ attr.Type, val float64, path path.Path) (attr.Value, diag.Diagnostics)
FromFloat creates an attr.Value using `typ` from a float64.
It is meant to be called through FromValue, not directly.
func FromInt ¶
func FromInt(ctx context.Context, typ attr.Type, val int64, path path.Path) (attr.Value, diag.Diagnostics)
FromInt creates an attr.Value using `typ` from an int64.
It is meant to be called through FromValue, not directly.
func FromMap ¶
func FromMap(ctx context.Context, typ attr.TypeWithElementType, val reflect.Value, path path.Path) (attr.Value, diag.Diagnostics)
FromMap returns an attr.Value representing the data contained in `val`. `val` must be a map type with keys that are a string type. The attr.Value will be of the type produced by `typ`.
It is meant to be called through FromValue, not directly.
func FromNullable ¶
func FromNullable(ctx context.Context, typ attr.Type, val Nullable, path path.Path) (attr.Value, diag.Diagnostics)
FromNullable creates an attr.Value from the data in a Nullable.
It is meant to be called through FromValue, not directly.
func FromPointer ¶
func FromPointer(ctx context.Context, typ attr.Type, value reflect.Value, path path.Path) (attr.Value, diag.Diagnostics)
FromPointer turns a pointer into an attr.Value using `typ`. If the pointer is nil, the attr.Value will use its null representation. If it is not nil, it will recurse into FromValue to find the attr.Value of the type the value the pointer is referencing.
It is meant to be called through FromValue, not directly.
func FromSlice ¶
func FromSlice(ctx context.Context, typ attr.Type, val reflect.Value, path path.Path) (attr.Value, diag.Diagnostics)
FromSlice returns an attr.Value as produced by `typ` using the data in `val`. `val` must be a slice. `typ` must be an attr.TypeWithElementType or attr.TypeWithElementTypes. If the slice is nil, the representation of null for `typ` will be returned. Otherwise, FromSlice will recurse into FromValue for each element in the slice, using the element type or types defined on `typ` to construct values for them.
It is meant to be called through FromValue, not directly.
func FromString ¶
func FromString(ctx context.Context, typ attr.Type, val string, path path.Path) (attr.Value, diag.Diagnostics)
FromString returns an attr.Value as produced by `typ` from a string.
It is meant to be called through FromValue, not directly.
func FromStruct ¶
func FromStruct(ctx context.Context, typ attr.TypeWithAttributeTypes, val reflect.Value, path path.Path) (attr.Value, diag.Diagnostics)
FromStruct builds an attr.Value as produced by `typ` from the data in `val`. `val` must be a struct type, and must have all its properties tagged and be a 1:1 match with the attributes reported by `typ`. FromStruct will recurse into FromValue for each attribute, using the type of the attribute as reported by `typ`.
It is meant to be called through FromValue, not directly.
func FromUint ¶
func FromUint(ctx context.Context, typ attr.Type, val uint64, path path.Path) (attr.Value, diag.Diagnostics)
FromUint creates an attr.Value using `typ` from a uint64.
It is meant to be called through FromValue, not directly.
func FromUnknownable ¶
func FromUnknownable(ctx context.Context, typ attr.Type, val Unknownable, path path.Path) (attr.Value, diag.Diagnostics)
FromUnknownable creates an attr.Value from the data in an Unknownable.
It is meant to be called through FromValue, not directly.
func FromValue ¶
func FromValue(ctx context.Context, typ attr.Type, val interface{}, path path.Path) (attr.Value, diag.Diagnostics)
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 FromValueCreator ¶
func FromValueCreator(ctx context.Context, typ attr.Type, val tftypes.ValueCreator, path path.Path) (attr.Value, diag.Diagnostics)
FromValueCreator creates an attr.Value from the data in a tftypes.ValueCreator, calling its ToTerraform5Value method and converting the result to an attr.Value using `typ`.
It is meant to be called from FromValue, not directly.
func Into ¶
func Into(ctx context.Context, typ attr.Type, val tftypes.Value, target interface{}, opts Options) diag.Diagnostics
Into uses the data in `val` to populate `target`, using the reflection package to recursively reflect into structs and slices. If `target` is an attr.Value, its assignment method will be used instead of reflecting. If `target` is a tftypes.ValueConverter, the FromTerraformValue method will be used instead of using reflection. Primitives are set using the val.As method. Structs use reflection: each exported struct field must have a "tfsdk" tag with the name of the field in the tftypes.Value, and all fields in the tftypes.Value must have a corresponding property in the struct. Into will be called for each struct field. Slices will have Into called for each element.
func IsGenericAttrValue ¶ added in v0.6.0
func Map ¶
func Map(ctx context.Context, typ attr.Type, val tftypes.Value, target reflect.Value, opts Options, path path.Path) (reflect.Value, diag.Diagnostics)
Map creates a map value that matches the type of `target`, and populates it with the contents of `val`.
func NewAttributeValue ¶
func NewAttributeValue(ctx context.Context, typ attr.Type, val tftypes.Value, target reflect.Value, opts Options, path path.Path) (reflect.Value, diag.Diagnostics)
NewAttributeValue creates a new reflect.Value by calling the ValueFromTerraform method on `typ`. It will return an error if the returned `attr.Value` is not the same type as `target`.
It is meant to be called through Into, not directly.
func NewNullable ¶
func NewNullable(ctx context.Context, typ attr.Type, val tftypes.Value, target reflect.Value, opts Options, path path.Path) (reflect.Value, diag.Diagnostics)
NewNullable creates a zero value of `target` (or the concrete type it's referencing, if it's a pointer) and calls its SetNull method.
It is meant to be called through Into, not directly.
func NewUnknownable ¶
func NewUnknownable(ctx context.Context, typ attr.Type, val tftypes.Value, target reflect.Value, opts Options, path path.Path) (reflect.Value, diag.Diagnostics)
NewUnknownable creates a zero value of `target` (or the concrete type it's referencing, if it's a pointer) and calls its SetUnknown method.
It is meant to be called through Into, not directly.
func NewValueConverter ¶
func NewValueConverter(ctx context.Context, typ attr.Type, val tftypes.Value, target reflect.Value, opts Options, path path.Path) (reflect.Value, diag.Diagnostics)
NewValueConverter creates a zero value of `target` (or the concrete type it's referencing, if it's a pointer) and calls its FromTerraform5Value method.
It is meant to be called through Into, not directly.
func Number ¶
func Number(ctx context.Context, typ attr.Type, val tftypes.Value, target reflect.Value, opts Options, path path.Path) (reflect.Value, diag.Diagnostics)
Number creates a *big.Float and populates it with the data in `val`. It then gets converted to the type of `target`, as long as `target` is a valid number type (any of the built-in int, uint, or float types, *big.Float, and *big.Int).
Number will loudly fail when a number cannot be losslessly represented using the requested type, unless opts.AllowRoundingNumbers is set to true. This setting is mildly dangerous, because Terraform does not like when you round things, as a general rule of thumb.
It is meant to be called through Into, not directly.
func Pointer ¶
func Pointer(ctx context.Context, typ attr.Type, val tftypes.Value, target reflect.Value, opts Options, path path.Path) (reflect.Value, diag.Diagnostics)
Pointer builds a new zero value of the concrete type that `target` references, populates it with BuildValue, and takes a pointer to it.
It is meant to be called through Into, not directly.
func Primitive ¶
func Primitive(ctx context.Context, typ attr.Type, val tftypes.Value, target reflect.Value, path path.Path) (reflect.Value, diag.Diagnostics)
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 Struct ¶
func Struct(ctx context.Context, typ attr.Type, object tftypes.Value, target reflect.Value, opts Options, path path.Path) (reflect.Value, diag.Diagnostics)
Struct builds a new struct using the data in `object`, as long as `object` is a `tftypes.Object`. It will take the struct type from `target`, which must be a struct type.
The properties on `target` must be tagged with a "tfsdk" label containing the field name to map to that property. Every property must be tagged, and every property must be present in the type of `object`, and all the attributes in the type of `object` must have a corresponding property. Properties that don't map to object attributes must have a `tfsdk:"-"` tag, explicitly defining them as not part of the object. This is to catch typos and other mistakes early.
Struct is meant to be called from Into, not directly.
Types ¶
type DiagIntoIncompatibleType ¶ added in v0.3.0
func (DiagIntoIncompatibleType) Detail ¶ added in v0.3.0
func (d DiagIntoIncompatibleType) Detail() string
func (DiagIntoIncompatibleType) Equal ¶ added in v0.3.0
func (d DiagIntoIncompatibleType) Equal(o diag.Diagnostic) bool
func (DiagIntoIncompatibleType) Severity ¶ added in v0.3.0
func (d DiagIntoIncompatibleType) Severity() diag.Severity
func (DiagIntoIncompatibleType) Summary ¶ added in v0.3.0
func (d DiagIntoIncompatibleType) Summary() string
type DiagNewAttributeValueIntoWrongType ¶ added in v0.3.0
type DiagNewAttributeValueIntoWrongType struct { ValType reflect.Type TargetType reflect.Type SchemaType attr.Type }
func (DiagNewAttributeValueIntoWrongType) Detail ¶ added in v0.3.0
func (d DiagNewAttributeValueIntoWrongType) Detail() string
func (DiagNewAttributeValueIntoWrongType) Equal ¶ added in v0.3.0
func (d DiagNewAttributeValueIntoWrongType) Equal(o diag.Diagnostic) bool
func (DiagNewAttributeValueIntoWrongType) Severity ¶ added in v0.3.0
func (d DiagNewAttributeValueIntoWrongType) Severity() diag.Severity
func (DiagNewAttributeValueIntoWrongType) Summary ¶ added in v0.3.0
func (d DiagNewAttributeValueIntoWrongType) Summary() string
type Nullable ¶
type Nullable interface { SetNull(context.Context, bool) error SetValue(context.Context, interface{}) error GetNull(context.Context) bool GetValue(context.Context) interface{} }
Nullable is an interface for types that can be explicitly set to null.
type Options ¶
type Options struct { // UnhandledNullAsEmpty controls whether null values should be // translated into empty values without provider interaction, or if // they must be explicitly handled. UnhandledNullAsEmpty bool // UnhandledUnknownAsEmpty controls whether null values should be // translated into empty values without provider interaction, or if // they must be explicitly handled. UnhandledUnknownAsEmpty bool // AllowRoundingNumbers silently rounds numbers that don't fit // perfectly in the types they're being stored in, rather than // returning errors. Numbers will always be rounded towards 0. AllowRoundingNumbers bool }
Options provides configuration settings for how the reflection behavior works, letting callers tweak different behaviors based on their needs.