configs/configschema: Introduce the NestingGroup mode for blocks

In study of existing providers we've found a pattern we werent previously
accounting for of using a nested block type to represent a group of
arguments that relate to a particular feature that is always enabled but
where it improves configuration readability to group all of its settings
together in a nested block.

The existing NestingSingle was not a good fit for this because it is
designed under the assumption that the presence or absence of the block
has some significance in enabling or disabling the relevant feature, and
so for these always-active cases we'd generate a misleading plan where
the settings for the feature appear totally absent, rather than showing
the default values that will be selected.

NestingGroup is, therefore, a slight variation of NestingSingle where
presence vs. absence of the block is not distinguishable (it's never null)
and instead its contents are treated as unset when the block is absent.
This then in turn causes any default values associated with the nested
arguments to be honored and displayed in the plan whenever the block is
not explicitly configured.

The current SDK cannot activate this mode, but that's okay because its
"legacy type system" opt-out flag allows it to force a block to be
processed in this way anyway. We're adding this now so that we can
introduce the feature in a future SDK without causing a breaking change
to the protocol, since the set of possible block nesting modes is not
extensible.
This commit is contained in:
Martin Atkins 2019-04-08 15:32:53 -07:00
parent a20084dc0e
commit 88e76fa9ef
25 changed files with 391 additions and 255 deletions

View File

@ -278,19 +278,20 @@ func (p *blockBodyDiffPrinter) writeNestedBlockDiffs(name string, blockS *config
// the objects within are computed. // the objects within are computed.
switch blockS.Nesting { switch blockS.Nesting {
case configschema.NestingSingle: case configschema.NestingSingle, configschema.NestingGroup:
var action plans.Action var action plans.Action
eqV := new.Equals(old)
switch { switch {
case old.IsNull(): case old.IsNull():
action = plans.Create action = plans.Create
case new.IsNull(): case new.IsNull():
action = plans.Delete action = plans.Delete
case !new.IsKnown() || !old.IsKnown(): case !new.IsWhollyKnown() || !old.IsWhollyKnown():
// "old" should actually always be known due to our contract // "old" should actually always be known due to our contract
// that old values must never be unknown, but we'll allow it // that old values must never be unknown, but we'll allow it
// anyway to be robust. // anyway to be robust.
action = plans.Update action = plans.Update
case !(new.Equals(old).True()): case !eqV.IsKnown() || !eqV.True():
action = plans.Update action = plans.Update
} }

View File

@ -97,7 +97,7 @@ func marshalExpressions(body hcl.Body, schema *configschema.Block) expressions {
} }
switch blockS.Nesting { switch blockS.Nesting {
case configschema.NestingSingle: case configschema.NestingSingle, configschema.NestingGroup:
ret[typeName] = marshalExpressions(block.Body, &blockS.Block) ret[typeName] = marshalExpressions(block.Body, &blockS.Block)
case configschema.NestingList, configschema.NestingSet: case configschema.NestingList, configschema.NestingSet:
if _, exists := ret[typeName]; !exists { if _, exists := ret[typeName]; !exists {

View File

@ -29,6 +29,8 @@ func marshalBlockTypes(nestedBlock *configschema.NestedBlock) *blockType {
switch nestedBlock.Nesting { switch nestedBlock.Nesting {
case configschema.NestingSingle: case configschema.NestingSingle:
ret.NestingMode = "single" ret.NestingMode = "single"
case configschema.NestingGroup:
ret.NestingMode = "group"
case configschema.NestingList: case configschema.NestingList:
ret.NestingMode = "list" ret.NestingMode = "list"
case configschema.NestingSet: case configschema.NestingSet:

View File

@ -75,7 +75,7 @@ func ConfigValueFromHCL2Block(v cty.Value, schema *configschema.Block) map[strin
switch blockS.Nesting { switch blockS.Nesting {
case configschema.NestingSingle: case configschema.NestingSingle, configschema.NestingGroup:
ret[name] = ConfigValueFromHCL2Block(bv, &blockS.Block) ret[name] = ConfigValueFromHCL2Block(bv, &blockS.Block)
case configschema.NestingList, configschema.NestingSet: case configschema.NestingList, configschema.NestingSet:

View File

@ -74,7 +74,7 @@ func (b *Block) coerceValue(in cty.Value, path cty.Path) (cty.Value, error) {
for typeName, blockS := range b.BlockTypes { for typeName, blockS := range b.BlockTypes {
switch blockS.Nesting { switch blockS.Nesting {
case NestingSingle: case NestingSingle, NestingGroup:
switch { switch {
case ty.HasAttribute(typeName): case ty.HasAttribute(typeName):
var err error var err error
@ -84,7 +84,11 @@ func (b *Block) coerceValue(in cty.Value, path cty.Path) (cty.Value, error) {
return cty.UnknownVal(b.ImpliedType()), err return cty.UnknownVal(b.ImpliedType()), err
} }
case blockS.MinItems != 1 && blockS.MaxItems != 1: case blockS.MinItems != 1 && blockS.MaxItems != 1:
attrs[typeName] = cty.NullVal(blockS.ImpliedType()) if blockS.Nesting == NestingGroup {
attrs[typeName] = blockS.EmptyValue()
} else {
attrs[typeName] = cty.NullVal(blockS.ImpliedType())
}
default: default:
// We use the word "attribute" here because we're talking about // We use the word "attribute" here because we're talking about
// the cty sense of that word rather than the HCL sense. // the cty sense of that word rather than the HCL sense.

View File

@ -34,12 +34,20 @@ func (b *Block) DecoderSpec() hcldec.Spec {
childSpec := blockS.Block.DecoderSpec() childSpec := blockS.Block.DecoderSpec()
switch blockS.Nesting { switch blockS.Nesting {
case NestingSingle: case NestingSingle, NestingGroup:
ret[name] = &hcldec.BlockSpec{ ret[name] = &hcldec.BlockSpec{
TypeName: name, TypeName: name,
Nested: childSpec, Nested: childSpec,
Required: blockS.MinItems == 1 && blockS.MaxItems >= 1, Required: blockS.MinItems == 1 && blockS.MaxItems >= 1,
} }
if blockS.Nesting == NestingGroup {
ret[name] = &hcldec.DefaultSpec{
Primary: ret[name],
Default: &hcldec.LiteralSpec{
Value: blockS.EmptyValue(),
},
}
}
case NestingList: case NestingList:
// We prefer to use a list where possible, since it makes our // We prefer to use a list where possible, since it makes our
// implied type more complete, but if there are any // implied type more complete, but if there are any

View File

@ -35,6 +35,8 @@ func (b *NestedBlock) EmptyValue() cty.Value {
switch b.Nesting { switch b.Nesting {
case NestingSingle: case NestingSingle:
return cty.NullVal(b.Block.ImpliedType()) return cty.NullVal(b.Block.ImpliedType())
case NestingGroup:
return b.Block.EmptyValue()
case NestingList: case NestingList:
if ty := b.Block.ImpliedType(); ty.HasDynamicTypes() { if ty := b.Block.ImpliedType(); ty.HasDynamicTypes() {
return cty.EmptyTupleVal return cty.EmptyTupleVal

View File

@ -47,6 +47,25 @@ func TestBlockEmptyValue(t *testing.T) {
})), })),
}), }),
}, },
{
&Block{
BlockTypes: map[string]*NestedBlock{
"group": {
Nesting: NestingGroup,
Block: Block{
Attributes: map[string]*Attribute{
"str": {Type: cty.String, Required: true},
},
},
},
},
},
cty.ObjectVal(map[string]cty.Value{
"group": cty.ObjectVal(map[string]cty.Value{
"str": cty.NullVal(cty.String),
}),
}),
},
{ {
&Block{ &Block{
BlockTypes: map[string]*NestedBlock{ BlockTypes: map[string]*NestedBlock{

View File

@ -72,6 +72,10 @@ func (b *Block) internalValidate(prefix string, err error) error {
case blockS.MinItems < 0 || blockS.MinItems > 1: case blockS.MinItems < 0 || blockS.MinItems > 1:
err = multierror.Append(err, fmt.Errorf("%s%s: MinItems and MaxItems must be set to either 0 or 1 in NestingSingle mode", prefix, name)) err = multierror.Append(err, fmt.Errorf("%s%s: MinItems and MaxItems must be set to either 0 or 1 in NestingSingle mode", prefix, name))
} }
case NestingGroup:
if blockS.MinItems != 0 || blockS.MaxItems != 0 {
err = multierror.Append(err, fmt.Errorf("%s%s: MinItems and MaxItems cannot be used in NestingGroup mode", prefix, name))
}
case NestingList, NestingSet: case NestingList, NestingSet:
if blockS.MinItems > blockS.MaxItems && blockS.MaxItems != 0 { if blockS.MinItems > blockS.MaxItems && blockS.MaxItems != 0 {
err = multierror.Append(err, fmt.Errorf("%s%s: MinItems must be less than or equal to MaxItems in %s mode", prefix, name, blockS.Nesting)) err = multierror.Append(err, fmt.Errorf("%s%s: MinItems must be less than or equal to MaxItems in %s mode", prefix, name, blockS.Nesting))

View File

@ -4,9 +4,21 @@ package configschema
import "strconv" import "strconv"
const _NestingMode_name = "nestingModeInvalidNestingSingleNestingListNestingSetNestingMap" func _() {
// An "invalid array index" compiler error signifies that the constant values have changed.
// Re-run the stringer command to generate them again.
var x [1]struct{}
_ = x[nestingModeInvalid-0]
_ = x[NestingSingle-1]
_ = x[NestingGroup-2]
_ = x[NestingList-3]
_ = x[NestingSet-4]
_ = x[NestingMap-5]
}
var _NestingMode_index = [...]uint8{0, 18, 31, 42, 52, 62} const _NestingMode_name = "nestingModeInvalidNestingSingleNestingGroupNestingListNestingSetNestingMap"
var _NestingMode_index = [...]uint8{0, 18, 31, 43, 54, 64, 74}
func (i NestingMode) String() string { func (i NestingMode) String() string {
if i < 0 || i >= NestingMode(len(_NestingMode_index)-1) { if i < 0 || i >= NestingMode(len(_NestingMode_index)-1) {

View File

@ -93,6 +93,23 @@ const (
// provided directly as an object value. // provided directly as an object value.
NestingSingle NestingSingle
// NestingGroup is similar to NestingSingle in that it calls for only a
// single instance of a given block type with no labels, but it additonally
// guarantees that its result will never be null, even if the block is
// absent, and instead the nested attributes and blocks will be treated
// as absent in that case. (Any required attributes or blocks within the
// nested block are not enforced unless the block is explicitly present
// in the configuration, so they are all effectively optional when the
// block is not present.)
//
// This is useful for the situation where a remote API has a feature that
// is always enabled but has a group of settings related to that feature
// that themselves have default values. By using NestingGroup instead of
// NestingSingle in that case, generated plans will show the block as
// present even when not present in configuration, thus allowing any
// default values within to be displayed to the user.
NestingGroup
// NestingList indicates that multiple blocks of the given type are // NestingList indicates that multiple blocks of the given type are
// permitted, with no labels, and that their corresponding objects should // permitted, with no labels, and that their corresponding objects should
// be provided in a list. // be provided in a list.

View File

@ -115,7 +115,7 @@ func (b *Block) StaticValidateTraversal(traversal hcl.Traversal) tfdiags.Diagnos
} }
func (b *NestedBlock) staticValidateTraversal(typeName string, traversal hcl.Traversal) tfdiags.Diagnostics { func (b *NestedBlock) staticValidateTraversal(typeName string, traversal hcl.Traversal) tfdiags.Diagnostics {
if b.Nesting == NestingSingle { if b.Nesting == NestingSingle || b.Nesting == NestingGroup {
// Single blocks are easy: just pass right through. // Single blocks are easy: just pass right through.
return b.Block.StaticValidateTraversal(traversal) return b.Block.StaticValidateTraversal(traversal)
} }

View File

@ -550,7 +550,7 @@ func printDynamicBlockBody(buf *bytes.Buffer, iterName string, schema *configsch
case configschema.NestingMap: case configschema.NestingMap:
printAttribute(buf, "for_each", []byte(fmt.Sprintf(`lookup(%s.value, %q, {})`, iterName, name)), nil) printAttribute(buf, "for_each", []byte(fmt.Sprintf(`lookup(%s.value, %q, {})`, iterName, name)), nil)
printAttribute(buf, "labels", []byte(fmt.Sprintf(`[%s.key]`, name)), nil) printAttribute(buf, "labels", []byte(fmt.Sprintf(`[%s.key]`, name)), nil)
case configschema.NestingSingle: case configschema.NestingSingle, configschema.NestingGroup:
printAttribute(buf, "for_each", []byte(fmt.Sprintf(`lookup(%s.value, %q, null) != null ? [%s.value.%s] : []`, iterName, name, iterName, name)), nil) printAttribute(buf, "for_each", []byte(fmt.Sprintf(`lookup(%s.value, %q, null) != null ? [%s.value.%s] : []`, iterName, name, iterName, name)), nil)
default: default:
printAttribute(buf, "for_each", []byte(fmt.Sprintf(`lookup(%s.value, %q, [])`, iterName, name)), nil) printAttribute(buf, "for_each", []byte(fmt.Sprintf(`lookup(%s.value, %q, [])`, iterName, name)), nil)

View File

@ -64,7 +64,7 @@ func SetUnknowns(val cty.Value, schema *configschema.Block) cty.Value {
// This switches on the value type here, so we can correctly switch // This switches on the value type here, so we can correctly switch
// between Tuples/Lists and Maps/Objects. // between Tuples/Lists and Maps/Objects.
switch { switch {
case blockS.Nesting == configschema.NestingSingle: case blockS.Nesting == configschema.NestingSingle || blockS.Nesting == configschema.NestingGroup:
// NestingSingle is the only exception here, where we treat the // NestingSingle is the only exception here, where we treat the
// block directly as an object // block directly as an object
newVals[name] = SetUnknowns(blockVal, &blockS.Block) newVals[name] = SetUnknowns(blockVal, &blockS.Block)

View File

@ -46,7 +46,7 @@ func (x Diagnostic_Severity) String() string {
return proto.EnumName(Diagnostic_Severity_name, int32(x)) return proto.EnumName(Diagnostic_Severity_name, int32(x))
} }
func (Diagnostic_Severity) EnumDescriptor() ([]byte, []int) { func (Diagnostic_Severity) EnumDescriptor() ([]byte, []int) {
return fileDescriptor_tfplugin5_0417c8e6dca655d3, []int{1, 0} return fileDescriptor_tfplugin5_56820f4fb67360c5, []int{1, 0}
} }
type Schema_NestedBlock_NestingMode int32 type Schema_NestedBlock_NestingMode int32
@ -57,6 +57,7 @@ const (
Schema_NestedBlock_LIST Schema_NestedBlock_NestingMode = 2 Schema_NestedBlock_LIST Schema_NestedBlock_NestingMode = 2
Schema_NestedBlock_SET Schema_NestedBlock_NestingMode = 3 Schema_NestedBlock_SET Schema_NestedBlock_NestingMode = 3
Schema_NestedBlock_MAP Schema_NestedBlock_NestingMode = 4 Schema_NestedBlock_MAP Schema_NestedBlock_NestingMode = 4
Schema_NestedBlock_GROUP Schema_NestedBlock_NestingMode = 5
) )
var Schema_NestedBlock_NestingMode_name = map[int32]string{ var Schema_NestedBlock_NestingMode_name = map[int32]string{
@ -65,6 +66,7 @@ var Schema_NestedBlock_NestingMode_name = map[int32]string{
2: "LIST", 2: "LIST",
3: "SET", 3: "SET",
4: "MAP", 4: "MAP",
5: "GROUP",
} }
var Schema_NestedBlock_NestingMode_value = map[string]int32{ var Schema_NestedBlock_NestingMode_value = map[string]int32{
"INVALID": 0, "INVALID": 0,
@ -72,13 +74,14 @@ var Schema_NestedBlock_NestingMode_value = map[string]int32{
"LIST": 2, "LIST": 2,
"SET": 3, "SET": 3,
"MAP": 4, "MAP": 4,
"GROUP": 5,
} }
func (x Schema_NestedBlock_NestingMode) String() string { func (x Schema_NestedBlock_NestingMode) String() string {
return proto.EnumName(Schema_NestedBlock_NestingMode_name, int32(x)) return proto.EnumName(Schema_NestedBlock_NestingMode_name, int32(x))
} }
func (Schema_NestedBlock_NestingMode) EnumDescriptor() ([]byte, []int) { func (Schema_NestedBlock_NestingMode) EnumDescriptor() ([]byte, []int) {
return fileDescriptor_tfplugin5_0417c8e6dca655d3, []int{5, 2, 0} return fileDescriptor_tfplugin5_56820f4fb67360c5, []int{5, 2, 0}
} }
// DynamicValue is an opaque encoding of terraform data, with the field name // DynamicValue is an opaque encoding of terraform data, with the field name
@ -95,7 +98,7 @@ func (m *DynamicValue) Reset() { *m = DynamicValue{} }
func (m *DynamicValue) String() string { return proto.CompactTextString(m) } func (m *DynamicValue) String() string { return proto.CompactTextString(m) }
func (*DynamicValue) ProtoMessage() {} func (*DynamicValue) ProtoMessage() {}
func (*DynamicValue) Descriptor() ([]byte, []int) { func (*DynamicValue) Descriptor() ([]byte, []int) {
return fileDescriptor_tfplugin5_0417c8e6dca655d3, []int{0} return fileDescriptor_tfplugin5_56820f4fb67360c5, []int{0}
} }
func (m *DynamicValue) XXX_Unmarshal(b []byte) error { func (m *DynamicValue) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_DynamicValue.Unmarshal(m, b) return xxx_messageInfo_DynamicValue.Unmarshal(m, b)
@ -143,7 +146,7 @@ func (m *Diagnostic) Reset() { *m = Diagnostic{} }
func (m *Diagnostic) String() string { return proto.CompactTextString(m) } func (m *Diagnostic) String() string { return proto.CompactTextString(m) }
func (*Diagnostic) ProtoMessage() {} func (*Diagnostic) ProtoMessage() {}
func (*Diagnostic) Descriptor() ([]byte, []int) { func (*Diagnostic) Descriptor() ([]byte, []int) {
return fileDescriptor_tfplugin5_0417c8e6dca655d3, []int{1} return fileDescriptor_tfplugin5_56820f4fb67360c5, []int{1}
} }
func (m *Diagnostic) XXX_Unmarshal(b []byte) error { func (m *Diagnostic) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_Diagnostic.Unmarshal(m, b) return xxx_messageInfo_Diagnostic.Unmarshal(m, b)
@ -202,7 +205,7 @@ func (m *AttributePath) Reset() { *m = AttributePath{} }
func (m *AttributePath) String() string { return proto.CompactTextString(m) } func (m *AttributePath) String() string { return proto.CompactTextString(m) }
func (*AttributePath) ProtoMessage() {} func (*AttributePath) ProtoMessage() {}
func (*AttributePath) Descriptor() ([]byte, []int) { func (*AttributePath) Descriptor() ([]byte, []int) {
return fileDescriptor_tfplugin5_0417c8e6dca655d3, []int{2} return fileDescriptor_tfplugin5_56820f4fb67360c5, []int{2}
} }
func (m *AttributePath) XXX_Unmarshal(b []byte) error { func (m *AttributePath) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_AttributePath.Unmarshal(m, b) return xxx_messageInfo_AttributePath.Unmarshal(m, b)
@ -244,7 +247,7 @@ func (m *AttributePath_Step) Reset() { *m = AttributePath_Step{} }
func (m *AttributePath_Step) String() string { return proto.CompactTextString(m) } func (m *AttributePath_Step) String() string { return proto.CompactTextString(m) }
func (*AttributePath_Step) ProtoMessage() {} func (*AttributePath_Step) ProtoMessage() {}
func (*AttributePath_Step) Descriptor() ([]byte, []int) { func (*AttributePath_Step) Descriptor() ([]byte, []int) {
return fileDescriptor_tfplugin5_0417c8e6dca655d3, []int{2, 0} return fileDescriptor_tfplugin5_56820f4fb67360c5, []int{2, 0}
} }
func (m *AttributePath_Step) XXX_Unmarshal(b []byte) error { func (m *AttributePath_Step) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_AttributePath_Step.Unmarshal(m, b) return xxx_messageInfo_AttributePath_Step.Unmarshal(m, b)
@ -404,7 +407,7 @@ func (m *Stop) Reset() { *m = Stop{} }
func (m *Stop) String() string { return proto.CompactTextString(m) } func (m *Stop) String() string { return proto.CompactTextString(m) }
func (*Stop) ProtoMessage() {} func (*Stop) ProtoMessage() {}
func (*Stop) Descriptor() ([]byte, []int) { func (*Stop) Descriptor() ([]byte, []int) {
return fileDescriptor_tfplugin5_0417c8e6dca655d3, []int{3} return fileDescriptor_tfplugin5_56820f4fb67360c5, []int{3}
} }
func (m *Stop) XXX_Unmarshal(b []byte) error { func (m *Stop) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_Stop.Unmarshal(m, b) return xxx_messageInfo_Stop.Unmarshal(m, b)
@ -434,7 +437,7 @@ func (m *Stop_Request) Reset() { *m = Stop_Request{} }
func (m *Stop_Request) String() string { return proto.CompactTextString(m) } func (m *Stop_Request) String() string { return proto.CompactTextString(m) }
func (*Stop_Request) ProtoMessage() {} func (*Stop_Request) ProtoMessage() {}
func (*Stop_Request) Descriptor() ([]byte, []int) { func (*Stop_Request) Descriptor() ([]byte, []int) {
return fileDescriptor_tfplugin5_0417c8e6dca655d3, []int{3, 0} return fileDescriptor_tfplugin5_56820f4fb67360c5, []int{3, 0}
} }
func (m *Stop_Request) XXX_Unmarshal(b []byte) error { func (m *Stop_Request) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_Stop_Request.Unmarshal(m, b) return xxx_messageInfo_Stop_Request.Unmarshal(m, b)
@ -455,7 +458,7 @@ func (m *Stop_Request) XXX_DiscardUnknown() {
var xxx_messageInfo_Stop_Request proto.InternalMessageInfo var xxx_messageInfo_Stop_Request proto.InternalMessageInfo
type Stop_Response struct { type Stop_Response struct {
Error string `protobuf:"bytes,1,opt,name=Error,json=error,proto3" json:"Error,omitempty"` Error string `protobuf:"bytes,1,opt,name=Error,proto3" json:"Error,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"` XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"` XXX_sizecache int32 `json:"-"`
@ -465,7 +468,7 @@ func (m *Stop_Response) Reset() { *m = Stop_Response{} }
func (m *Stop_Response) String() string { return proto.CompactTextString(m) } func (m *Stop_Response) String() string { return proto.CompactTextString(m) }
func (*Stop_Response) ProtoMessage() {} func (*Stop_Response) ProtoMessage() {}
func (*Stop_Response) Descriptor() ([]byte, []int) { func (*Stop_Response) Descriptor() ([]byte, []int) {
return fileDescriptor_tfplugin5_0417c8e6dca655d3, []int{3, 1} return fileDescriptor_tfplugin5_56820f4fb67360c5, []int{3, 1}
} }
func (m *Stop_Response) XXX_Unmarshal(b []byte) error { func (m *Stop_Response) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_Stop_Response.Unmarshal(m, b) return xxx_messageInfo_Stop_Response.Unmarshal(m, b)
@ -507,7 +510,7 @@ func (m *RawState) Reset() { *m = RawState{} }
func (m *RawState) String() string { return proto.CompactTextString(m) } func (m *RawState) String() string { return proto.CompactTextString(m) }
func (*RawState) ProtoMessage() {} func (*RawState) ProtoMessage() {}
func (*RawState) Descriptor() ([]byte, []int) { func (*RawState) Descriptor() ([]byte, []int) {
return fileDescriptor_tfplugin5_0417c8e6dca655d3, []int{4} return fileDescriptor_tfplugin5_56820f4fb67360c5, []int{4}
} }
func (m *RawState) XXX_Unmarshal(b []byte) error { func (m *RawState) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_RawState.Unmarshal(m, b) return xxx_messageInfo_RawState.Unmarshal(m, b)
@ -558,7 +561,7 @@ func (m *Schema) Reset() { *m = Schema{} }
func (m *Schema) String() string { return proto.CompactTextString(m) } func (m *Schema) String() string { return proto.CompactTextString(m) }
func (*Schema) ProtoMessage() {} func (*Schema) ProtoMessage() {}
func (*Schema) Descriptor() ([]byte, []int) { func (*Schema) Descriptor() ([]byte, []int) {
return fileDescriptor_tfplugin5_0417c8e6dca655d3, []int{5} return fileDescriptor_tfplugin5_56820f4fb67360c5, []int{5}
} }
func (m *Schema) XXX_Unmarshal(b []byte) error { func (m *Schema) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_Schema.Unmarshal(m, b) return xxx_messageInfo_Schema.Unmarshal(m, b)
@ -605,7 +608,7 @@ func (m *Schema_Block) Reset() { *m = Schema_Block{} }
func (m *Schema_Block) String() string { return proto.CompactTextString(m) } func (m *Schema_Block) String() string { return proto.CompactTextString(m) }
func (*Schema_Block) ProtoMessage() {} func (*Schema_Block) ProtoMessage() {}
func (*Schema_Block) Descriptor() ([]byte, []int) { func (*Schema_Block) Descriptor() ([]byte, []int) {
return fileDescriptor_tfplugin5_0417c8e6dca655d3, []int{5, 0} return fileDescriptor_tfplugin5_56820f4fb67360c5, []int{5, 0}
} }
func (m *Schema_Block) XXX_Unmarshal(b []byte) error { func (m *Schema_Block) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_Schema_Block.Unmarshal(m, b) return xxx_messageInfo_Schema_Block.Unmarshal(m, b)
@ -663,7 +666,7 @@ func (m *Schema_Attribute) Reset() { *m = Schema_Attribute{} }
func (m *Schema_Attribute) String() string { return proto.CompactTextString(m) } func (m *Schema_Attribute) String() string { return proto.CompactTextString(m) }
func (*Schema_Attribute) ProtoMessage() {} func (*Schema_Attribute) ProtoMessage() {}
func (*Schema_Attribute) Descriptor() ([]byte, []int) { func (*Schema_Attribute) Descriptor() ([]byte, []int) {
return fileDescriptor_tfplugin5_0417c8e6dca655d3, []int{5, 1} return fileDescriptor_tfplugin5_56820f4fb67360c5, []int{5, 1}
} }
func (m *Schema_Attribute) XXX_Unmarshal(b []byte) error { func (m *Schema_Attribute) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_Schema_Attribute.Unmarshal(m, b) return xxx_messageInfo_Schema_Attribute.Unmarshal(m, b)
@ -747,7 +750,7 @@ func (m *Schema_NestedBlock) Reset() { *m = Schema_NestedBlock{} }
func (m *Schema_NestedBlock) String() string { return proto.CompactTextString(m) } func (m *Schema_NestedBlock) String() string { return proto.CompactTextString(m) }
func (*Schema_NestedBlock) ProtoMessage() {} func (*Schema_NestedBlock) ProtoMessage() {}
func (*Schema_NestedBlock) Descriptor() ([]byte, []int) { func (*Schema_NestedBlock) Descriptor() ([]byte, []int) {
return fileDescriptor_tfplugin5_0417c8e6dca655d3, []int{5, 2} return fileDescriptor_tfplugin5_56820f4fb67360c5, []int{5, 2}
} }
func (m *Schema_NestedBlock) XXX_Unmarshal(b []byte) error { func (m *Schema_NestedBlock) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_Schema_NestedBlock.Unmarshal(m, b) return xxx_messageInfo_Schema_NestedBlock.Unmarshal(m, b)
@ -812,7 +815,7 @@ func (m *GetProviderSchema) Reset() { *m = GetProviderSchema{} }
func (m *GetProviderSchema) String() string { return proto.CompactTextString(m) } func (m *GetProviderSchema) String() string { return proto.CompactTextString(m) }
func (*GetProviderSchema) ProtoMessage() {} func (*GetProviderSchema) ProtoMessage() {}
func (*GetProviderSchema) Descriptor() ([]byte, []int) { func (*GetProviderSchema) Descriptor() ([]byte, []int) {
return fileDescriptor_tfplugin5_0417c8e6dca655d3, []int{6} return fileDescriptor_tfplugin5_56820f4fb67360c5, []int{6}
} }
func (m *GetProviderSchema) XXX_Unmarshal(b []byte) error { func (m *GetProviderSchema) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_GetProviderSchema.Unmarshal(m, b) return xxx_messageInfo_GetProviderSchema.Unmarshal(m, b)
@ -842,7 +845,7 @@ func (m *GetProviderSchema_Request) Reset() { *m = GetProviderSchema_Req
func (m *GetProviderSchema_Request) String() string { return proto.CompactTextString(m) } func (m *GetProviderSchema_Request) String() string { return proto.CompactTextString(m) }
func (*GetProviderSchema_Request) ProtoMessage() {} func (*GetProviderSchema_Request) ProtoMessage() {}
func (*GetProviderSchema_Request) Descriptor() ([]byte, []int) { func (*GetProviderSchema_Request) Descriptor() ([]byte, []int) {
return fileDescriptor_tfplugin5_0417c8e6dca655d3, []int{6, 0} return fileDescriptor_tfplugin5_56820f4fb67360c5, []int{6, 0}
} }
func (m *GetProviderSchema_Request) XXX_Unmarshal(b []byte) error { func (m *GetProviderSchema_Request) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_GetProviderSchema_Request.Unmarshal(m, b) return xxx_messageInfo_GetProviderSchema_Request.Unmarshal(m, b)
@ -876,7 +879,7 @@ func (m *GetProviderSchema_Response) Reset() { *m = GetProviderSchema_Re
func (m *GetProviderSchema_Response) String() string { return proto.CompactTextString(m) } func (m *GetProviderSchema_Response) String() string { return proto.CompactTextString(m) }
func (*GetProviderSchema_Response) ProtoMessage() {} func (*GetProviderSchema_Response) ProtoMessage() {}
func (*GetProviderSchema_Response) Descriptor() ([]byte, []int) { func (*GetProviderSchema_Response) Descriptor() ([]byte, []int) {
return fileDescriptor_tfplugin5_0417c8e6dca655d3, []int{6, 1} return fileDescriptor_tfplugin5_56820f4fb67360c5, []int{6, 1}
} }
func (m *GetProviderSchema_Response) XXX_Unmarshal(b []byte) error { func (m *GetProviderSchema_Response) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_GetProviderSchema_Response.Unmarshal(m, b) return xxx_messageInfo_GetProviderSchema_Response.Unmarshal(m, b)
@ -934,7 +937,7 @@ func (m *PrepareProviderConfig) Reset() { *m = PrepareProviderConfig{} }
func (m *PrepareProviderConfig) String() string { return proto.CompactTextString(m) } func (m *PrepareProviderConfig) String() string { return proto.CompactTextString(m) }
func (*PrepareProviderConfig) ProtoMessage() {} func (*PrepareProviderConfig) ProtoMessage() {}
func (*PrepareProviderConfig) Descriptor() ([]byte, []int) { func (*PrepareProviderConfig) Descriptor() ([]byte, []int) {
return fileDescriptor_tfplugin5_0417c8e6dca655d3, []int{7} return fileDescriptor_tfplugin5_56820f4fb67360c5, []int{7}
} }
func (m *PrepareProviderConfig) XXX_Unmarshal(b []byte) error { func (m *PrepareProviderConfig) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_PrepareProviderConfig.Unmarshal(m, b) return xxx_messageInfo_PrepareProviderConfig.Unmarshal(m, b)
@ -965,7 +968,7 @@ func (m *PrepareProviderConfig_Request) Reset() { *m = PrepareProviderCo
func (m *PrepareProviderConfig_Request) String() string { return proto.CompactTextString(m) } func (m *PrepareProviderConfig_Request) String() string { return proto.CompactTextString(m) }
func (*PrepareProviderConfig_Request) ProtoMessage() {} func (*PrepareProviderConfig_Request) ProtoMessage() {}
func (*PrepareProviderConfig_Request) Descriptor() ([]byte, []int) { func (*PrepareProviderConfig_Request) Descriptor() ([]byte, []int) {
return fileDescriptor_tfplugin5_0417c8e6dca655d3, []int{7, 0} return fileDescriptor_tfplugin5_56820f4fb67360c5, []int{7, 0}
} }
func (m *PrepareProviderConfig_Request) XXX_Unmarshal(b []byte) error { func (m *PrepareProviderConfig_Request) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_PrepareProviderConfig_Request.Unmarshal(m, b) return xxx_messageInfo_PrepareProviderConfig_Request.Unmarshal(m, b)
@ -1004,7 +1007,7 @@ func (m *PrepareProviderConfig_Response) Reset() { *m = PrepareProviderC
func (m *PrepareProviderConfig_Response) String() string { return proto.CompactTextString(m) } func (m *PrepareProviderConfig_Response) String() string { return proto.CompactTextString(m) }
func (*PrepareProviderConfig_Response) ProtoMessage() {} func (*PrepareProviderConfig_Response) ProtoMessage() {}
func (*PrepareProviderConfig_Response) Descriptor() ([]byte, []int) { func (*PrepareProviderConfig_Response) Descriptor() ([]byte, []int) {
return fileDescriptor_tfplugin5_0417c8e6dca655d3, []int{7, 1} return fileDescriptor_tfplugin5_56820f4fb67360c5, []int{7, 1}
} }
func (m *PrepareProviderConfig_Response) XXX_Unmarshal(b []byte) error { func (m *PrepareProviderConfig_Response) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_PrepareProviderConfig_Response.Unmarshal(m, b) return xxx_messageInfo_PrepareProviderConfig_Response.Unmarshal(m, b)
@ -1048,7 +1051,7 @@ func (m *UpgradeResourceState) Reset() { *m = UpgradeResourceState{} }
func (m *UpgradeResourceState) String() string { return proto.CompactTextString(m) } func (m *UpgradeResourceState) String() string { return proto.CompactTextString(m) }
func (*UpgradeResourceState) ProtoMessage() {} func (*UpgradeResourceState) ProtoMessage() {}
func (*UpgradeResourceState) Descriptor() ([]byte, []int) { func (*UpgradeResourceState) Descriptor() ([]byte, []int) {
return fileDescriptor_tfplugin5_0417c8e6dca655d3, []int{8} return fileDescriptor_tfplugin5_56820f4fb67360c5, []int{8}
} }
func (m *UpgradeResourceState) XXX_Unmarshal(b []byte) error { func (m *UpgradeResourceState) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_UpgradeResourceState.Unmarshal(m, b) return xxx_messageInfo_UpgradeResourceState.Unmarshal(m, b)
@ -1087,7 +1090,7 @@ func (m *UpgradeResourceState_Request) Reset() { *m = UpgradeResourceSta
func (m *UpgradeResourceState_Request) String() string { return proto.CompactTextString(m) } func (m *UpgradeResourceState_Request) String() string { return proto.CompactTextString(m) }
func (*UpgradeResourceState_Request) ProtoMessage() {} func (*UpgradeResourceState_Request) ProtoMessage() {}
func (*UpgradeResourceState_Request) Descriptor() ([]byte, []int) { func (*UpgradeResourceState_Request) Descriptor() ([]byte, []int) {
return fileDescriptor_tfplugin5_0417c8e6dca655d3, []int{8, 0} return fileDescriptor_tfplugin5_56820f4fb67360c5, []int{8, 0}
} }
func (m *UpgradeResourceState_Request) XXX_Unmarshal(b []byte) error { func (m *UpgradeResourceState_Request) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_UpgradeResourceState_Request.Unmarshal(m, b) return xxx_messageInfo_UpgradeResourceState_Request.Unmarshal(m, b)
@ -1146,7 +1149,7 @@ func (m *UpgradeResourceState_Response) Reset() { *m = UpgradeResourceSt
func (m *UpgradeResourceState_Response) String() string { return proto.CompactTextString(m) } func (m *UpgradeResourceState_Response) String() string { return proto.CompactTextString(m) }
func (*UpgradeResourceState_Response) ProtoMessage() {} func (*UpgradeResourceState_Response) ProtoMessage() {}
func (*UpgradeResourceState_Response) Descriptor() ([]byte, []int) { func (*UpgradeResourceState_Response) Descriptor() ([]byte, []int) {
return fileDescriptor_tfplugin5_0417c8e6dca655d3, []int{8, 1} return fileDescriptor_tfplugin5_56820f4fb67360c5, []int{8, 1}
} }
func (m *UpgradeResourceState_Response) XXX_Unmarshal(b []byte) error { func (m *UpgradeResourceState_Response) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_UpgradeResourceState_Response.Unmarshal(m, b) return xxx_messageInfo_UpgradeResourceState_Response.Unmarshal(m, b)
@ -1190,7 +1193,7 @@ func (m *ValidateResourceTypeConfig) Reset() { *m = ValidateResourceType
func (m *ValidateResourceTypeConfig) String() string { return proto.CompactTextString(m) } func (m *ValidateResourceTypeConfig) String() string { return proto.CompactTextString(m) }
func (*ValidateResourceTypeConfig) ProtoMessage() {} func (*ValidateResourceTypeConfig) ProtoMessage() {}
func (*ValidateResourceTypeConfig) Descriptor() ([]byte, []int) { func (*ValidateResourceTypeConfig) Descriptor() ([]byte, []int) {
return fileDescriptor_tfplugin5_0417c8e6dca655d3, []int{9} return fileDescriptor_tfplugin5_56820f4fb67360c5, []int{9}
} }
func (m *ValidateResourceTypeConfig) XXX_Unmarshal(b []byte) error { func (m *ValidateResourceTypeConfig) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_ValidateResourceTypeConfig.Unmarshal(m, b) return xxx_messageInfo_ValidateResourceTypeConfig.Unmarshal(m, b)
@ -1222,7 +1225,7 @@ func (m *ValidateResourceTypeConfig_Request) Reset() { *m = ValidateReso
func (m *ValidateResourceTypeConfig_Request) String() string { return proto.CompactTextString(m) } func (m *ValidateResourceTypeConfig_Request) String() string { return proto.CompactTextString(m) }
func (*ValidateResourceTypeConfig_Request) ProtoMessage() {} func (*ValidateResourceTypeConfig_Request) ProtoMessage() {}
func (*ValidateResourceTypeConfig_Request) Descriptor() ([]byte, []int) { func (*ValidateResourceTypeConfig_Request) Descriptor() ([]byte, []int) {
return fileDescriptor_tfplugin5_0417c8e6dca655d3, []int{9, 0} return fileDescriptor_tfplugin5_56820f4fb67360c5, []int{9, 0}
} }
func (m *ValidateResourceTypeConfig_Request) XXX_Unmarshal(b []byte) error { func (m *ValidateResourceTypeConfig_Request) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_ValidateResourceTypeConfig_Request.Unmarshal(m, b) return xxx_messageInfo_ValidateResourceTypeConfig_Request.Unmarshal(m, b)
@ -1267,7 +1270,7 @@ func (m *ValidateResourceTypeConfig_Response) Reset() { *m = ValidateRes
func (m *ValidateResourceTypeConfig_Response) String() string { return proto.CompactTextString(m) } func (m *ValidateResourceTypeConfig_Response) String() string { return proto.CompactTextString(m) }
func (*ValidateResourceTypeConfig_Response) ProtoMessage() {} func (*ValidateResourceTypeConfig_Response) ProtoMessage() {}
func (*ValidateResourceTypeConfig_Response) Descriptor() ([]byte, []int) { func (*ValidateResourceTypeConfig_Response) Descriptor() ([]byte, []int) {
return fileDescriptor_tfplugin5_0417c8e6dca655d3, []int{9, 1} return fileDescriptor_tfplugin5_56820f4fb67360c5, []int{9, 1}
} }
func (m *ValidateResourceTypeConfig_Response) XXX_Unmarshal(b []byte) error { func (m *ValidateResourceTypeConfig_Response) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_ValidateResourceTypeConfig_Response.Unmarshal(m, b) return xxx_messageInfo_ValidateResourceTypeConfig_Response.Unmarshal(m, b)
@ -1304,7 +1307,7 @@ func (m *ValidateDataSourceConfig) Reset() { *m = ValidateDataSourceConf
func (m *ValidateDataSourceConfig) String() string { return proto.CompactTextString(m) } func (m *ValidateDataSourceConfig) String() string { return proto.CompactTextString(m) }
func (*ValidateDataSourceConfig) ProtoMessage() {} func (*ValidateDataSourceConfig) ProtoMessage() {}
func (*ValidateDataSourceConfig) Descriptor() ([]byte, []int) { func (*ValidateDataSourceConfig) Descriptor() ([]byte, []int) {
return fileDescriptor_tfplugin5_0417c8e6dca655d3, []int{10} return fileDescriptor_tfplugin5_56820f4fb67360c5, []int{10}
} }
func (m *ValidateDataSourceConfig) XXX_Unmarshal(b []byte) error { func (m *ValidateDataSourceConfig) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_ValidateDataSourceConfig.Unmarshal(m, b) return xxx_messageInfo_ValidateDataSourceConfig.Unmarshal(m, b)
@ -1336,7 +1339,7 @@ func (m *ValidateDataSourceConfig_Request) Reset() { *m = ValidateDataSo
func (m *ValidateDataSourceConfig_Request) String() string { return proto.CompactTextString(m) } func (m *ValidateDataSourceConfig_Request) String() string { return proto.CompactTextString(m) }
func (*ValidateDataSourceConfig_Request) ProtoMessage() {} func (*ValidateDataSourceConfig_Request) ProtoMessage() {}
func (*ValidateDataSourceConfig_Request) Descriptor() ([]byte, []int) { func (*ValidateDataSourceConfig_Request) Descriptor() ([]byte, []int) {
return fileDescriptor_tfplugin5_0417c8e6dca655d3, []int{10, 0} return fileDescriptor_tfplugin5_56820f4fb67360c5, []int{10, 0}
} }
func (m *ValidateDataSourceConfig_Request) XXX_Unmarshal(b []byte) error { func (m *ValidateDataSourceConfig_Request) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_ValidateDataSourceConfig_Request.Unmarshal(m, b) return xxx_messageInfo_ValidateDataSourceConfig_Request.Unmarshal(m, b)
@ -1381,7 +1384,7 @@ func (m *ValidateDataSourceConfig_Response) Reset() { *m = ValidateDataS
func (m *ValidateDataSourceConfig_Response) String() string { return proto.CompactTextString(m) } func (m *ValidateDataSourceConfig_Response) String() string { return proto.CompactTextString(m) }
func (*ValidateDataSourceConfig_Response) ProtoMessage() {} func (*ValidateDataSourceConfig_Response) ProtoMessage() {}
func (*ValidateDataSourceConfig_Response) Descriptor() ([]byte, []int) { func (*ValidateDataSourceConfig_Response) Descriptor() ([]byte, []int) {
return fileDescriptor_tfplugin5_0417c8e6dca655d3, []int{10, 1} return fileDescriptor_tfplugin5_56820f4fb67360c5, []int{10, 1}
} }
func (m *ValidateDataSourceConfig_Response) XXX_Unmarshal(b []byte) error { func (m *ValidateDataSourceConfig_Response) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_ValidateDataSourceConfig_Response.Unmarshal(m, b) return xxx_messageInfo_ValidateDataSourceConfig_Response.Unmarshal(m, b)
@ -1418,7 +1421,7 @@ func (m *Configure) Reset() { *m = Configure{} }
func (m *Configure) String() string { return proto.CompactTextString(m) } func (m *Configure) String() string { return proto.CompactTextString(m) }
func (*Configure) ProtoMessage() {} func (*Configure) ProtoMessage() {}
func (*Configure) Descriptor() ([]byte, []int) { func (*Configure) Descriptor() ([]byte, []int) {
return fileDescriptor_tfplugin5_0417c8e6dca655d3, []int{11} return fileDescriptor_tfplugin5_56820f4fb67360c5, []int{11}
} }
func (m *Configure) XXX_Unmarshal(b []byte) error { func (m *Configure) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_Configure.Unmarshal(m, b) return xxx_messageInfo_Configure.Unmarshal(m, b)
@ -1450,7 +1453,7 @@ func (m *Configure_Request) Reset() { *m = Configure_Request{} }
func (m *Configure_Request) String() string { return proto.CompactTextString(m) } func (m *Configure_Request) String() string { return proto.CompactTextString(m) }
func (*Configure_Request) ProtoMessage() {} func (*Configure_Request) ProtoMessage() {}
func (*Configure_Request) Descriptor() ([]byte, []int) { func (*Configure_Request) Descriptor() ([]byte, []int) {
return fileDescriptor_tfplugin5_0417c8e6dca655d3, []int{11, 0} return fileDescriptor_tfplugin5_56820f4fb67360c5, []int{11, 0}
} }
func (m *Configure_Request) XXX_Unmarshal(b []byte) error { func (m *Configure_Request) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_Configure_Request.Unmarshal(m, b) return xxx_messageInfo_Configure_Request.Unmarshal(m, b)
@ -1495,7 +1498,7 @@ func (m *Configure_Response) Reset() { *m = Configure_Response{} }
func (m *Configure_Response) String() string { return proto.CompactTextString(m) } func (m *Configure_Response) String() string { return proto.CompactTextString(m) }
func (*Configure_Response) ProtoMessage() {} func (*Configure_Response) ProtoMessage() {}
func (*Configure_Response) Descriptor() ([]byte, []int) { func (*Configure_Response) Descriptor() ([]byte, []int) {
return fileDescriptor_tfplugin5_0417c8e6dca655d3, []int{11, 1} return fileDescriptor_tfplugin5_56820f4fb67360c5, []int{11, 1}
} }
func (m *Configure_Response) XXX_Unmarshal(b []byte) error { func (m *Configure_Response) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_Configure_Response.Unmarshal(m, b) return xxx_messageInfo_Configure_Response.Unmarshal(m, b)
@ -1532,7 +1535,7 @@ func (m *ReadResource) Reset() { *m = ReadResource{} }
func (m *ReadResource) String() string { return proto.CompactTextString(m) } func (m *ReadResource) String() string { return proto.CompactTextString(m) }
func (*ReadResource) ProtoMessage() {} func (*ReadResource) ProtoMessage() {}
func (*ReadResource) Descriptor() ([]byte, []int) { func (*ReadResource) Descriptor() ([]byte, []int) {
return fileDescriptor_tfplugin5_0417c8e6dca655d3, []int{12} return fileDescriptor_tfplugin5_56820f4fb67360c5, []int{12}
} }
func (m *ReadResource) XXX_Unmarshal(b []byte) error { func (m *ReadResource) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_ReadResource.Unmarshal(m, b) return xxx_messageInfo_ReadResource.Unmarshal(m, b)
@ -1564,7 +1567,7 @@ func (m *ReadResource_Request) Reset() { *m = ReadResource_Request{} }
func (m *ReadResource_Request) String() string { return proto.CompactTextString(m) } func (m *ReadResource_Request) String() string { return proto.CompactTextString(m) }
func (*ReadResource_Request) ProtoMessage() {} func (*ReadResource_Request) ProtoMessage() {}
func (*ReadResource_Request) Descriptor() ([]byte, []int) { func (*ReadResource_Request) Descriptor() ([]byte, []int) {
return fileDescriptor_tfplugin5_0417c8e6dca655d3, []int{12, 0} return fileDescriptor_tfplugin5_56820f4fb67360c5, []int{12, 0}
} }
func (m *ReadResource_Request) XXX_Unmarshal(b []byte) error { func (m *ReadResource_Request) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_ReadResource_Request.Unmarshal(m, b) return xxx_messageInfo_ReadResource_Request.Unmarshal(m, b)
@ -1610,7 +1613,7 @@ func (m *ReadResource_Response) Reset() { *m = ReadResource_Response{} }
func (m *ReadResource_Response) String() string { return proto.CompactTextString(m) } func (m *ReadResource_Response) String() string { return proto.CompactTextString(m) }
func (*ReadResource_Response) ProtoMessage() {} func (*ReadResource_Response) ProtoMessage() {}
func (*ReadResource_Response) Descriptor() ([]byte, []int) { func (*ReadResource_Response) Descriptor() ([]byte, []int) {
return fileDescriptor_tfplugin5_0417c8e6dca655d3, []int{12, 1} return fileDescriptor_tfplugin5_56820f4fb67360c5, []int{12, 1}
} }
func (m *ReadResource_Response) XXX_Unmarshal(b []byte) error { func (m *ReadResource_Response) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_ReadResource_Response.Unmarshal(m, b) return xxx_messageInfo_ReadResource_Response.Unmarshal(m, b)
@ -1654,7 +1657,7 @@ func (m *PlanResourceChange) Reset() { *m = PlanResourceChange{} }
func (m *PlanResourceChange) String() string { return proto.CompactTextString(m) } func (m *PlanResourceChange) String() string { return proto.CompactTextString(m) }
func (*PlanResourceChange) ProtoMessage() {} func (*PlanResourceChange) ProtoMessage() {}
func (*PlanResourceChange) Descriptor() ([]byte, []int) { func (*PlanResourceChange) Descriptor() ([]byte, []int) {
return fileDescriptor_tfplugin5_0417c8e6dca655d3, []int{13} return fileDescriptor_tfplugin5_56820f4fb67360c5, []int{13}
} }
func (m *PlanResourceChange) XXX_Unmarshal(b []byte) error { func (m *PlanResourceChange) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_PlanResourceChange.Unmarshal(m, b) return xxx_messageInfo_PlanResourceChange.Unmarshal(m, b)
@ -1689,7 +1692,7 @@ func (m *PlanResourceChange_Request) Reset() { *m = PlanResourceChange_R
func (m *PlanResourceChange_Request) String() string { return proto.CompactTextString(m) } func (m *PlanResourceChange_Request) String() string { return proto.CompactTextString(m) }
func (*PlanResourceChange_Request) ProtoMessage() {} func (*PlanResourceChange_Request) ProtoMessage() {}
func (*PlanResourceChange_Request) Descriptor() ([]byte, []int) { func (*PlanResourceChange_Request) Descriptor() ([]byte, []int) {
return fileDescriptor_tfplugin5_0417c8e6dca655d3, []int{13, 0} return fileDescriptor_tfplugin5_56820f4fb67360c5, []int{13, 0}
} }
func (m *PlanResourceChange_Request) XXX_Unmarshal(b []byte) error { func (m *PlanResourceChange_Request) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_PlanResourceChange_Request.Unmarshal(m, b) return xxx_messageInfo_PlanResourceChange_Request.Unmarshal(m, b)
@ -1770,7 +1773,7 @@ func (m *PlanResourceChange_Response) Reset() { *m = PlanResourceChange_
func (m *PlanResourceChange_Response) String() string { return proto.CompactTextString(m) } func (m *PlanResourceChange_Response) String() string { return proto.CompactTextString(m) }
func (*PlanResourceChange_Response) ProtoMessage() {} func (*PlanResourceChange_Response) ProtoMessage() {}
func (*PlanResourceChange_Response) Descriptor() ([]byte, []int) { func (*PlanResourceChange_Response) Descriptor() ([]byte, []int) {
return fileDescriptor_tfplugin5_0417c8e6dca655d3, []int{13, 1} return fileDescriptor_tfplugin5_56820f4fb67360c5, []int{13, 1}
} }
func (m *PlanResourceChange_Response) XXX_Unmarshal(b []byte) error { func (m *PlanResourceChange_Response) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_PlanResourceChange_Response.Unmarshal(m, b) return xxx_messageInfo_PlanResourceChange_Response.Unmarshal(m, b)
@ -1835,7 +1838,7 @@ func (m *ApplyResourceChange) Reset() { *m = ApplyResourceChange{} }
func (m *ApplyResourceChange) String() string { return proto.CompactTextString(m) } func (m *ApplyResourceChange) String() string { return proto.CompactTextString(m) }
func (*ApplyResourceChange) ProtoMessage() {} func (*ApplyResourceChange) ProtoMessage() {}
func (*ApplyResourceChange) Descriptor() ([]byte, []int) { func (*ApplyResourceChange) Descriptor() ([]byte, []int) {
return fileDescriptor_tfplugin5_0417c8e6dca655d3, []int{14} return fileDescriptor_tfplugin5_56820f4fb67360c5, []int{14}
} }
func (m *ApplyResourceChange) XXX_Unmarshal(b []byte) error { func (m *ApplyResourceChange) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_ApplyResourceChange.Unmarshal(m, b) return xxx_messageInfo_ApplyResourceChange.Unmarshal(m, b)
@ -1870,7 +1873,7 @@ func (m *ApplyResourceChange_Request) Reset() { *m = ApplyResourceChange
func (m *ApplyResourceChange_Request) String() string { return proto.CompactTextString(m) } func (m *ApplyResourceChange_Request) String() string { return proto.CompactTextString(m) }
func (*ApplyResourceChange_Request) ProtoMessage() {} func (*ApplyResourceChange_Request) ProtoMessage() {}
func (*ApplyResourceChange_Request) Descriptor() ([]byte, []int) { func (*ApplyResourceChange_Request) Descriptor() ([]byte, []int) {
return fileDescriptor_tfplugin5_0417c8e6dca655d3, []int{14, 0} return fileDescriptor_tfplugin5_56820f4fb67360c5, []int{14, 0}
} }
func (m *ApplyResourceChange_Request) XXX_Unmarshal(b []byte) error { func (m *ApplyResourceChange_Request) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_ApplyResourceChange_Request.Unmarshal(m, b) return xxx_messageInfo_ApplyResourceChange_Request.Unmarshal(m, b)
@ -1950,7 +1953,7 @@ func (m *ApplyResourceChange_Response) Reset() { *m = ApplyResourceChang
func (m *ApplyResourceChange_Response) String() string { return proto.CompactTextString(m) } func (m *ApplyResourceChange_Response) String() string { return proto.CompactTextString(m) }
func (*ApplyResourceChange_Response) ProtoMessage() {} func (*ApplyResourceChange_Response) ProtoMessage() {}
func (*ApplyResourceChange_Response) Descriptor() ([]byte, []int) { func (*ApplyResourceChange_Response) Descriptor() ([]byte, []int) {
return fileDescriptor_tfplugin5_0417c8e6dca655d3, []int{14, 1} return fileDescriptor_tfplugin5_56820f4fb67360c5, []int{14, 1}
} }
func (m *ApplyResourceChange_Response) XXX_Unmarshal(b []byte) error { func (m *ApplyResourceChange_Response) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_ApplyResourceChange_Response.Unmarshal(m, b) return xxx_messageInfo_ApplyResourceChange_Response.Unmarshal(m, b)
@ -2008,7 +2011,7 @@ func (m *ImportResourceState) Reset() { *m = ImportResourceState{} }
func (m *ImportResourceState) String() string { return proto.CompactTextString(m) } func (m *ImportResourceState) String() string { return proto.CompactTextString(m) }
func (*ImportResourceState) ProtoMessage() {} func (*ImportResourceState) ProtoMessage() {}
func (*ImportResourceState) Descriptor() ([]byte, []int) { func (*ImportResourceState) Descriptor() ([]byte, []int) {
return fileDescriptor_tfplugin5_0417c8e6dca655d3, []int{15} return fileDescriptor_tfplugin5_56820f4fb67360c5, []int{15}
} }
func (m *ImportResourceState) XXX_Unmarshal(b []byte) error { func (m *ImportResourceState) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_ImportResourceState.Unmarshal(m, b) return xxx_messageInfo_ImportResourceState.Unmarshal(m, b)
@ -2040,7 +2043,7 @@ func (m *ImportResourceState_Request) Reset() { *m = ImportResourceState
func (m *ImportResourceState_Request) String() string { return proto.CompactTextString(m) } func (m *ImportResourceState_Request) String() string { return proto.CompactTextString(m) }
func (*ImportResourceState_Request) ProtoMessage() {} func (*ImportResourceState_Request) ProtoMessage() {}
func (*ImportResourceState_Request) Descriptor() ([]byte, []int) { func (*ImportResourceState_Request) Descriptor() ([]byte, []int) {
return fileDescriptor_tfplugin5_0417c8e6dca655d3, []int{15, 0} return fileDescriptor_tfplugin5_56820f4fb67360c5, []int{15, 0}
} }
func (m *ImportResourceState_Request) XXX_Unmarshal(b []byte) error { func (m *ImportResourceState_Request) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_ImportResourceState_Request.Unmarshal(m, b) return xxx_messageInfo_ImportResourceState_Request.Unmarshal(m, b)
@ -2087,7 +2090,7 @@ func (m *ImportResourceState_ImportedResource) Reset() { *m = ImportReso
func (m *ImportResourceState_ImportedResource) String() string { return proto.CompactTextString(m) } func (m *ImportResourceState_ImportedResource) String() string { return proto.CompactTextString(m) }
func (*ImportResourceState_ImportedResource) ProtoMessage() {} func (*ImportResourceState_ImportedResource) ProtoMessage() {}
func (*ImportResourceState_ImportedResource) Descriptor() ([]byte, []int) { func (*ImportResourceState_ImportedResource) Descriptor() ([]byte, []int) {
return fileDescriptor_tfplugin5_0417c8e6dca655d3, []int{15, 1} return fileDescriptor_tfplugin5_56820f4fb67360c5, []int{15, 1}
} }
func (m *ImportResourceState_ImportedResource) XXX_Unmarshal(b []byte) error { func (m *ImportResourceState_ImportedResource) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_ImportResourceState_ImportedResource.Unmarshal(m, b) return xxx_messageInfo_ImportResourceState_ImportedResource.Unmarshal(m, b)
@ -2140,7 +2143,7 @@ func (m *ImportResourceState_Response) Reset() { *m = ImportResourceStat
func (m *ImportResourceState_Response) String() string { return proto.CompactTextString(m) } func (m *ImportResourceState_Response) String() string { return proto.CompactTextString(m) }
func (*ImportResourceState_Response) ProtoMessage() {} func (*ImportResourceState_Response) ProtoMessage() {}
func (*ImportResourceState_Response) Descriptor() ([]byte, []int) { func (*ImportResourceState_Response) Descriptor() ([]byte, []int) {
return fileDescriptor_tfplugin5_0417c8e6dca655d3, []int{15, 2} return fileDescriptor_tfplugin5_56820f4fb67360c5, []int{15, 2}
} }
func (m *ImportResourceState_Response) XXX_Unmarshal(b []byte) error { func (m *ImportResourceState_Response) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_ImportResourceState_Response.Unmarshal(m, b) return xxx_messageInfo_ImportResourceState_Response.Unmarshal(m, b)
@ -2184,7 +2187,7 @@ func (m *ReadDataSource) Reset() { *m = ReadDataSource{} }
func (m *ReadDataSource) String() string { return proto.CompactTextString(m) } func (m *ReadDataSource) String() string { return proto.CompactTextString(m) }
func (*ReadDataSource) ProtoMessage() {} func (*ReadDataSource) ProtoMessage() {}
func (*ReadDataSource) Descriptor() ([]byte, []int) { func (*ReadDataSource) Descriptor() ([]byte, []int) {
return fileDescriptor_tfplugin5_0417c8e6dca655d3, []int{16} return fileDescriptor_tfplugin5_56820f4fb67360c5, []int{16}
} }
func (m *ReadDataSource) XXX_Unmarshal(b []byte) error { func (m *ReadDataSource) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_ReadDataSource.Unmarshal(m, b) return xxx_messageInfo_ReadDataSource.Unmarshal(m, b)
@ -2216,7 +2219,7 @@ func (m *ReadDataSource_Request) Reset() { *m = ReadDataSource_Request{}
func (m *ReadDataSource_Request) String() string { return proto.CompactTextString(m) } func (m *ReadDataSource_Request) String() string { return proto.CompactTextString(m) }
func (*ReadDataSource_Request) ProtoMessage() {} func (*ReadDataSource_Request) ProtoMessage() {}
func (*ReadDataSource_Request) Descriptor() ([]byte, []int) { func (*ReadDataSource_Request) Descriptor() ([]byte, []int) {
return fileDescriptor_tfplugin5_0417c8e6dca655d3, []int{16, 0} return fileDescriptor_tfplugin5_56820f4fb67360c5, []int{16, 0}
} }
func (m *ReadDataSource_Request) XXX_Unmarshal(b []byte) error { func (m *ReadDataSource_Request) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_ReadDataSource_Request.Unmarshal(m, b) return xxx_messageInfo_ReadDataSource_Request.Unmarshal(m, b)
@ -2262,7 +2265,7 @@ func (m *ReadDataSource_Response) Reset() { *m = ReadDataSource_Response
func (m *ReadDataSource_Response) String() string { return proto.CompactTextString(m) } func (m *ReadDataSource_Response) String() string { return proto.CompactTextString(m) }
func (*ReadDataSource_Response) ProtoMessage() {} func (*ReadDataSource_Response) ProtoMessage() {}
func (*ReadDataSource_Response) Descriptor() ([]byte, []int) { func (*ReadDataSource_Response) Descriptor() ([]byte, []int) {
return fileDescriptor_tfplugin5_0417c8e6dca655d3, []int{16, 1} return fileDescriptor_tfplugin5_56820f4fb67360c5, []int{16, 1}
} }
func (m *ReadDataSource_Response) XXX_Unmarshal(b []byte) error { func (m *ReadDataSource_Response) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_ReadDataSource_Response.Unmarshal(m, b) return xxx_messageInfo_ReadDataSource_Response.Unmarshal(m, b)
@ -2306,7 +2309,7 @@ func (m *GetProvisionerSchema) Reset() { *m = GetProvisionerSchema{} }
func (m *GetProvisionerSchema) String() string { return proto.CompactTextString(m) } func (m *GetProvisionerSchema) String() string { return proto.CompactTextString(m) }
func (*GetProvisionerSchema) ProtoMessage() {} func (*GetProvisionerSchema) ProtoMessage() {}
func (*GetProvisionerSchema) Descriptor() ([]byte, []int) { func (*GetProvisionerSchema) Descriptor() ([]byte, []int) {
return fileDescriptor_tfplugin5_0417c8e6dca655d3, []int{17} return fileDescriptor_tfplugin5_56820f4fb67360c5, []int{17}
} }
func (m *GetProvisionerSchema) XXX_Unmarshal(b []byte) error { func (m *GetProvisionerSchema) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_GetProvisionerSchema.Unmarshal(m, b) return xxx_messageInfo_GetProvisionerSchema.Unmarshal(m, b)
@ -2336,7 +2339,7 @@ func (m *GetProvisionerSchema_Request) Reset() { *m = GetProvisionerSche
func (m *GetProvisionerSchema_Request) String() string { return proto.CompactTextString(m) } func (m *GetProvisionerSchema_Request) String() string { return proto.CompactTextString(m) }
func (*GetProvisionerSchema_Request) ProtoMessage() {} func (*GetProvisionerSchema_Request) ProtoMessage() {}
func (*GetProvisionerSchema_Request) Descriptor() ([]byte, []int) { func (*GetProvisionerSchema_Request) Descriptor() ([]byte, []int) {
return fileDescriptor_tfplugin5_0417c8e6dca655d3, []int{17, 0} return fileDescriptor_tfplugin5_56820f4fb67360c5, []int{17, 0}
} }
func (m *GetProvisionerSchema_Request) XXX_Unmarshal(b []byte) error { func (m *GetProvisionerSchema_Request) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_GetProvisionerSchema_Request.Unmarshal(m, b) return xxx_messageInfo_GetProvisionerSchema_Request.Unmarshal(m, b)
@ -2368,7 +2371,7 @@ func (m *GetProvisionerSchema_Response) Reset() { *m = GetProvisionerSch
func (m *GetProvisionerSchema_Response) String() string { return proto.CompactTextString(m) } func (m *GetProvisionerSchema_Response) String() string { return proto.CompactTextString(m) }
func (*GetProvisionerSchema_Response) ProtoMessage() {} func (*GetProvisionerSchema_Response) ProtoMessage() {}
func (*GetProvisionerSchema_Response) Descriptor() ([]byte, []int) { func (*GetProvisionerSchema_Response) Descriptor() ([]byte, []int) {
return fileDescriptor_tfplugin5_0417c8e6dca655d3, []int{17, 1} return fileDescriptor_tfplugin5_56820f4fb67360c5, []int{17, 1}
} }
func (m *GetProvisionerSchema_Response) XXX_Unmarshal(b []byte) error { func (m *GetProvisionerSchema_Response) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_GetProvisionerSchema_Response.Unmarshal(m, b) return xxx_messageInfo_GetProvisionerSchema_Response.Unmarshal(m, b)
@ -2412,7 +2415,7 @@ func (m *ValidateProvisionerConfig) Reset() { *m = ValidateProvisionerCo
func (m *ValidateProvisionerConfig) String() string { return proto.CompactTextString(m) } func (m *ValidateProvisionerConfig) String() string { return proto.CompactTextString(m) }
func (*ValidateProvisionerConfig) ProtoMessage() {} func (*ValidateProvisionerConfig) ProtoMessage() {}
func (*ValidateProvisionerConfig) Descriptor() ([]byte, []int) { func (*ValidateProvisionerConfig) Descriptor() ([]byte, []int) {
return fileDescriptor_tfplugin5_0417c8e6dca655d3, []int{18} return fileDescriptor_tfplugin5_56820f4fb67360c5, []int{18}
} }
func (m *ValidateProvisionerConfig) XXX_Unmarshal(b []byte) error { func (m *ValidateProvisionerConfig) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_ValidateProvisionerConfig.Unmarshal(m, b) return xxx_messageInfo_ValidateProvisionerConfig.Unmarshal(m, b)
@ -2443,7 +2446,7 @@ func (m *ValidateProvisionerConfig_Request) Reset() { *m = ValidateProvi
func (m *ValidateProvisionerConfig_Request) String() string { return proto.CompactTextString(m) } func (m *ValidateProvisionerConfig_Request) String() string { return proto.CompactTextString(m) }
func (*ValidateProvisionerConfig_Request) ProtoMessage() {} func (*ValidateProvisionerConfig_Request) ProtoMessage() {}
func (*ValidateProvisionerConfig_Request) Descriptor() ([]byte, []int) { func (*ValidateProvisionerConfig_Request) Descriptor() ([]byte, []int) {
return fileDescriptor_tfplugin5_0417c8e6dca655d3, []int{18, 0} return fileDescriptor_tfplugin5_56820f4fb67360c5, []int{18, 0}
} }
func (m *ValidateProvisionerConfig_Request) XXX_Unmarshal(b []byte) error { func (m *ValidateProvisionerConfig_Request) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_ValidateProvisionerConfig_Request.Unmarshal(m, b) return xxx_messageInfo_ValidateProvisionerConfig_Request.Unmarshal(m, b)
@ -2481,7 +2484,7 @@ func (m *ValidateProvisionerConfig_Response) Reset() { *m = ValidateProv
func (m *ValidateProvisionerConfig_Response) String() string { return proto.CompactTextString(m) } func (m *ValidateProvisionerConfig_Response) String() string { return proto.CompactTextString(m) }
func (*ValidateProvisionerConfig_Response) ProtoMessage() {} func (*ValidateProvisionerConfig_Response) ProtoMessage() {}
func (*ValidateProvisionerConfig_Response) Descriptor() ([]byte, []int) { func (*ValidateProvisionerConfig_Response) Descriptor() ([]byte, []int) {
return fileDescriptor_tfplugin5_0417c8e6dca655d3, []int{18, 1} return fileDescriptor_tfplugin5_56820f4fb67360c5, []int{18, 1}
} }
func (m *ValidateProvisionerConfig_Response) XXX_Unmarshal(b []byte) error { func (m *ValidateProvisionerConfig_Response) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_ValidateProvisionerConfig_Response.Unmarshal(m, b) return xxx_messageInfo_ValidateProvisionerConfig_Response.Unmarshal(m, b)
@ -2518,7 +2521,7 @@ func (m *ProvisionResource) Reset() { *m = ProvisionResource{} }
func (m *ProvisionResource) String() string { return proto.CompactTextString(m) } func (m *ProvisionResource) String() string { return proto.CompactTextString(m) }
func (*ProvisionResource) ProtoMessage() {} func (*ProvisionResource) ProtoMessage() {}
func (*ProvisionResource) Descriptor() ([]byte, []int) { func (*ProvisionResource) Descriptor() ([]byte, []int) {
return fileDescriptor_tfplugin5_0417c8e6dca655d3, []int{19} return fileDescriptor_tfplugin5_56820f4fb67360c5, []int{19}
} }
func (m *ProvisionResource) XXX_Unmarshal(b []byte) error { func (m *ProvisionResource) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_ProvisionResource.Unmarshal(m, b) return xxx_messageInfo_ProvisionResource.Unmarshal(m, b)
@ -2550,7 +2553,7 @@ func (m *ProvisionResource_Request) Reset() { *m = ProvisionResource_Req
func (m *ProvisionResource_Request) String() string { return proto.CompactTextString(m) } func (m *ProvisionResource_Request) String() string { return proto.CompactTextString(m) }
func (*ProvisionResource_Request) ProtoMessage() {} func (*ProvisionResource_Request) ProtoMessage() {}
func (*ProvisionResource_Request) Descriptor() ([]byte, []int) { func (*ProvisionResource_Request) Descriptor() ([]byte, []int) {
return fileDescriptor_tfplugin5_0417c8e6dca655d3, []int{19, 0} return fileDescriptor_tfplugin5_56820f4fb67360c5, []int{19, 0}
} }
func (m *ProvisionResource_Request) XXX_Unmarshal(b []byte) error { func (m *ProvisionResource_Request) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_ProvisionResource_Request.Unmarshal(m, b) return xxx_messageInfo_ProvisionResource_Request.Unmarshal(m, b)
@ -2596,7 +2599,7 @@ func (m *ProvisionResource_Response) Reset() { *m = ProvisionResource_Re
func (m *ProvisionResource_Response) String() string { return proto.CompactTextString(m) } func (m *ProvisionResource_Response) String() string { return proto.CompactTextString(m) }
func (*ProvisionResource_Response) ProtoMessage() {} func (*ProvisionResource_Response) ProtoMessage() {}
func (*ProvisionResource_Response) Descriptor() ([]byte, []int) { func (*ProvisionResource_Response) Descriptor() ([]byte, []int) {
return fileDescriptor_tfplugin5_0417c8e6dca655d3, []int{19, 1} return fileDescriptor_tfplugin5_56820f4fb67360c5, []int{19, 1}
} }
func (m *ProvisionResource_Response) XXX_Unmarshal(b []byte) error { func (m *ProvisionResource_Response) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_ProvisionResource_Response.Unmarshal(m, b) return xxx_messageInfo_ProvisionResource_Response.Unmarshal(m, b)
@ -3327,125 +3330,126 @@ var _Provisioner_serviceDesc = grpc.ServiceDesc{
Metadata: "tfplugin5.proto", Metadata: "tfplugin5.proto",
} }
func init() { proto.RegisterFile("tfplugin5.proto", fileDescriptor_tfplugin5_0417c8e6dca655d3) } func init() { proto.RegisterFile("tfplugin5.proto", fileDescriptor_tfplugin5_56820f4fb67360c5) }
var fileDescriptor_tfplugin5_0417c8e6dca655d3 = []byte{ var fileDescriptor_tfplugin5_56820f4fb67360c5 = []byte{
// 1867 bytes of a gzipped FileDescriptorProto // 1876 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xd4, 0x59, 0xcd, 0x73, 0x1b, 0x49, 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xd4, 0x59, 0xcd, 0x6f, 0x23, 0x49,
0x15, 0xcf, 0x68, 0x24, 0x5b, 0x7a, 0xf2, 0x87, 0xdc, 0xc9, 0x06, 0x31, 0xbb, 0x0b, 0x46, 0x7c, 0x15, 0x9f, 0x76, 0xdb, 0x89, 0xfd, 0x9c, 0x0f, 0xa7, 0x66, 0x76, 0x30, 0xbd, 0xbb, 0x10, 0xcc,
0xd8, 0x5b, 0xbb, 0x51, 0xb6, 0x1c, 0xd8, 0x5d, 0x4c, 0x6a, 0x0b, 0xc7, 0x31, 0x89, 0x8b, 0xac, 0x47, 0xb2, 0xda, 0x1d, 0xcf, 0x2a, 0x03, 0xbb, 0x4b, 0x18, 0xad, 0xc8, 0x66, 0x42, 0x26, 0x62,
0x31, 0xad, 0x6c, 0x42, 0x15, 0x55, 0xab, 0xea, 0x68, 0xda, 0xca, 0x10, 0x69, 0x66, 0xb6, 0xa7, 0x26, 0x1b, 0xca, 0xf3, 0x81, 0x84, 0xb4, 0x56, 0x8d, 0xbb, 0xe2, 0x69, 0xc6, 0xee, 0xee, 0xad,
0x65, 0x5b, 0xc5, 0x91, 0x82, 0x33, 0x17, 0x3e, 0xaa, 0x58, 0xb8, 0xf0, 0x2f, 0x70, 0x00, 0x6e, 0x2e, 0x67, 0x62, 0x71, 0x44, 0x70, 0xe6, 0xc2, 0x87, 0xc4, 0xc7, 0x85, 0x03, 0xff, 0x00, 0x07,
0x9c, 0xf8, 0x07, 0xb8, 0x2d, 0x9c, 0x28, 0x8e, 0x14, 0x47, 0xb8, 0x50, 0x45, 0xf5, 0xd7, 0x4c, 0xe0, 0xc6, 0x89, 0x7f, 0x80, 0x1b, 0x70, 0x42, 0x70, 0x43, 0x1c, 0xe1, 0x82, 0x84, 0xea, 0xab,
0x4b, 0x1a, 0xd9, 0x13, 0x7b, 0x53, 0xd4, 0xde, 0xa6, 0xfb, 0xfd, 0xfa, 0xbd, 0x5f, 0xbf, 0xf7, 0xbb, 0x6c, 0xb7, 0x93, 0x9e, 0x64, 0x57, 0x88, 0x5b, 0x57, 0xbd, 0x5f, 0xbd, 0xf7, 0xab, 0xf7,
0xfa, 0xbd, 0x6e, 0x09, 0x56, 0xf9, 0x51, 0x3c, 0x18, 0xf5, 0x83, 0xf0, 0x6b, 0xed, 0x98, 0x45, 0x5e, 0xbd, 0x57, 0x65, 0xc3, 0x2a, 0x3f, 0x8e, 0x07, 0xa3, 0x7e, 0x10, 0x7e, 0xa9, 0x1d, 0xb3,
0x3c, 0x42, 0xb5, 0x74, 0xa2, 0x75, 0x1b, 0x96, 0xee, 0x8e, 0x43, 0x32, 0x0c, 0x7a, 0x8f, 0xc8, 0x88, 0x47, 0xa8, 0x96, 0x4e, 0xb4, 0x6e, 0xc3, 0xd2, 0x9d, 0x71, 0x48, 0x86, 0x41, 0xef, 0x11,
0x60, 0x44, 0x51, 0x13, 0x16, 0x87, 0x49, 0x3f, 0x26, 0xbd, 0x67, 0x4d, 0x67, 0xdd, 0xd9, 0x5c, 0x19, 0x8c, 0x28, 0x6a, 0xc2, 0xe2, 0x30, 0xe9, 0xc7, 0xa4, 0xf7, 0xac, 0xe9, 0xac, 0x3b, 0x9b,
0xc2, 0x66, 0x88, 0x10, 0x94, 0x7f, 0x90, 0x44, 0x61, 0xb3, 0x24, 0xa7, 0xe5, 0x77, 0xeb, 0xef, 0x4b, 0xd8, 0x0c, 0x11, 0x82, 0xf2, 0xb7, 0x93, 0x28, 0x6c, 0x96, 0xe4, 0xb4, 0xfc, 0x6e, 0xfd,
0x0e, 0xc0, 0xdd, 0x80, 0xf4, 0xc3, 0x28, 0xe1, 0x41, 0x0f, 0x6d, 0x43, 0x35, 0xa1, 0xc7, 0x94, 0xd5, 0x01, 0xb8, 0x13, 0x90, 0x7e, 0x18, 0x25, 0x3c, 0xe8, 0xa1, 0x6d, 0xa8, 0x26, 0xf4, 0x84,
0x05, 0x7c, 0x2c, 0x57, 0xaf, 0x6c, 0x7d, 0xae, 0x9d, 0xd9, 0xce, 0x80, 0xed, 0x8e, 0x46, 0xe1, 0xb2, 0x80, 0x8f, 0xe5, 0xea, 0x95, 0xad, 0x4f, 0xb5, 0x33, 0xdb, 0x19, 0xb0, 0xdd, 0xd1, 0x28,
0x14, 0x2f, 0x0c, 0x27, 0xa3, 0xe1, 0x90, 0xb0, 0xb1, 0xb4, 0x50, 0xc3, 0x66, 0x88, 0xae, 0xc3, 0x9c, 0xe2, 0x85, 0xe1, 0x64, 0x34, 0x1c, 0x12, 0x36, 0x96, 0x16, 0x6a, 0xd8, 0x0c, 0xd1, 0x75,
0x82, 0x4f, 0x39, 0x09, 0x06, 0x4d, 0x57, 0x0a, 0xf4, 0x08, 0xbd, 0x05, 0x35, 0xc2, 0x39, 0x0b, 0x58, 0xf0, 0x29, 0x27, 0xc1, 0xa0, 0xe9, 0x4a, 0x81, 0x1e, 0xa1, 0xb7, 0xa0, 0x46, 0x38, 0x67,
0x9e, 0x8c, 0x38, 0x6d, 0x96, 0xd7, 0x9d, 0xcd, 0xfa, 0x56, 0xd3, 0x32, 0xb7, 0x63, 0x64, 0x87, 0xc1, 0x93, 0x11, 0xa7, 0xcd, 0xf2, 0xba, 0xb3, 0x59, 0xdf, 0x6a, 0x5a, 0xe6, 0x76, 0x8c, 0xec,
0x84, 0x3f, 0xc5, 0x19, 0xb4, 0x75, 0x13, 0xaa, 0xc6, 0x3e, 0xaa, 0xc3, 0xe2, 0xfe, 0xc1, 0xa3, 0x88, 0xf0, 0xa7, 0x38, 0x83, 0xb6, 0x6e, 0x42, 0xd5, 0xd8, 0x47, 0x75, 0x58, 0x3c, 0x38, 0x7c,
0x9d, 0x07, 0xfb, 0x77, 0x1b, 0x57, 0x50, 0x0d, 0x2a, 0x7b, 0x18, 0x7f, 0x07, 0x37, 0x1c, 0x31, 0xb4, 0x73, 0xef, 0xe0, 0x4e, 0xe3, 0x0a, 0xaa, 0x41, 0x65, 0x0f, 0xe3, 0xf7, 0x71, 0xc3, 0x11,
0xff, 0x78, 0x07, 0x1f, 0xec, 0x1f, 0xdc, 0x6b, 0x94, 0x5a, 0x7f, 0x75, 0x60, 0x79, 0x42, 0x1b, 0xf3, 0x8f, 0x77, 0xf0, 0xe1, 0xc1, 0xe1, 0x7e, 0xa3, 0xd4, 0xfa, 0xb3, 0x03, 0xcb, 0x13, 0xda,
0xba, 0x05, 0x95, 0x84, 0xd3, 0x38, 0x69, 0x3a, 0xeb, 0xee, 0x66, 0x7d, 0xeb, 0xd5, 0x79, 0x66, 0xd0, 0x2d, 0xa8, 0x24, 0x9c, 0xc6, 0x49, 0xd3, 0x59, 0x77, 0x37, 0xeb, 0x5b, 0xaf, 0xce, 0x33,
0xdb, 0x1d, 0x4e, 0x63, 0xac, 0xb0, 0xde, 0xcf, 0x1c, 0x28, 0x8b, 0x31, 0xda, 0x80, 0x95, 0x94, 0xdb, 0xee, 0x70, 0x1a, 0x63, 0x85, 0xf5, 0x7e, 0xe8, 0x40, 0x59, 0x8c, 0xd1, 0x06, 0xac, 0xa4,
0x4d, 0x37, 0x24, 0x43, 0x2a, 0x9d, 0x55, 0xbb, 0x7f, 0x05, 0x2f, 0xa7, 0xf3, 0x07, 0x64, 0x48, 0x6c, 0xba, 0x21, 0x19, 0x52, 0xe9, 0xac, 0xda, 0xdd, 0x2b, 0x78, 0x39, 0x9d, 0x3f, 0x24, 0x43,
0x51, 0x1b, 0x10, 0x1d, 0xd0, 0x21, 0x0d, 0x79, 0xf7, 0x19, 0x1d, 0x77, 0x13, 0xce, 0x82, 0xb0, 0x8a, 0xda, 0x80, 0xe8, 0x80, 0x0e, 0x69, 0xc8, 0xbb, 0xcf, 0xe8, 0xb8, 0x9b, 0x70, 0x16, 0x84,
0xaf, 0xdc, 0x73, 0xff, 0x0a, 0x6e, 0x68, 0xd9, 0xb7, 0xe9, 0xb8, 0x23, 0x25, 0x68, 0x13, 0x56, 0x7d, 0xe5, 0x9e, 0xbb, 0x57, 0x70, 0x43, 0xcb, 0xbe, 0x4e, 0xc7, 0x1d, 0x29, 0x41, 0x9b, 0xb0,
0x6d, 0x7c, 0x10, 0x72, 0xe9, 0x32, 0x57, 0x68, 0xce, 0xc0, 0xfb, 0x21, 0xbf, 0x03, 0x22, 0x52, 0x6a, 0xe3, 0x83, 0x90, 0x4b, 0x97, 0xb9, 0x42, 0x73, 0x06, 0x3e, 0x08, 0xf9, 0x7b, 0x20, 0x22,
0x03, 0xda, 0xe3, 0x11, 0x6b, 0xdd, 0x12, 0xb4, 0xa2, 0xd8, 0xab, 0xc1, 0x22, 0xa6, 0x1f, 0x8e, 0x35, 0xa0, 0x3d, 0x1e, 0xb1, 0xd6, 0x2d, 0x41, 0x2b, 0x8a, 0xbd, 0x1a, 0x2c, 0x62, 0xfa, 0xe1,
0x68, 0xc2, 0xbd, 0x75, 0xa8, 0x62, 0x9a, 0xc4, 0x51, 0x98, 0x50, 0x74, 0x0d, 0x2a, 0x7b, 0x8c, 0x88, 0x26, 0xdc, 0x5b, 0x87, 0x2a, 0xa6, 0x49, 0x1c, 0x85, 0x09, 0x45, 0xd7, 0xa0, 0xb2, 0xc7,
0x45, 0x4c, 0x91, 0xc4, 0x15, 0x2a, 0x06, 0xad, 0x9f, 0x3b, 0x50, 0xc5, 0xe4, 0xa4, 0xc3, 0x09, 0x58, 0xc4, 0x14, 0x49, 0xac, 0x06, 0xad, 0x1f, 0x39, 0x50, 0xc5, 0xe4, 0x79, 0x87, 0x13, 0x4e,
0xa7, 0x69, 0x6a, 0x38, 0x59, 0x6a, 0xa0, 0x6d, 0x58, 0x3c, 0x1a, 0x10, 0x3e, 0x24, 0x71, 0xb3, 0xd3, 0xd4, 0x70, 0xb2, 0xd4, 0x40, 0xdb, 0xb0, 0x78, 0x3c, 0x20, 0x7c, 0x48, 0xe2, 0x66, 0x49,
0x24, 0x9d, 0xb4, 0x6e, 0x39, 0xc9, 0xac, 0x6c, 0x7f, 0x4b, 0x41, 0xf6, 0x42, 0xce, 0xc6, 0xd8, 0x3a, 0x69, 0xdd, 0x72, 0x92, 0x59, 0xd9, 0xfe, 0x9a, 0x82, 0xec, 0x85, 0x9c, 0x8d, 0xb1, 0x59,
0x2c, 0xf0, 0xb6, 0x61, 0xc9, 0x16, 0xa0, 0x06, 0xb8, 0xcf, 0xe8, 0x58, 0x13, 0x10, 0x9f, 0x82, 0xe0, 0x6d, 0xc3, 0x92, 0x2d, 0x40, 0x0d, 0x70, 0x9f, 0xd1, 0xb1, 0x26, 0x20, 0x3e, 0x05, 0xa9,
0xd4, 0xb1, 0xc8, 0x57, 0x9d, 0x2b, 0x6a, 0xb0, 0x5d, 0x7a, 0xc7, 0x69, 0x7d, 0x5c, 0x81, 0x85, 0x13, 0x91, 0xaf, 0x3a, 0x57, 0xd4, 0x60, 0xbb, 0xf4, 0x8e, 0xd3, 0xfa, 0x7b, 0x05, 0x16, 0x3a,
0x4e, 0xef, 0x29, 0x1d, 0x12, 0x91, 0x52, 0xc7, 0x94, 0x25, 0x81, 0x66, 0xe6, 0x62, 0x33, 0x44, 0xbd, 0xa7, 0x74, 0x48, 0x44, 0x4a, 0x9d, 0x50, 0x96, 0x04, 0x9a, 0x99, 0x8b, 0xcd, 0x10, 0xdd,
0x37, 0xa0, 0xf2, 0x64, 0x10, 0xf5, 0x9e, 0xc9, 0xe5, 0xf5, 0xad, 0xcf, 0x58, 0xd4, 0xd4, 0xda, 0x80, 0xca, 0x93, 0x41, 0xd4, 0x7b, 0x26, 0x97, 0xd7, 0xb7, 0x3e, 0x61, 0x51, 0x53, 0x6b, 0xdb,
0xf6, 0x1d, 0x21, 0xc6, 0x0a, 0xe5, 0xfd, 0xc6, 0x81, 0x8a, 0x9c, 0x38, 0x43, 0xe5, 0x37, 0x00, 0xef, 0x09, 0x31, 0x56, 0x28, 0xef, 0x17, 0x0e, 0x54, 0xe4, 0xc4, 0x19, 0x2a, 0xbf, 0x02, 0x90,
0xd2, 0xe0, 0x25, 0x7a, 0xcb, 0x2f, 0xcf, 0xea, 0x4d, 0xd3, 0x03, 0x5b, 0x70, 0xf4, 0x2e, 0xd4, 0x06, 0x2f, 0xd1, 0x5b, 0x7e, 0x79, 0x56, 0x6f, 0x9a, 0x1e, 0xd8, 0x82, 0xa3, 0x77, 0xa1, 0x2e,
0xa5, 0xa5, 0x2e, 0x1f, 0xc7, 0x34, 0x69, 0xba, 0x33, 0x59, 0xa5, 0x57, 0x1f, 0xd0, 0x84, 0x53, 0x2d, 0x75, 0xf9, 0x38, 0xa6, 0x49, 0xd3, 0x9d, 0xc9, 0x2a, 0xbd, 0xfa, 0x90, 0x26, 0x9c, 0xfa,
0x5f, 0x71, 0x03, 0xb9, 0xe2, 0xa1, 0x58, 0xe0, 0xfd, 0xd9, 0x81, 0x5a, 0xaa, 0x59, 0x84, 0x23, 0x8a, 0x1b, 0xc8, 0x15, 0x0f, 0xc4, 0x02, 0xef, 0x0f, 0x0e, 0xd4, 0x52, 0xcd, 0x22, 0x1c, 0x59,
0xcb, 0x2a, 0x2c, 0xbf, 0xc5, 0x9c, 0xd0, 0x6d, 0x4e, 0xaf, 0xf8, 0x46, 0xeb, 0x50, 0xf7, 0x69, 0x56, 0x61, 0xf9, 0x2d, 0xe6, 0x84, 0x6e, 0x73, 0x7a, 0xc5, 0x37, 0x5a, 0x87, 0xba, 0x4f, 0x93,
0xd2, 0x63, 0x41, 0xcc, 0xc5, 0x86, 0xd4, 0xe9, 0xb2, 0xa7, 0x90, 0x07, 0x55, 0x46, 0x3f, 0x1c, 0x1e, 0x0b, 0x62, 0x2e, 0x36, 0xa4, 0x4e, 0x97, 0x3d, 0x85, 0x3c, 0xa8, 0x32, 0xfa, 0xe1, 0x28,
0x05, 0x8c, 0xfa, 0xf2, 0x84, 0x55, 0x71, 0x3a, 0x16, 0xb2, 0x48, 0xa2, 0xc8, 0xa0, 0x59, 0x51, 0x60, 0xd4, 0x97, 0x27, 0xac, 0x8a, 0xd3, 0xb1, 0x90, 0x45, 0x12, 0x45, 0x06, 0xcd, 0x8a, 0x92,
0x32, 0x33, 0x16, 0xb2, 0x5e, 0x34, 0x8c, 0x47, 0x9c, 0xfa, 0xcd, 0x05, 0x25, 0x33, 0x63, 0xf4, 0x99, 0xb1, 0x90, 0xf5, 0xa2, 0x61, 0x3c, 0xe2, 0xd4, 0x6f, 0x2e, 0x28, 0x99, 0x19, 0xa3, 0x57,
0x0a, 0xd4, 0x12, 0x1a, 0x26, 0x01, 0x0f, 0x8e, 0x69, 0x73, 0x51, 0x0a, 0xb3, 0x09, 0xef, 0xa3, 0xa0, 0x96, 0xd0, 0x30, 0x09, 0x78, 0x70, 0x42, 0x9b, 0x8b, 0x52, 0x98, 0x4d, 0x78, 0xbf, 0x2a,
0x12, 0xd4, 0xad, 0x5d, 0xa2, 0x97, 0xa1, 0x26, 0xb8, 0x5a, 0xc7, 0x04, 0x57, 0xc5, 0x84, 0x3c, 0x41, 0xdd, 0xda, 0x25, 0x7a, 0x19, 0x6a, 0x82, 0xab, 0x75, 0x4c, 0x70, 0x55, 0x4c, 0xc8, 0xf3,
0x1f, 0xcf, 0x17, 0x46, 0xb4, 0x0b, 0x8b, 0x21, 0x4d, 0xb8, 0x38, 0x43, 0xae, 0xac, 0x4e, 0xaf, 0xf1, 0x62, 0x61, 0x44, 0xbb, 0xb0, 0x18, 0xd2, 0x84, 0x8b, 0x33, 0xe4, 0xca, 0xea, 0xf4, 0xda,
0x9d, 0xe9, 0x61, 0xf9, 0x1d, 0x84, 0xfd, 0xf7, 0x22, 0x9f, 0x62, 0xb3, 0x52, 0x10, 0x1a, 0x06, 0x99, 0x1e, 0x96, 0xdf, 0x41, 0xd8, 0xbf, 0x1f, 0xf9, 0x14, 0x9b, 0x95, 0x82, 0xd0, 0x30, 0x08,
0x61, 0x37, 0xe0, 0x74, 0x98, 0x48, 0x9f, 0xb8, 0xb8, 0x3a, 0x0c, 0xc2, 0x7d, 0x31, 0x96, 0x42, 0xbb, 0x01, 0xa7, 0xc3, 0x44, 0xfa, 0xc4, 0xc5, 0xd5, 0x61, 0x10, 0x1e, 0x88, 0xb1, 0x14, 0x92,
0x72, 0xaa, 0x85, 0x15, 0x2d, 0x24, 0xa7, 0x52, 0xd8, 0xba, 0xa3, 0x76, 0xa6, 0x35, 0x4e, 0x96, 0x53, 0x2d, 0xac, 0x68, 0x21, 0x39, 0x95, 0xc2, 0xd6, 0x7d, 0xb5, 0x33, 0xad, 0x71, 0xb2, 0xf4,
0x1e, 0x80, 0x85, 0xce, 0xfe, 0xc1, 0xbd, 0x07, 0x7b, 0x0d, 0x07, 0x55, 0xa1, 0xfc, 0x60, 0xbf, 0x00, 0x2c, 0x74, 0x0e, 0x0e, 0xf7, 0xef, 0xed, 0x35, 0x1c, 0x54, 0x85, 0xf2, 0xbd, 0x83, 0xce,
0xf3, 0xb0, 0x51, 0x42, 0x8b, 0xe0, 0x76, 0xf6, 0x1e, 0x36, 0x5c, 0xf1, 0xf1, 0xde, 0xce, 0x61, 0x83, 0x46, 0x09, 0x2d, 0x82, 0xdb, 0xd9, 0x7b, 0xd0, 0x70, 0xc5, 0xc7, 0xfd, 0x9d, 0xa3, 0x46,
0xa3, 0xdc, 0xfa, 0x65, 0x19, 0xd6, 0xee, 0x51, 0x7e, 0xc8, 0xa2, 0xe3, 0xc0, 0xa7, 0x4c, 0x91, 0x59, 0x94, 0xa8, 0x7d, 0xfc, 0xfe, 0xc3, 0xa3, 0x46, 0xa5, 0xf5, 0x93, 0x32, 0xac, 0xed, 0x53,
0xb6, 0x4f, 0xee, 0xbf, 0x5d, 0xeb, 0xe8, 0xde, 0x80, 0x6a, 0xac, 0x91, 0xd2, 0x77, 0xf5, 0xad, 0x7e, 0xc4, 0xa2, 0x93, 0xc0, 0xa7, 0x4c, 0xf1, 0xb7, 0x0f, 0xf1, 0xbf, 0x5c, 0xeb, 0x14, 0xdf,
0xb5, 0x99, 0x1d, 0xe3, 0x14, 0x82, 0x28, 0x34, 0x18, 0x4d, 0xa2, 0x11, 0xeb, 0xd1, 0x6e, 0x22, 0x80, 0x6a, 0xac, 0x91, 0xd2, 0x8d, 0xf5, 0xad, 0xb5, 0x99, 0xcd, 0xe3, 0x14, 0x82, 0x28, 0x34,
0x85, 0x26, 0x91, 0xb7, 0xad, 0x65, 0x33, 0xe6, 0xdb, 0xc6, 0x9e, 0xf8, 0x90, 0xab, 0xd5, 0x7c, 0x18, 0x4d, 0xa2, 0x11, 0xeb, 0xd1, 0x6e, 0x22, 0x85, 0x26, 0xa7, 0xb7, 0xad, 0x65, 0x33, 0xe6,
0xa2, 0x4e, 0xf5, 0x2a, 0x9b, 0x9c, 0x45, 0x03, 0xb8, 0xea, 0x13, 0x4e, 0xba, 0x53, 0x96, 0x54, 0xdb, 0xc6, 0x9e, 0xf8, 0x90, 0xab, 0xd5, 0x7c, 0xa2, 0x0e, 0xf8, 0x2a, 0x9b, 0x9c, 0x45, 0x03,
0xd2, 0xdf, 0x2e, 0x66, 0xe9, 0x2e, 0xe1, 0xa4, 0x33, 0x6b, 0x6b, 0xcd, 0x9f, 0x9e, 0x47, 0x6f, 0xb8, 0xea, 0x13, 0x4e, 0xba, 0x53, 0x96, 0x54, 0xfe, 0xdf, 0x2e, 0x66, 0xe9, 0x0e, 0xe1, 0xa4,
0x43, 0xdd, 0x4f, 0x1b, 0x8f, 0x88, 0x98, 0xb0, 0xf2, 0x52, 0x6e, 0x5b, 0xc2, 0x36, 0xd2, 0x7b, 0x33, 0x6b, 0x6b, 0xcd, 0x9f, 0x9e, 0x47, 0x6f, 0x43, 0xdd, 0x4f, 0x7b, 0x90, 0x08, 0x9e, 0xb0,
0x1f, 0xae, 0xe5, 0xed, 0x27, 0xa7, 0x18, 0x6d, 0xd8, 0xc5, 0x28, 0xd7, 0xc7, 0x59, 0x7d, 0xf2, 0xf2, 0x52, 0x6e, 0x87, 0xc2, 0x36, 0xd2, 0x7b, 0x08, 0xd7, 0xf2, 0xf6, 0x93, 0x53, 0x97, 0x36,
0x1e, 0xc3, 0xf5, 0x7c, 0xf2, 0x97, 0x54, 0xdc, 0xfa, 0xd8, 0x81, 0x97, 0x0e, 0x19, 0x8d, 0x09, 0xec, 0xba, 0x94, 0xeb, 0xe3, 0xac, 0x54, 0x79, 0x8f, 0xe1, 0x7a, 0x3e, 0xf9, 0x4b, 0x2a, 0x6e,
0xa3, 0xc6, 0x6b, 0xbb, 0x51, 0x78, 0x14, 0xf4, 0xbd, 0xed, 0x34, 0x3d, 0xd0, 0x4d, 0x58, 0xe8, 0xfd, 0xc9, 0x81, 0x97, 0x8e, 0x18, 0x8d, 0x09, 0xa3, 0xc6, 0x6b, 0xbb, 0x51, 0x78, 0x1c, 0xf4,
0xc9, 0x49, 0x9d, 0x0f, 0xf6, 0x91, 0xb1, 0xef, 0x01, 0x58, 0xc3, 0xbc, 0x1f, 0x3b, 0x56, 0x3e, 0xbd, 0xed, 0x34, 0x3d, 0xd0, 0x4d, 0x58, 0xe8, 0xc9, 0x49, 0x9d, 0x0f, 0xf6, 0xe9, 0xb1, 0xaf,
0x7d, 0x13, 0x56, 0x63, 0x65, 0xc1, 0xef, 0x16, 0x53, 0xb3, 0x62, 0xf0, 0x8a, 0xca, 0x74, 0x34, 0x04, 0x58, 0xc3, 0xbc, 0xef, 0x39, 0x56, 0x3e, 0x7d, 0x15, 0x56, 0x63, 0x65, 0xc1, 0xef, 0x16,
0x4a, 0x45, 0xa3, 0xd1, 0xfa, 0x69, 0x09, 0xae, 0xbd, 0x1f, 0xf7, 0x19, 0xf1, 0x69, 0x1a, 0x15, 0x53, 0xb3, 0x62, 0xf0, 0x8a, 0xca, 0x74, 0x34, 0x4a, 0x45, 0xa3, 0xd1, 0xfa, 0x41, 0x09, 0xae,
0xd1, 0x41, 0x3c, 0x96, 0x6d, 0xee, 0xcc, 0x5a, 0x61, 0x55, 0xee, 0xd2, 0x64, 0xe5, 0x7e, 0x13, 0x3d, 0x8c, 0xfb, 0x8c, 0xf8, 0x34, 0x8d, 0x8a, 0x68, 0x26, 0x1e, 0xcb, 0x36, 0x77, 0x66, 0xd9,
0x6a, 0x8c, 0x9c, 0x74, 0x13, 0xa1, 0x4e, 0x16, 0x86, 0xfa, 0xd6, 0xd5, 0x9c, 0x5e, 0x85, 0xab, 0xb0, 0x8a, 0x78, 0x69, 0xb2, 0x88, 0xbf, 0x09, 0x35, 0x46, 0x9e, 0x77, 0x13, 0xa1, 0x4e, 0xd6,
0x4c, 0x7f, 0x79, 0x3f, 0xb2, 0x9d, 0xf2, 0x2e, 0xac, 0x8c, 0x14, 0x31, 0x5f, 0xeb, 0x38, 0xc7, 0x88, 0xfa, 0xd6, 0xd5, 0x9c, 0xb6, 0x85, 0xab, 0x4c, 0x7f, 0x79, 0xdf, 0xb5, 0x9d, 0xf2, 0x2e,
0x27, 0xcb, 0x06, 0xae, 0x9a, 0xe7, 0x85, 0x5d, 0xf2, 0x47, 0x07, 0xbc, 0x47, 0x64, 0x10, 0xf8, 0xac, 0x8c, 0x14, 0x31, 0x5f, 0xeb, 0x38, 0xc7, 0x27, 0xcb, 0x06, 0xae, 0xfa, 0xe8, 0x85, 0x5d,
0x82, 0x9c, 0xf6, 0x89, 0x68, 0x07, 0x3a, 0xea, 0x8f, 0x0b, 0x3a, 0x26, 0x4b, 0x89, 0x52, 0xb1, 0xf2, 0x3b, 0x07, 0xbc, 0x47, 0x64, 0x10, 0xf8, 0x82, 0x9c, 0xf6, 0x89, 0xe8, 0x0c, 0x3a, 0xea,
0x94, 0xd8, 0xb5, 0x36, 0x3f, 0x45, 0xde, 0x29, 0x4c, 0xfe, 0xf7, 0x0e, 0x34, 0x0d, 0xf9, 0xec, 0x8f, 0x0b, 0x3a, 0x26, 0x4b, 0x89, 0x52, 0xb1, 0x94, 0xd8, 0xb5, 0x36, 0x3f, 0x45, 0xde, 0x29,
0x3c, 0x7c, 0x2a, 0xa8, 0xff, 0xc1, 0x81, 0x9a, 0x22, 0x3a, 0x62, 0xd4, 0xeb, 0x67, 0x5c, 0x5f, 0x4c, 0xfe, 0x37, 0x0e, 0x34, 0x0d, 0xf9, 0xec, 0x3c, 0xfc, 0x5f, 0x50, 0xff, 0xad, 0x03, 0x35,
0x87, 0x35, 0x4e, 0x19, 0x23, 0x47, 0x11, 0x1b, 0x76, 0xed, 0x6b, 0x42, 0x0d, 0x37, 0x52, 0xc1, 0x45, 0x74, 0xc4, 0xa8, 0xd7, 0xcf, 0xb8, 0xbe, 0x0e, 0x6b, 0x9c, 0x32, 0x46, 0x8e, 0x23, 0x36,
0x23, 0x9d, 0x75, 0xff, 0x1f, 0xee, 0xff, 0x72, 0x60, 0x09, 0x53, 0xe2, 0x9b, 0x7c, 0xf1, 0xfc, 0xec, 0xda, 0x37, 0x86, 0x1a, 0x6e, 0xa4, 0x82, 0x47, 0x3a, 0xeb, 0xfe, 0x37, 0xdc, 0xff, 0xe9,
0x82, 0xae, 0xbe, 0x0d, 0xcb, 0xbd, 0x11, 0x63, 0xe2, 0x6a, 0xa9, 0x92, 0xfc, 0x1c, 0xd6, 0x4b, 0xc0, 0x12, 0xa6, 0xc4, 0x37, 0xf9, 0xe2, 0xf9, 0x05, 0x5d, 0x7d, 0x1b, 0x96, 0x7b, 0x23, 0xc6,
0x1a, 0xad, 0x0e, 0xcc, 0xd8, 0xe2, 0xfe, 0x55, 0xa8, 0x85, 0xf4, 0xa4, 0xd8, 0x51, 0xa9, 0x86, 0xc4, 0x2d, 0x53, 0x25, 0xf9, 0x39, 0xac, 0x97, 0x34, 0x5a, 0x1d, 0x98, 0xb1, 0xc5, 0xfd, 0x8b,
0xf4, 0xe4, 0x92, 0xa7, 0xe4, 0x77, 0x65, 0x40, 0x87, 0x03, 0x12, 0x9a, 0x1d, 0xef, 0x3e, 0x25, 0x50, 0x0b, 0xe9, 0xf3, 0x62, 0x47, 0xa5, 0x1a, 0xd2, 0xe7, 0x97, 0x3c, 0x25, 0xbf, 0x2e, 0x03,
0x61, 0x9f, 0x7a, 0xff, 0x75, 0x0a, 0x6e, 0xfc, 0x1d, 0xa8, 0xc7, 0x2c, 0x88, 0x58, 0xb1, 0x6d, 0x3a, 0x1a, 0x90, 0xd0, 0xec, 0x78, 0xf7, 0x29, 0x09, 0xfb, 0xd4, 0xfb, 0x8f, 0x53, 0x70, 0xe3,
0x83, 0xc4, 0x2a, 0xca, 0x7b, 0x80, 0x62, 0x16, 0xc5, 0x51, 0x42, 0xfd, 0x6e, 0xb6, 0x63, 0xf7, 0xef, 0x40, 0x3d, 0x66, 0x41, 0xc4, 0x8a, 0x6d, 0x1b, 0x24, 0x56, 0x51, 0xde, 0x03, 0x14, 0xb3,
0x6c, 0x05, 0x0d, 0xb3, 0xe4, 0xc0, 0xec, 0x3c, 0x4b, 0x94, 0x72, 0xa1, 0x44, 0x41, 0x5f, 0x84, 0x28, 0x8e, 0x12, 0xea, 0x77, 0xb3, 0x1d, 0xbb, 0x67, 0x2b, 0x68, 0x98, 0x25, 0x87, 0x66, 0xe7,
0x65, 0xc5, 0x38, 0x66, 0xc1, 0xb1, 0x30, 0x59, 0x91, 0x77, 0xbe, 0x25, 0x39, 0x79, 0xa8, 0xe6, 0x59, 0xa2, 0x94, 0x0b, 0x25, 0x0a, 0xfa, 0x2c, 0x2c, 0x2b, 0xc6, 0x31, 0x0b, 0x4e, 0x84, 0xc9,
0xbc, 0x5f, 0x97, 0xac, 0x90, 0xdc, 0x86, 0xe5, 0x78, 0x40, 0xc2, 0xb0, 0x68, 0x05, 0x5b, 0xd2, 0x8a, 0xbc, 0xfe, 0x2d, 0xc9, 0xc9, 0x23, 0x35, 0xe7, 0xfd, 0xbc, 0x64, 0x85, 0xe4, 0x36, 0x2c,
0x68, 0x45, 0x70, 0x57, 0x5c, 0x1b, 0xe4, 0xa5, 0x30, 0xe9, 0x32, 0x1a, 0x0f, 0x48, 0x8f, 0xea, 0xc7, 0x03, 0x12, 0x86, 0x45, 0x2b, 0xd8, 0x92, 0x46, 0x2b, 0x82, 0xbb, 0xe2, 0xda, 0x20, 0xef,
0xf8, 0xcc, 0x7f, 0x8e, 0xad, 0x9a, 0x15, 0x58, 0x2d, 0x40, 0x1b, 0xb0, 0x6a, 0x28, 0x18, 0xda, 0x87, 0x49, 0x97, 0xd1, 0x78, 0x40, 0x7a, 0x54, 0xc7, 0x67, 0xfe, 0xcb, 0x6c, 0xd5, 0xac, 0xc0,
0xae, 0xa4, 0xbd, 0xa2, 0xa7, 0x35, 0xf1, 0x0b, 0xf7, 0x73, 0xf4, 0x06, 0xa0, 0x01, 0xed, 0x93, 0x6a, 0x01, 0xda, 0x80, 0x55, 0x43, 0xc1, 0xd0, 0x76, 0x25, 0xed, 0x15, 0x3d, 0xad, 0x89, 0x5f,
0xde, 0x58, 0x5e, 0xb2, 0xbb, 0xc9, 0x38, 0xe1, 0x74, 0xa8, 0x6f, 0xae, 0x0d, 0x25, 0x11, 0xd5, 0xb8, 0x9f, 0xa3, 0x37, 0x00, 0x0d, 0x68, 0x9f, 0xf4, 0xc6, 0xf2, 0xbe, 0xdd, 0x4d, 0xc6, 0x09,
0xb3, 0x23, 0xe7, 0x5b, 0x7f, 0x71, 0xe1, 0xea, 0x4e, 0x1c, 0x0f, 0xc6, 0x53, 0x79, 0xf3, 0x9f, 0xa7, 0x43, 0x7d, 0x89, 0x6d, 0x28, 0x89, 0xa8, 0x9e, 0x1d, 0x39, 0xdf, 0xfa, 0xa3, 0x0b, 0x57,
0x17, 0x9f, 0x37, 0x33, 0xd1, 0x70, 0x9f, 0x27, 0x1a, 0xcf, 0x9d, 0x2e, 0x39, 0x9e, 0xaf, 0xe4, 0x77, 0xe2, 0x78, 0x30, 0x9e, 0xca, 0x9b, 0x7f, 0x7f, 0xfc, 0x79, 0x33, 0x13, 0x0d, 0xf7, 0x45,
0x79, 0xde, 0xfb, 0x93, 0x73, 0xe9, 0x53, 0xdc, 0x84, 0x45, 0x63, 0x43, 0x3d, 0x44, 0xcc, 0x70, 0xa2, 0xf1, 0xc2, 0xe9, 0x92, 0xe3, 0xf9, 0x4a, 0x9e, 0xe7, 0xbd, 0xdf, 0x3b, 0x97, 0x3e, 0xc5,
0x3a, 0xac, 0xee, 0x25, 0xc3, 0x5a, 0x9e, 0x13, 0xd6, 0x7f, 0x96, 0xe0, 0xea, 0xfe, 0x30, 0x8e, 0x4d, 0x58, 0x34, 0x36, 0xd4, 0x9b, 0xc4, 0x0c, 0xa7, 0xc3, 0xea, 0x5e, 0x32, 0xac, 0xe5, 0x39,
0x18, 0x9f, 0xbc, 0x45, 0xbc, 0x55, 0x30, 0xaa, 0x2b, 0x50, 0x0a, 0x7c, 0xfd, 0xe8, 0x2c, 0x05, 0x61, 0xfd, 0x47, 0x09, 0xae, 0x1e, 0x0c, 0xe3, 0x88, 0xf1, 0xc9, 0x5b, 0xc4, 0x5b, 0x05, 0xa3,
0xbe, 0x77, 0x0a, 0x0d, 0xa5, 0x8e, 0xa6, 0x25, 0xf5, 0xdc, 0x27, 0x4b, 0xa1, 0x84, 0x50, 0x28, 0xba, 0x02, 0xa5, 0xc0, 0xd7, 0xef, 0xcf, 0x52, 0xe0, 0x7b, 0xa7, 0xd0, 0x50, 0xea, 0x68, 0x5a,
0xdb, 0x61, 0xee, 0x84, 0xc3, 0xbc, 0xdf, 0xda, 0xd1, 0xf8, 0x00, 0x50, 0xa0, 0x69, 0x74, 0xcd, 0x52, 0xcf, 0x7d, 0xbd, 0x14, 0x4a, 0x08, 0x85, 0xb2, 0x1d, 0xe6, 0x4e, 0x38, 0xcc, 0xfb, 0xa5,
0x75, 0xdb, 0xb4, 0x85, 0x9b, 0x96, 0x89, 0x9c, 0xad, 0xb7, 0xa7, 0xf9, 0xe3, 0xb5, 0x60, 0x6a, 0x1d, 0x8d, 0x0f, 0x00, 0x05, 0x9a, 0x46, 0xd7, 0x5c, 0xb7, 0x4d, 0x5b, 0xb8, 0x69, 0x99, 0xc8,
0x26, 0xb9, 0x78, 0xf5, 0xfd, 0x9b, 0x03, 0x2b, 0xa2, 0xdf, 0x64, 0x2d, 0xfe, 0xc5, 0x35, 0x77, 0xd9, 0x7a, 0x7b, 0x9a, 0x3f, 0x5e, 0x0b, 0xa6, 0x66, 0x92, 0x8b, 0x57, 0xdf, 0xbf, 0x38, 0xb0,
0x36, 0xf1, 0xf2, 0xa9, 0x14, 0x4a, 0x4d, 0xed, 0xe6, 0x0b, 0xef, 0xef, 0x57, 0x0e, 0x5c, 0x33, 0x22, 0xfa, 0x4d, 0xd6, 0xe2, 0x3f, 0xbe, 0xe6, 0xce, 0x26, 0x5e, 0x3e, 0x95, 0x42, 0xa9, 0xa9,
0xcf, 0x14, 0xd1, 0xd6, 0xf3, 0x9e, 0x64, 0xa7, 0x16, 0xaf, 0x5b, 0xa2, 0x2a, 0xa4, 0xd8, 0xf9, 0xdd, 0x7c, 0xe1, 0xfd, 0xfd, 0xd4, 0x81, 0x6b, 0xe6, 0x99, 0x22, 0xda, 0x7a, 0xde, 0x93, 0xec,
0x8f, 0x32, 0x1b, 0x75, 0x71, 0x76, 0x1f, 0x39, 0xf0, 0x59, 0x73, 0xc9, 0xb2, 0x28, 0x7e, 0x02, 0xd4, 0xe2, 0x75, 0x4b, 0x54, 0x85, 0x14, 0x3b, 0xff, 0x51, 0x66, 0xa3, 0x2e, 0xce, 0xee, 0x67,
0xcf, 0x82, 0x4f, 0xe4, 0x32, 0xf2, 0x0f, 0x07, 0xd6, 0x52, 0x5a, 0xe9, 0x8d, 0x24, 0xb9, 0x38, 0x0e, 0x7c, 0xd2, 0x5c, 0xb2, 0x2c, 0x8a, 0x1f, 0xc1, 0xb3, 0xe0, 0x23, 0xb9, 0x8c, 0xfc, 0xcd,
0x2d, 0xf4, 0x36, 0x40, 0x2f, 0x0a, 0x43, 0xda, 0xe3, 0xe6, 0x9e, 0x7f, 0x56, 0xcd, 0xcd, 0xa0, 0x81, 0xb5, 0x94, 0x56, 0x7a, 0x23, 0x49, 0x2e, 0x4e, 0x0b, 0xbd, 0x0d, 0xd0, 0x8b, 0xc2, 0x90,
0xde, 0xf7, 0xad, 0xfd, 0x5c, 0x87, 0x85, 0x68, 0xc4, 0xe3, 0x11, 0xd7, 0x29, 0xa9, 0x47, 0x17, 0xf6, 0xb8, 0xb9, 0xe7, 0x9f, 0x55, 0x73, 0x33, 0xa8, 0xf7, 0x2d, 0x6b, 0x3f, 0xd7, 0x61, 0x21,
0x0e, 0xc3, 0xd6, 0x2f, 0x6a, 0x50, 0x35, 0x4f, 0x32, 0xf4, 0x3d, 0xa8, 0xdd, 0xa3, 0x5c, 0xff, 0x1a, 0xf1, 0x78, 0xc4, 0x75, 0x4a, 0xea, 0xd1, 0x85, 0xc3, 0xb0, 0xf5, 0xe3, 0x1a, 0x54, 0xcd,
0x42, 0xf5, 0xa5, 0x73, 0x5e, 0xbb, 0x2a, 0x81, 0xbe, 0x5c, 0xe8, 0x4d, 0x8c, 0x06, 0x73, 0xde, 0x93, 0x0c, 0x7d, 0x13, 0x6a, 0xfb, 0x94, 0xeb, 0x1f, 0xab, 0x3e, 0x77, 0xce, 0x6b, 0x57, 0x25,
0x7f, 0x68, 0xd3, 0x5a, 0x9f, 0x8b, 0x48, 0x2d, 0xbd, 0x56, 0x00, 0xa9, 0xad, 0xfd, 0xf0, 0xac, 0xd0, 0xe7, 0x0b, 0xbd, 0x89, 0xd1, 0x60, 0xce, 0xfb, 0x0f, 0x6d, 0x5a, 0xeb, 0x73, 0x11, 0xa9,
0xc7, 0x07, 0xba, 0x61, 0x29, 0x9a, 0x0f, 0x4b, 0xed, 0xb6, 0x8b, 0xc2, 0xb5, 0xf1, 0xd1, 0xfc, 0xa5, 0xd7, 0x0a, 0x20, 0xb5, 0xb5, 0xef, 0x9c, 0xf5, 0xf8, 0x40, 0x37, 0x2c, 0x45, 0xf3, 0x61,
0xc7, 0x03, 0x7a, 0x3d, 0x47, 0xd7, 0x34, 0x28, 0x35, 0xfc, 0x46, 0x31, 0xb0, 0x36, 0x1b, 0xe4, 0xa9, 0xdd, 0x76, 0x51, 0xb8, 0x36, 0x3e, 0x9a, 0xff, 0x78, 0x40, 0xaf, 0xe7, 0xe8, 0x9a, 0x06,
0xbf, 0x41, 0xd1, 0x86, 0xa5, 0x25, 0x0f, 0x90, 0x9a, 0xdb, 0x3c, 0x1f, 0xa8, 0x4d, 0xdd, 0xb7, 0xa5, 0x86, 0xdf, 0x28, 0x06, 0xd6, 0x66, 0x83, 0xfc, 0x37, 0x28, 0xda, 0xb0, 0xb4, 0xe4, 0x01,
0xde, 0x18, 0xe8, 0x15, 0x6b, 0x59, 0x3a, 0x9b, 0x2a, 0x7d, 0x75, 0x8e, 0x54, 0x6b, 0xfa, 0xee, 0x52, 0x73, 0x9b, 0xe7, 0x03, 0xb5, 0xa9, 0xbb, 0xd6, 0x1b, 0x03, 0xbd, 0x62, 0x2d, 0x4b, 0x67,
0xe4, 0x8d, 0x1f, 0x7d, 0xde, 0x7e, 0xdb, 0x5a, 0x82, 0x54, 0xdf, 0xfa, 0x7c, 0x80, 0x56, 0xd9, 0x53, 0xa5, 0xaf, 0xce, 0x91, 0x6a, 0x4d, 0xdf, 0x98, 0xbc, 0xf1, 0xa3, 0x4f, 0xdb, 0x6f, 0x5b,
0xcb, 0xbb, 0x52, 0x23, 0x3b, 0x4d, 0x67, 0xc5, 0xa9, 0xfa, 0xaf, 0x9c, 0x07, 0xd3, 0x46, 0x8e, 0x4b, 0x90, 0xea, 0x5b, 0x9f, 0x0f, 0xd0, 0x2a, 0x7b, 0x79, 0x57, 0x6a, 0x64, 0xa7, 0xe9, 0xac,
0x72, 0x2f, 0x60, 0xc8, 0x5e, 0x9e, 0x23, 0x4f, 0xcd, 0x6c, 0x9c, 0x8b, 0xcb, 0xec, 0xe4, 0xb4, 0x38, 0x55, 0xff, 0x85, 0xf3, 0x60, 0xda, 0xc8, 0x71, 0xee, 0x05, 0x0c, 0xd9, 0xcb, 0x73, 0xe4,
0xc5, 0x09, 0x3b, 0x79, 0x6d, 0x33, 0xcf, 0x4e, 0x3e, 0x4e, 0xdb, 0x79, 0x3c, 0xdd, 0x09, 0xd1, 0xa9, 0x99, 0x8d, 0x73, 0x71, 0x99, 0x9d, 0x9c, 0xb6, 0x38, 0x61, 0x27, 0xaf, 0x6d, 0xe6, 0xd9,
0x17, 0xa6, 0x1c, 0x9d, 0x89, 0x52, 0xed, 0xad, 0xb3, 0x20, 0x5a, 0xf1, 0xd7, 0xd5, 0xef, 0xf7, 0xc9, 0xc7, 0x69, 0x3b, 0x8f, 0xa7, 0x3b, 0x21, 0xfa, 0xcc, 0x94, 0xa3, 0x33, 0x51, 0xaa, 0xbd,
0x68, 0xe2, 0xe7, 0x4f, 0x1e, 0xc5, 0xa9, 0x92, 0xe6, 0xac, 0x40, 0x2d, 0xdd, 0xfa, 0x89, 0x0b, 0x75, 0x16, 0x44, 0x2b, 0xfe, 0xb2, 0xfa, 0x29, 0x1f, 0x4d, 0xfc, 0x12, 0xca, 0xa3, 0x38, 0x55,
0x75, 0xab, 0x31, 0xa0, 0x0f, 0xec, 0xe2, 0xb4, 0x91, 0x53, 0x76, 0xec, 0x1e, 0x97, 0x9b, 0xd5, 0xd2, 0x9c, 0x15, 0xa8, 0xa5, 0x5b, 0xdf, 0x77, 0xa1, 0x6e, 0x35, 0x06, 0xf4, 0x81, 0x5d, 0x9c,
0x73, 0x80, 0x9a, 0xea, 0xe9, 0x19, 0xfd, 0x08, 0xe5, 0x9d, 0xc5, 0x19, 0x54, 0x6a, 0xf4, 0x46, 0x36, 0x72, 0xca, 0x8e, 0xdd, 0xe3, 0x72, 0xb3, 0x7a, 0x0e, 0x50, 0x53, 0x3d, 0x3d, 0xa3, 0x1f,
0x41, 0xb4, 0xb6, 0xfc, 0x24, 0xa7, 0xd5, 0x4c, 0x94, 0xdf, 0x19, 0x69, 0x6e, 0xf9, 0xcd, 0x43, 0xa1, 0xbc, 0xb3, 0x38, 0x83, 0x4a, 0x8d, 0xde, 0x28, 0x88, 0xd6, 0x96, 0x9f, 0xe4, 0xb4, 0x9a,
0x29, 0x0b, 0x6f, 0x3a, 0x97, 0x08, 0xc4, 0x93, 0x05, 0xf9, 0xc7, 0xdc, 0xad, 0xff, 0x05, 0x00, 0x89, 0xf2, 0x3b, 0x23, 0xcd, 0x2d, 0xbf, 0x79, 0x28, 0x65, 0xe1, 0x4d, 0xe7, 0x12, 0x81, 0x78,
0x00, 0xff, 0xff, 0xbc, 0x68, 0xf6, 0x08, 0xab, 0x1b, 0x00, 0x00, 0xb2, 0x20, 0xff, 0xa3, 0xbb, 0xf5, 0xdf, 0x00, 0x00, 0x00, 0xff, 0xff, 0xc8, 0x16, 0x0b, 0x32,
0xb6, 0x1b, 0x00, 0x00,
} }

View File

@ -95,6 +95,7 @@ message Schema {
LIST = 2; LIST = 2;
SET = 3; SET = 3;
MAP = 4; MAP = 4;
GROUP = 5;
} }
string type_name = 1; string type_name = 1;

View File

@ -1,8 +1,6 @@
package objchange package objchange
import ( import (
"fmt"
"github.com/hashicorp/terraform/configs/configschema" "github.com/hashicorp/terraform/configs/configschema"
"github.com/zclconf/go-cty/cty" "github.com/zclconf/go-cty/cty"
) )
@ -14,55 +12,7 @@ import (
// This simulates what would result from decoding an empty configuration block // This simulates what would result from decoding an empty configuration block
// with the given schema, except that it does not produce errors // with the given schema, except that it does not produce errors
func AllAttributesNull(schema *configschema.Block) cty.Value { func AllAttributesNull(schema *configschema.Block) cty.Value {
vals := make(map[string]cty.Value) // "All attributes null" happens to be the definition of EmptyValue for
ty := schema.ImpliedType() // a Block, so we can just delegate to that.
return schema.EmptyValue()
for name := range schema.Attributes {
aty := ty.AttributeType(name)
vals[name] = cty.NullVal(aty)
}
for name, blockS := range schema.BlockTypes {
aty := ty.AttributeType(name)
switch blockS.Nesting {
case configschema.NestingSingle:
// NestingSingle behaves like an object attribute, which decodes
// as null when it's not present in configuration.
vals[name] = cty.NullVal(aty)
default:
// All other nesting types decode as "empty" when not present, but
// empty values take different forms depending on the type.
switch {
case aty.IsListType():
vals[name] = cty.ListValEmpty(aty.ElementType())
case aty.IsSetType():
vals[name] = cty.SetValEmpty(aty.ElementType())
case aty.IsMapType():
vals[name] = cty.MapValEmpty(aty.ElementType())
case aty.Equals(cty.DynamicPseudoType):
// We use DynamicPseudoType in situations where there's a
// nested attribute of DynamicPseudoType, since the schema
// system cannot predict the final type until it knows exactly
// how many elements there will be. However, since we're
// trying to behave as if there are _no_ elements, we know
// we're producing either an empty tuple or empty object
// and just need to distinguish these two cases.
switch blockS.Nesting {
case configschema.NestingList:
vals[name] = cty.EmptyTupleVal
case configschema.NestingMap:
vals[name] = cty.EmptyObjectVal
}
}
}
// By the time we get down here we should always have set a value.
// If not, that suggests a missing case in the above switches.
if _, ok := vals[name]; !ok {
panic(fmt.Sprintf("failed to create empty value for nested block %q", name))
}
}
return cty.ObjectVal(vals)
} }

View File

@ -67,7 +67,7 @@ func assertObjectCompatible(schema *configschema.Block, planned, actual cty.Valu
// expression is itself unknown and thus it cannot predict how many // expression is itself unknown and thus it cannot predict how many
// child blocks will get created. // child blocks will get created.
switch blockS.Nesting { switch blockS.Nesting {
case configschema.NestingSingle: case configschema.NestingSingle, configschema.NestingGroup:
if allLeafValuesUnknown(plannedV) && !plannedV.IsNull() { if allLeafValuesUnknown(plannedV) && !plannedV.IsNull() {
return errs return errs
} }
@ -84,7 +84,7 @@ func assertObjectCompatible(schema *configschema.Block, planned, actual cty.Valu
path := append(path, cty.GetAttrStep{Name: name}) path := append(path, cty.GetAttrStep{Name: name})
switch blockS.Nesting { switch blockS.Nesting {
case configschema.NestingSingle: case configschema.NestingSingle, configschema.NestingGroup:
moreErrs := assertObjectCompatible(&blockS.Block, plannedV, actualV, path) moreErrs := assertObjectCompatible(&blockS.Block, plannedV, actualV, path)
errs = append(errs, moreErrs...) errs = append(errs, moreErrs...)
case configschema.NestingList: case configschema.NestingList:

View File

@ -45,9 +45,13 @@ func NormalizeObjectFromLegacySDK(val cty.Value, schema *configschema.Block) cty
} }
switch blockS.Nesting { switch blockS.Nesting {
case configschema.NestingSingle: case configschema.NestingSingle, configschema.NestingGroup:
if lv.IsKnown() { if lv.IsKnown() {
vals[name] = NormalizeObjectFromLegacySDK(lv, &blockS.Block) if lv.IsNull() && blockS.Nesting == configschema.NestingGroup {
vals[name] = blockS.EmptyValue()
} else {
vals[name] = NormalizeObjectFromLegacySDK(lv, &blockS.Block)
}
} else { } else {
vals[name] = unknownBlockStub(&blockS.Block) vals[name] = unknownBlockStub(&blockS.Block)
} }
@ -105,7 +109,7 @@ func unknownBlockStub(schema *configschema.Block) cty.Value {
} }
for name, blockS := range schema.BlockTypes { for name, blockS := range schema.BlockTypes {
switch blockS.Nesting { switch blockS.Nesting {
case configschema.NestingSingle: case configschema.NestingSingle, configschema.NestingGroup:
vals[name] = unknownBlockStub(&blockS.Block) vals[name] = unknownBlockStub(&blockS.Block)
case configschema.NestingList: case configschema.NestingList:
// In principle we may be expected to produce a tuple value here, // In principle we may be expected to produce a tuple value here,

View File

@ -121,7 +121,7 @@ func proposedNewObject(schema *configschema.Block, prior, config cty.Value) cty.
var newV cty.Value var newV cty.Value
switch blockType.Nesting { switch blockType.Nesting {
case configschema.NestingSingle: case configschema.NestingSingle, configschema.NestingGroup:
newV = ProposedNewObject(&blockType.Block, priorV, configV) newV = ProposedNewObject(&blockType.Block, priorV, configV)
case configschema.NestingList: case configschema.NestingList:
@ -335,7 +335,7 @@ func setElementCompareValue(schema *configschema.Block, v cty.Value, isConfig bo
for name, blockType := range schema.BlockTypes { for name, blockType := range schema.BlockTypes {
switch blockType.Nesting { switch blockType.Nesting {
case configschema.NestingSingle: case configschema.NestingSingle, configschema.NestingGroup:
attrs[name] = setElementCompareValue(&blockType.Block, v.GetAttr(name), isConfig) attrs[name] = setElementCompareValue(&blockType.Block, v.GetAttr(name), isConfig)
case configschema.NestingList, configschema.NestingSet: case configschema.NestingList, configschema.NestingSet:

View File

@ -83,7 +83,7 @@ func assertPlanValid(schema *configschema.Block, priorState, config, plannedStat
} }
switch blockS.Nesting { switch blockS.Nesting {
case configschema.NestingSingle: case configschema.NestingSingle, configschema.NestingGroup:
moreErrs := assertPlanValid(&blockS.Block, priorV, configV, plannedV, path) moreErrs := assertPlanValid(&blockS.Block, priorV, configV, plannedV, path)
errs = append(errs, moreErrs...) errs = append(errs, moreErrs...)
case configschema.NestingList: case configschema.NestingList:

View File

@ -45,10 +45,25 @@ func ConfigSchemaToProto(b *configschema.Block) *proto.Schema_Block {
} }
func protoSchemaNestedBlock(name string, b *configschema.NestedBlock) *proto.Schema_NestedBlock { func protoSchemaNestedBlock(name string, b *configschema.NestedBlock) *proto.Schema_NestedBlock {
var nesting proto.Schema_NestedBlock_NestingMode
switch b.Nesting {
case configschema.NestingSingle:
nesting = proto.Schema_NestedBlock_SINGLE
case configschema.NestingGroup:
nesting = proto.Schema_NestedBlock_GROUP
case configschema.NestingList:
nesting = proto.Schema_NestedBlock_LIST
case configschema.NestingSet:
nesting = proto.Schema_NestedBlock_SET
case configschema.NestingMap:
nesting = proto.Schema_NestedBlock_MAP
default:
nesting = proto.Schema_NestedBlock_INVALID
}
return &proto.Schema_NestedBlock{ return &proto.Schema_NestedBlock{
TypeName: name, TypeName: name,
Block: ConfigSchemaToProto(&b.Block), Block: ConfigSchemaToProto(&b.Block),
Nesting: proto.Schema_NestedBlock_NestingMode(b.Nesting), Nesting: nesting,
MinItems: int64(b.MinItems), MinItems: int64(b.MinItems),
MaxItems: int64(b.MaxItems), MaxItems: int64(b.MaxItems),
} }
@ -94,8 +109,25 @@ func ProtoToConfigSchema(b *proto.Schema_Block) *configschema.Block {
} }
func schemaNestedBlock(b *proto.Schema_NestedBlock) *configschema.NestedBlock { func schemaNestedBlock(b *proto.Schema_NestedBlock) *configschema.NestedBlock {
var nesting configschema.NestingMode
switch b.Nesting {
case proto.Schema_NestedBlock_SINGLE:
nesting = configschema.NestingSingle
case proto.Schema_NestedBlock_GROUP:
nesting = configschema.NestingGroup
case proto.Schema_NestedBlock_LIST:
nesting = configschema.NestingList
case proto.Schema_NestedBlock_MAP:
nesting = configschema.NestingMap
case proto.Schema_NestedBlock_SET:
nesting = configschema.NestingSet
default:
// In all other cases we'll leave it as the zero value (invalid) and
// let the caller validate it and deal with this.
}
nb := &configschema.NestedBlock{ nb := &configschema.NestedBlock{
Nesting: configschema.NestingMode(b.Nesting), Nesting: nesting,
MinItems: int(b.MinItems), MinItems: int(b.MinItems),
MaxItems: int(b.MaxItems), MaxItems: int(b.MaxItems),
} }

View File

@ -1759,6 +1759,80 @@ func TestContext2Plan_computed(t *testing.T) {
} }
} }
func TestContext2Plan_blockNestingGroup(t *testing.T) {
m := testModule(t, "plan-block-nesting-group")
p := testProvider("test")
p.GetSchemaReturn = &ProviderSchema{
ResourceTypes: map[string]*configschema.Block{
"test": {
BlockTypes: map[string]*configschema.NestedBlock{
"blah": {
Nesting: configschema.NestingGroup,
Block: configschema.Block{
Attributes: map[string]*configschema.Attribute{
"baz": {Type: cty.String, Required: true},
},
},
},
},
},
},
}
p.PlanResourceChangeFn = func(req providers.PlanResourceChangeRequest) providers.PlanResourceChangeResponse {
return providers.PlanResourceChangeResponse{
PlannedState: req.ProposedNewState,
}
}
ctx := testContext2(t, &ContextOpts{
Config: m,
ProviderResolver: providers.ResolverFixed(
map[string]providers.Factory{
"test": testProviderFuncFixed(p),
},
),
})
plan, diags := ctx.Plan()
if diags.HasErrors() {
t.Fatalf("unexpected errors: %s", diags.Err())
}
if got, want := 1, len(plan.Changes.Resources); got != want {
t.Fatalf("wrong number of planned resource changes %d; want %d\n%s", got, want, spew.Sdump(plan.Changes.Resources))
}
if !p.PlanResourceChangeCalled {
t.Fatalf("PlanResourceChange was not called at all")
}
got := p.PlanResourceChangeRequest
want := providers.PlanResourceChangeRequest{
TypeName: "test",
// Because block type "blah" is defined as NestingGroup, we get a non-null
// value for it with null nested attributes, rather than the "blah" object
// itself being null, when there's no "blah" block in the config at all.
//
// This represents the situation where the remote service _always_ creates
// a single "blah", regardless of whether the block is present, but when
// the block _is_ present the user can override some aspects of it. The
// absense of the block means "use the defaults", in that case.
Config: cty.ObjectVal(map[string]cty.Value{
"blah": cty.ObjectVal(map[string]cty.Value{
"baz": cty.NullVal(cty.String),
}),
}),
ProposedNewState: cty.ObjectVal(map[string]cty.Value{
"blah": cty.ObjectVal(map[string]cty.Value{
"baz": cty.NullVal(cty.String),
}),
}),
}
if !cmp.Equal(got, want, valueTrans) {
t.Errorf("wrong PlanResourceChange request\n%s", cmp.Diff(got, want, valueTrans))
}
}
func TestContext2Plan_computedDataResource(t *testing.T) { func TestContext2Plan_computedDataResource(t *testing.T) {
m := testModule(t, "plan-computed-data-resource") m := testModule(t, "plan-computed-data-resource")
p := testProvider("aws") p := testProvider("aws")

View File

@ -281,7 +281,7 @@ func newResourceConfigShimmedComputedKeys(obj cty.Value, schema *configschema.Bl
} }
switch blockS.Nesting { switch blockS.Nesting {
case configschema.NestingSingle: case configschema.NestingSingle, configschema.NestingGroup:
keys := newResourceConfigShimmedComputedKeys(blockVal, &blockS.Block, fmt.Sprintf("%s%s.", prefix, typeName)) keys := newResourceConfigShimmedComputedKeys(blockVal, &blockS.Block, fmt.Sprintf("%s%s.", prefix, typeName))
ret = append(ret, keys...) ret = append(ret, keys...)
case configschema.NestingList, configschema.NestingSet: case configschema.NestingList, configschema.NestingSet:

View File

@ -0,0 +1,2 @@
resource "test" "foo" {
}