// Copyright (c) The OpenTofu Authors
// SPDX-License-Identifier: MPL-2.0
// Copyright (c) 2023 HashiCorp, Inc.
// SPDX-License-Identifier: MPL-2.0

// Code generated by protoc-gen-go. DO NOT EDIT.
// versions:
// 	protoc-gen-go v1.36.11
// 	protoc        v6.32.1
// source: execgraph.proto

package execgraphproto

import (
	protoreflect "google.golang.org/protobuf/reflect/protoreflect"
	protoimpl "google.golang.org/protobuf/runtime/protoimpl"
	reflect "reflect"
	unsafe "unsafe"
)

const (
	// Verify that this generated code is sufficiently up-to-date.
	_ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
	// Verify that runtime/protoimpl is sufficiently up-to-date.
	_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
)

// ExecutionGraph is the root message type for an execution graph file.
//
// Note that we expect execution graphs to be saved as part of a larger plan
// file structure that should represent general metadata such as which OpenTofu
// version a particular execution graph was created by. This message type and
// its nested message types are focused only on representing the details of
// the execution graph itself.
type ExecutionGraph struct {
	state                              protoimpl.MessageState `protogen:"opaque.v1"`
	xxx_hidden_Elements                *[]*Element            `protobuf:"bytes,1,rep,name=elements"`
	xxx_hidden_ResourceInstanceResults map[string]uint64      `protobuf:"bytes,2,rep,name=resource_instance_results,json=resourceInstanceResults" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"varint,2,opt,name=value"`
	unknownFields                      protoimpl.UnknownFields
	sizeCache                          protoimpl.SizeCache
}

func (x *ExecutionGraph) Reset() {
	*x = ExecutionGraph{}
	mi := &file_execgraph_proto_msgTypes[0]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *ExecutionGraph) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*ExecutionGraph) ProtoMessage() {}

func (x *ExecutionGraph) ProtoReflect() protoreflect.Message {
	mi := &file_execgraph_proto_msgTypes[0]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

func (x *ExecutionGraph) GetElements() []*Element {
	if x != nil {
		if x.xxx_hidden_Elements != nil {
			return *x.xxx_hidden_Elements
		}
	}
	return nil
}

func (x *ExecutionGraph) GetResourceInstanceResults() map[string]uint64 {
	if x != nil {
		return x.xxx_hidden_ResourceInstanceResults
	}
	return nil
}

func (x *ExecutionGraph) SetElements(v []*Element) {
	x.xxx_hidden_Elements = &v
}

func (x *ExecutionGraph) SetResourceInstanceResults(v map[string]uint64) {
	x.xxx_hidden_ResourceInstanceResults = v
}

type ExecutionGraph_builder struct {
	_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.

	// The various "elements" of the graph.
	//
	// This current serialization should be thought of as a sequence of
	// mutations that each add something new to the graph, where the available
	// actions correspond to the methods of execgraph.Builder. Each message
	// in the sequence therefore corresponds to a method called on an internal
	// builder used to reconstruct the graph during unmarshaling.
	//
	// We use execgraph.Builder when reloading because that helps us to
	// validate the graph data using the result type information produced by
	// the builder method results, although a round-trip through this
	// serialization only guarantees a functionally-equivalent graph, not an
	// exactly-identical graph. (i.e. the internal slices used to represent
	// the graph elements might be in a different order after round-tripping,
	// and the text-based debug representation of the graph will reflect
	// those changes even though the graph _topology_ should be identical.)
	Elements []*Element
	// Map from resource instance addresses to indices into the "elements"
	// field, specifying which element produces the "final state" result
	// for each resource instance.
	ResourceInstanceResults map[string]uint64
}

func (b0 ExecutionGraph_builder) Build() *ExecutionGraph {
	m0 := &ExecutionGraph{}
	b, x := &b0, m0
	_, _ = b, x
	x.xxx_hidden_Elements = &b.Elements
	x.xxx_hidden_ResourceInstanceResults = b.ResourceInstanceResults
	return m0
}

// One "element" of an execution graph. Refer to ExecutionGraph.elements for
// more information.
type Element struct {
	state              protoimpl.MessageState `protogen:"opaque.v1"`
	xxx_hidden_Request isElement_Request      `protobuf_oneof:"request"`
	unknownFields      protoimpl.UnknownFields
	sizeCache          protoimpl.SizeCache
}

func (x *Element) Reset() {
	*x = Element{}
	mi := &file_execgraph_proto_msgTypes[1]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *Element) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*Element) ProtoMessage() {}

func (x *Element) ProtoReflect() protoreflect.Message {
	mi := &file_execgraph_proto_msgTypes[1]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

func (x *Element) GetConstantValue() []byte {
	if x != nil {
		if x, ok := x.xxx_hidden_Request.(*element_ConstantValue); ok {
			return x.ConstantValue
		}
	}
	return nil
}

func (x *Element) GetConstantResourceInstAddr() string {
	if x != nil {
		if x, ok := x.xxx_hidden_Request.(*element_ConstantResourceInstAddr); ok {
			return x.ConstantResourceInstAddr
		}
	}
	return ""
}

func (x *Element) GetDeposedKey() string {
	if x != nil {
		if x, ok := x.xxx_hidden_Request.(*element_DeposedKey); ok {
			return x.DeposedKey
		}
	}
	return ""
}

func (x *Element) GetConstantProviderInstAddr() string {
	if x != nil {
		if x, ok := x.xxx_hidden_Request.(*element_ConstantProviderInstAddr); ok {
			return x.ConstantProviderInstAddr
		}
	}
	return ""
}

func (x *Element) GetOperation() *Operation {
	if x != nil {
		if x, ok := x.xxx_hidden_Request.(*element_Operation); ok {
			return x.Operation
		}
	}
	return nil
}

func (x *Element) GetWaiter() *Waiter {
	if x != nil {
		if x, ok := x.xxx_hidden_Request.(*element_Waiter); ok {
			return x.Waiter
		}
	}
	return nil
}

func (x *Element) SetConstantValue(v []byte) {
	if v == nil {
		v = []byte{}
	}
	x.xxx_hidden_Request = &element_ConstantValue{v}
}

func (x *Element) SetConstantResourceInstAddr(v string) {
	x.xxx_hidden_Request = &element_ConstantResourceInstAddr{v}
}

func (x *Element) SetDeposedKey(v string) {
	x.xxx_hidden_Request = &element_DeposedKey{v}
}

func (x *Element) SetConstantProviderInstAddr(v string) {
	x.xxx_hidden_Request = &element_ConstantProviderInstAddr{v}
}

func (x *Element) SetOperation(v *Operation) {
	if v == nil {
		x.xxx_hidden_Request = nil
		return
	}
	x.xxx_hidden_Request = &element_Operation{v}
}

func (x *Element) SetWaiter(v *Waiter) {
	if v == nil {
		x.xxx_hidden_Request = nil
		return
	}
	x.xxx_hidden_Request = &element_Waiter{v}
}

func (x *Element) HasRequest() bool {
	if x == nil {
		return false
	}
	return x.xxx_hidden_Request != nil
}

func (x *Element) HasConstantValue() bool {
	if x == nil {
		return false
	}
	_, ok := x.xxx_hidden_Request.(*element_ConstantValue)
	return ok
}

func (x *Element) HasConstantResourceInstAddr() bool {
	if x == nil {
		return false
	}
	_, ok := x.xxx_hidden_Request.(*element_ConstantResourceInstAddr)
	return ok
}

func (x *Element) HasDeposedKey() bool {
	if x == nil {
		return false
	}
	_, ok := x.xxx_hidden_Request.(*element_DeposedKey)
	return ok
}

func (x *Element) HasConstantProviderInstAddr() bool {
	if x == nil {
		return false
	}
	_, ok := x.xxx_hidden_Request.(*element_ConstantProviderInstAddr)
	return ok
}

func (x *Element) HasOperation() bool {
	if x == nil {
		return false
	}
	_, ok := x.xxx_hidden_Request.(*element_Operation)
	return ok
}

func (x *Element) HasWaiter() bool {
	if x == nil {
		return false
	}
	_, ok := x.xxx_hidden_Request.(*element_Waiter)
	return ok
}

func (x *Element) ClearRequest() {
	x.xxx_hidden_Request = nil
}

func (x *Element) ClearConstantValue() {
	if _, ok := x.xxx_hidden_Request.(*element_ConstantValue); ok {
		x.xxx_hidden_Request = nil
	}
}

func (x *Element) ClearConstantResourceInstAddr() {
	if _, ok := x.xxx_hidden_Request.(*element_ConstantResourceInstAddr); ok {
		x.xxx_hidden_Request = nil
	}
}

func (x *Element) ClearDeposedKey() {
	if _, ok := x.xxx_hidden_Request.(*element_DeposedKey); ok {
		x.xxx_hidden_Request = nil
	}
}

func (x *Element) ClearConstantProviderInstAddr() {
	if _, ok := x.xxx_hidden_Request.(*element_ConstantProviderInstAddr); ok {
		x.xxx_hidden_Request = nil
	}
}

func (x *Element) ClearOperation() {
	if _, ok := x.xxx_hidden_Request.(*element_Operation); ok {
		x.xxx_hidden_Request = nil
	}
}

func (x *Element) ClearWaiter() {
	if _, ok := x.xxx_hidden_Request.(*element_Waiter); ok {
		x.xxx_hidden_Request = nil
	}
}

const Element_Request_not_set_case case_Element_Request = 0
const Element_ConstantValue_case case_Element_Request = 1
const Element_ConstantResourceInstAddr_case case_Element_Request = 2
const Element_DeposedKey_case case_Element_Request = 6
const Element_ConstantProviderInstAddr_case case_Element_Request = 3
const Element_Operation_case case_Element_Request = 4
const Element_Waiter_case case_Element_Request = 5

func (x *Element) WhichRequest() case_Element_Request {
	if x == nil {
		return Element_Request_not_set_case
	}
	switch x.xxx_hidden_Request.(type) {
	case *element_ConstantValue:
		return Element_ConstantValue_case
	case *element_ConstantResourceInstAddr:
		return Element_ConstantResourceInstAddr_case
	case *element_DeposedKey:
		return Element_DeposedKey_case
	case *element_ConstantProviderInstAddr:
		return Element_ConstantProviderInstAddr_case
	case *element_Operation:
		return Element_Operation_case
	case *element_Waiter:
		return Element_Waiter_case
	default:
		return Element_Request_not_set_case
	}
}

type Element_builder struct {
	_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.

	// Each element has only one request field populated, which therefore
	// implies the type of element to produce. These fields should all have
	// identifiers less than 128 so that the discriminant encodes as just one
	// byte in the protobuf wire format.
	//
	// The field types should all be as simple as possible to further shrink the
	// size of their protobuf encoding. Don't worry about forward-compatibility,
	// because a specific version of OpenTofu is only required to unmarshal
	// execution graphs produced by itself: we can always make the
	// representation of a specific request type more complicated in a later
	// release if we need to.
	//
	// Where one request refers to the result of another request, the referrer
	// must be serialized after what it refers to and refers back to the earlier
	// result using a zero-based uint64 index into the ExecutionGraph.elements
	// list. The fields representing such references conventionally have names
	// ending in "_result". During unmarshaling the loader will verify that
	// these references each refer to a result of the appropriate type, which
	// should always be true for a serialization of any graph produced by
	// execgraph.Builder that was not subsequently tampered with.

	// Fields of oneof xxx_hidden_Request:
	// A constant value, corresponding to execgraph.Builder.ConstantValue.
	//
	// The value is a MessagePack serialization of a cty.Value using
	// cty.DynamicPseudoType as the serialization type constraint, and so
	// this represents both the value and the value's dynamic type.
	ConstantValue []byte
	// A constant address for a resource instance, corresponding to
	// execgraph.Builder.ConstantResourceInstAddr.
	//
	// The value is a fully-qualified resource instance address in the
	// usual syntax.
	ConstantResourceInstAddr *string
	// A constant "deposed key" for a resource instance object,
	// corresponding to execgraph.Builder.ConstantDeposedKey.
	//
	// The value is a string that can be converted to states.DeposedKey.
	DeposedKey *string
	// A constant address for a provider instance, corresponding to
	// execgraph.Builder.ConstantProviderInstAddr.
	//
	// The value is a fully-qualified provider instance address in the
	// usual syntax.
	ConstantProviderInstAddr *string
	// An operation to be performed during execution, corresponding to
	// various different methods of execgraph.Builder depending on the
	// opcode.
	//
	// The unmarshal code is responsible for figuring out which Builder
	// method to call based on the opcode, handled as part of its validation
	// logic.
	Operation *Operation
	// A collection of results whose completion an operation can depend
	// on without actually making any use of the values they produce.
	//
	// We use this to represent explicit dependencies between resource
	// instances and providers so that the execution order will respect
	// the dependencies regardless of whether the dependencies were
	// inferred automatically from expressions or declared explicitly
	// using a "depends_on" argument.
	Waiter *Waiter
	// -- end of xxx_hidden_Request
}

func (b0 Element_builder) Build() *Element {
	m0 := &Element{}
	b, x := &b0, m0
	_, _ = b, x
	if b.ConstantValue != nil {
		x.xxx_hidden_Request = &element_ConstantValue{b.ConstantValue}
	}
	if b.ConstantResourceInstAddr != nil {
		x.xxx_hidden_Request = &element_ConstantResourceInstAddr{*b.ConstantResourceInstAddr}
	}
	if b.DeposedKey != nil {
		x.xxx_hidden_Request = &element_DeposedKey{*b.DeposedKey}
	}
	if b.ConstantProviderInstAddr != nil {
		x.xxx_hidden_Request = &element_ConstantProviderInstAddr{*b.ConstantProviderInstAddr}
	}
	if b.Operation != nil {
		x.xxx_hidden_Request = &element_Operation{b.Operation}
	}
	if b.Waiter != nil {
		x.xxx_hidden_Request = &element_Waiter{b.Waiter}
	}
	return m0
}

type case_Element_Request protoreflect.FieldNumber

func (x case_Element_Request) String() string {
	md := file_execgraph_proto_msgTypes[1].Descriptor()
	if x == 0 {
		return "not set"
	}
	return protoimpl.X.MessageFieldStringOf(md, protoreflect.FieldNumber(x))
}

type isElement_Request interface {
	isElement_Request()
}

type element_ConstantValue struct {
	// A constant value, corresponding to execgraph.Builder.ConstantValue.
	//
	// The value is a MessagePack serialization of a cty.Value using
	// cty.DynamicPseudoType as the serialization type constraint, and so
	// this represents both the value and the value's dynamic type.
	ConstantValue []byte `protobuf:"bytes,1,opt,name=constant_value,json=constantValue,oneof"`
}

type element_ConstantResourceInstAddr struct {
	// A constant address for a resource instance, corresponding to
	// execgraph.Builder.ConstantResourceInstAddr.
	//
	// The value is a fully-qualified resource instance address in the
	// usual syntax.
	ConstantResourceInstAddr string `protobuf:"bytes,2,opt,name=constant_resource_inst_addr,json=constantResourceInstAddr,oneof"`
}

type element_DeposedKey struct {
	// A constant "deposed key" for a resource instance object,
	// corresponding to execgraph.Builder.ConstantDeposedKey.
	//
	// The value is a string that can be converted to states.DeposedKey.
	DeposedKey string `protobuf:"bytes,6,opt,name=deposed_key,json=deposedKey,oneof"`
}

type element_ConstantProviderInstAddr struct {
	// A constant address for a provider instance, corresponding to
	// execgraph.Builder.ConstantProviderInstAddr.
	//
	// The value is a fully-qualified provider instance address in the
	// usual syntax.
	ConstantProviderInstAddr string `protobuf:"bytes,3,opt,name=constant_provider_inst_addr,json=constantProviderInstAddr,oneof"`
}

type element_Operation struct {
	// An operation to be performed during execution, corresponding to
	// various different methods of execgraph.Builder depending on the
	// opcode.
	//
	// The unmarshal code is responsible for figuring out which Builder
	// method to call based on the opcode, handled as part of its validation
	// logic.
	Operation *Operation `protobuf:"bytes,4,opt,name=operation,oneof"`
}

type element_Waiter struct {
	// A collection of results whose completion an operation can depend
	// on without actually making any use of the values they produce.
	//
	// We use this to represent explicit dependencies between resource
	// instances and providers so that the execution order will respect
	// the dependencies regardless of whether the dependencies were
	// inferred automatically from expressions or declared explicitly
	// using a "depends_on" argument.
	Waiter *Waiter `protobuf:"bytes,5,opt,name=waiter,oneof"`
}

func (*element_ConstantValue) isElement_Request() {}

func (*element_ConstantResourceInstAddr) isElement_Request() {}

func (*element_DeposedKey) isElement_Request() {}

func (*element_ConstantProviderInstAddr) isElement_Request() {}

func (*element_Operation) isElement_Request() {}

func (*element_Waiter) isElement_Request() {}

type DeposedResourceInstanceObject struct {
	state                   protoimpl.MessageState `protogen:"opaque.v1"`
	xxx_hidden_InstanceAddr *string                `protobuf:"bytes,1,opt,name=instance_addr,json=instanceAddr"`
	xxx_hidden_DeposedKey   *string                `protobuf:"bytes,2,opt,name=deposed_key,json=deposedKey"`
	XXX_raceDetectHookData  protoimpl.RaceDetectHookData
	XXX_presence            [1]uint32
	unknownFields           protoimpl.UnknownFields
	sizeCache               protoimpl.SizeCache
}

func (x *DeposedResourceInstanceObject) Reset() {
	*x = DeposedResourceInstanceObject{}
	mi := &file_execgraph_proto_msgTypes[2]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *DeposedResourceInstanceObject) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*DeposedResourceInstanceObject) ProtoMessage() {}

func (x *DeposedResourceInstanceObject) ProtoReflect() protoreflect.Message {
	mi := &file_execgraph_proto_msgTypes[2]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

func (x *DeposedResourceInstanceObject) GetInstanceAddr() string {
	if x != nil {
		if x.xxx_hidden_InstanceAddr != nil {
			return *x.xxx_hidden_InstanceAddr
		}
		return ""
	}
	return ""
}

func (x *DeposedResourceInstanceObject) GetDeposedKey() string {
	if x != nil {
		if x.xxx_hidden_DeposedKey != nil {
			return *x.xxx_hidden_DeposedKey
		}
		return ""
	}
	return ""
}

func (x *DeposedResourceInstanceObject) SetInstanceAddr(v string) {
	x.xxx_hidden_InstanceAddr = &v
	protoimpl.X.SetPresent(&(x.XXX_presence[0]), 0, 2)
}

func (x *DeposedResourceInstanceObject) SetDeposedKey(v string) {
	x.xxx_hidden_DeposedKey = &v
	protoimpl.X.SetPresent(&(x.XXX_presence[0]), 1, 2)
}

func (x *DeposedResourceInstanceObject) HasInstanceAddr() bool {
	if x == nil {
		return false
	}
	return protoimpl.X.Present(&(x.XXX_presence[0]), 0)
}

func (x *DeposedResourceInstanceObject) HasDeposedKey() bool {
	if x == nil {
		return false
	}
	return protoimpl.X.Present(&(x.XXX_presence[0]), 1)
}

func (x *DeposedResourceInstanceObject) ClearInstanceAddr() {
	protoimpl.X.ClearPresent(&(x.XXX_presence[0]), 0)
	x.xxx_hidden_InstanceAddr = nil
}

func (x *DeposedResourceInstanceObject) ClearDeposedKey() {
	protoimpl.X.ClearPresent(&(x.XXX_presence[0]), 1)
	x.xxx_hidden_DeposedKey = nil
}

type DeposedResourceInstanceObject_builder struct {
	_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.

	// A fully-qualified resource instance address in the
	// syntax that addrs.AbsResourceInstance.String produces.
	InstanceAddr *string
	// The key of the requested deposed object associated with the
	// resource instance.
	DeposedKey *string
}

func (b0 DeposedResourceInstanceObject_builder) Build() *DeposedResourceInstanceObject {
	m0 := &DeposedResourceInstanceObject{}
	b, x := &b0, m0
	_, _ = b, x
	if b.InstanceAddr != nil {
		protoimpl.X.SetPresentNonAtomic(&(x.XXX_presence[0]), 0, 2)
		x.xxx_hidden_InstanceAddr = b.InstanceAddr
	}
	if b.DeposedKey != nil {
		protoimpl.X.SetPresentNonAtomic(&(x.XXX_presence[0]), 1, 2)
		x.xxx_hidden_DeposedKey = b.DeposedKey
	}
	return m0
}

type Operation struct {
	state                  protoimpl.MessageState `protogen:"opaque.v1"`
	xxx_hidden_Opcode      uint64                 `protobuf:"varint,1,opt,name=opcode"`
	xxx_hidden_Operands    []uint64               `protobuf:"varint,2,rep,packed,name=operands"`
	XXX_raceDetectHookData protoimpl.RaceDetectHookData
	XXX_presence           [1]uint32
	unknownFields          protoimpl.UnknownFields
	sizeCache              protoimpl.SizeCache
}

func (x *Operation) Reset() {
	*x = Operation{}
	mi := &file_execgraph_proto_msgTypes[3]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *Operation) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*Operation) ProtoMessage() {}

func (x *Operation) ProtoReflect() protoreflect.Message {
	mi := &file_execgraph_proto_msgTypes[3]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

func (x *Operation) GetOpcode() uint64 {
	if x != nil {
		return x.xxx_hidden_Opcode
	}
	return 0
}

func (x *Operation) GetOperands() []uint64 {
	if x != nil {
		return x.xxx_hidden_Operands
	}
	return nil
}

func (x *Operation) SetOpcode(v uint64) {
	x.xxx_hidden_Opcode = v
	protoimpl.X.SetPresent(&(x.XXX_presence[0]), 0, 2)
}

func (x *Operation) SetOperands(v []uint64) {
	x.xxx_hidden_Operands = v
}

func (x *Operation) HasOpcode() bool {
	if x == nil {
		return false
	}
	return protoimpl.X.Present(&(x.XXX_presence[0]), 0)
}

func (x *Operation) ClearOpcode() {
	protoimpl.X.ClearPresent(&(x.XXX_presence[0]), 0)
	x.xxx_hidden_Opcode = 0
}

type Operation_builder struct {
	_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.

	// The raw opcode of the operation to be performed.
	Opcode *uint64
	// The result ids for all of the operands. The number of results and their
	// meanings depend on the opcode, and are validated during unmarshaling.
	Operands []uint64
}

func (b0 Operation_builder) Build() *Operation {
	m0 := &Operation{}
	b, x := &b0, m0
	_, _ = b, x
	if b.Opcode != nil {
		protoimpl.X.SetPresentNonAtomic(&(x.XXX_presence[0]), 0, 2)
		x.xxx_hidden_Opcode = *b.Opcode
	}
	x.xxx_hidden_Operands = b.Operands
	return m0
}

type Waiter struct {
	state              protoimpl.MessageState `protogen:"opaque.v1"`
	xxx_hidden_Results []uint64               `protobuf:"varint,1,rep,packed,name=results"`
	unknownFields      protoimpl.UnknownFields
	sizeCache          protoimpl.SizeCache
}

func (x *Waiter) Reset() {
	*x = Waiter{}
	mi := &file_execgraph_proto_msgTypes[4]
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
	ms.StoreMessageInfo(mi)
}

func (x *Waiter) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*Waiter) ProtoMessage() {}

func (x *Waiter) ProtoReflect() protoreflect.Message {
	mi := &file_execgraph_proto_msgTypes[4]
	if x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

func (x *Waiter) GetResults() []uint64 {
	if x != nil {
		return x.xxx_hidden_Results
	}
	return nil
}

func (x *Waiter) SetResults(v []uint64) {
	x.xxx_hidden_Results = v
}

type Waiter_builder struct {
	_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.

	// Result ids of all of the results that must be awaited.
	Results []uint64
}

func (b0 Waiter_builder) Build() *Waiter {
	m0 := &Waiter{}
	b, x := &b0, m0
	_, _ = b, x
	x.xxx_hidden_Results = b.Results
	return m0
}

var File_execgraph_proto protoreflect.FileDescriptor

const file_execgraph_proto_rawDesc = "" +
	"\n" +
	"\x0fexecgraph.proto\x12\x12opentofu_execgraph\"\x92\x02\n" +
	"\x0eExecutionGraph\x127\n" +
	"\belements\x18\x01 \x03(\v2\x1b.opentofu_execgraph.ElementR\belements\x12{\n" +
	"\x19resource_instance_results\x18\x02 \x03(\v2?.opentofu_execgraph.ExecutionGraph.ResourceInstanceResultsEntryR\x17resourceInstanceResults\x1aJ\n" +
	"\x1cResourceInstanceResultsEntry\x12\x10\n" +
	"\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n" +
	"\x05value\x18\x02 \x01(\x04R\x05value:\x028\x01\"\xd7\x02\n" +
	"\aElement\x12'\n" +
	"\x0econstant_value\x18\x01 \x01(\fH\x00R\rconstantValue\x12?\n" +
	"\x1bconstant_resource_inst_addr\x18\x02 \x01(\tH\x00R\x18constantResourceInstAddr\x12!\n" +
	"\vdeposed_key\x18\x06 \x01(\tH\x00R\n" +
	"deposedKey\x12?\n" +
	"\x1bconstant_provider_inst_addr\x18\x03 \x01(\tH\x00R\x18constantProviderInstAddr\x12=\n" +
	"\toperation\x18\x04 \x01(\v2\x1d.opentofu_execgraph.OperationH\x00R\toperation\x124\n" +
	"\x06waiter\x18\x05 \x01(\v2\x1a.opentofu_execgraph.WaiterH\x00R\x06waiterB\t\n" +
	"\arequest\"e\n" +
	"\x1dDeposedResourceInstanceObject\x12#\n" +
	"\rinstance_addr\x18\x01 \x01(\tR\finstanceAddr\x12\x1f\n" +
	"\vdeposed_key\x18\x02 \x01(\tR\n" +
	"deposedKey\"?\n" +
	"\tOperation\x12\x16\n" +
	"\x06opcode\x18\x01 \x01(\x04R\x06opcode\x12\x1a\n" +
	"\boperands\x18\x02 \x03(\x04R\boperands\"\"\n" +
	"\x06Waiter\x12\x18\n" +
	"\aresults\x18\x01 \x03(\x04R\aresultsBPZNgithub.com/opentofu/opentofu/internal/engine/internal/execgraph/execgraphprotob\beditionsp\xe9\a"

var file_execgraph_proto_msgTypes = make([]protoimpl.MessageInfo, 6)
var file_execgraph_proto_goTypes = []any{
	(*ExecutionGraph)(nil),                // 0: opentofu_execgraph.ExecutionGraph
	(*Element)(nil),                       // 1: opentofu_execgraph.Element
	(*DeposedResourceInstanceObject)(nil), // 2: opentofu_execgraph.DeposedResourceInstanceObject
	(*Operation)(nil),                     // 3: opentofu_execgraph.Operation
	(*Waiter)(nil),                        // 4: opentofu_execgraph.Waiter
	nil,                                   // 5: opentofu_execgraph.ExecutionGraph.ResourceInstanceResultsEntry
}
var file_execgraph_proto_depIdxs = []int32{
	1, // 0: opentofu_execgraph.ExecutionGraph.elements:type_name -> opentofu_execgraph.Element
	5, // 1: opentofu_execgraph.ExecutionGraph.resource_instance_results:type_name -> opentofu_execgraph.ExecutionGraph.ResourceInstanceResultsEntry
	3, // 2: opentofu_execgraph.Element.operation:type_name -> opentofu_execgraph.Operation
	4, // 3: opentofu_execgraph.Element.waiter:type_name -> opentofu_execgraph.Waiter
	4, // [4:4] is the sub-list for method output_type
	4, // [4:4] is the sub-list for method input_type
	4, // [4:4] is the sub-list for extension type_name
	4, // [4:4] is the sub-list for extension extendee
	0, // [0:4] is the sub-list for field type_name
}

func init() { file_execgraph_proto_init() }
func file_execgraph_proto_init() {
	if File_execgraph_proto != nil {
		return
	}
	file_execgraph_proto_msgTypes[1].OneofWrappers = []any{
		(*element_ConstantValue)(nil),
		(*element_ConstantResourceInstAddr)(nil),
		(*element_DeposedKey)(nil),
		(*element_ConstantProviderInstAddr)(nil),
		(*element_Operation)(nil),
		(*element_Waiter)(nil),
	}
	type x struct{}
	out := protoimpl.TypeBuilder{
		File: protoimpl.DescBuilder{
			GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
			RawDescriptor: unsafe.Slice(unsafe.StringData(file_execgraph_proto_rawDesc), len(file_execgraph_proto_rawDesc)),
			NumEnums:      0,
			NumMessages:   6,
			NumExtensions: 0,
			NumServices:   0,
		},
		GoTypes:           file_execgraph_proto_goTypes,
		DependencyIndexes: file_execgraph_proto_depIdxs,
		MessageInfos:      file_execgraph_proto_msgTypes,
	}.Build()
	File_execgraph_proto = out.File
	file_execgraph_proto_goTypes = nil
	file_execgraph_proto_depIdxs = nil
}
