You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@beam.apache.org by tg...@apache.org on 2017/11/06 20:19:56 UTC

[4/9] beam git commit: Add all portability protos to Go

http://git-wip-us.apache.org/repos/asf/beam/blob/42100456/sdks/go/pkg/beam/model/pipeline_v1/beam_runner_api.pb.go
----------------------------------------------------------------------
diff --git a/sdks/go/pkg/beam/model/pipeline_v1/beam_runner_api.pb.go b/sdks/go/pkg/beam/model/pipeline_v1/beam_runner_api.pb.go
new file mode 100644
index 0000000..31dc53e
--- /dev/null
+++ b/sdks/go/pkg/beam/model/pipeline_v1/beam_runner_api.pb.go
@@ -0,0 +1,3491 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: beam_runner_api.proto
+
+/*
+Package pipeline_v1 is a generated protocol buffer package.
+
+It is generated from these files:
+	beam_runner_api.proto
+	endpoints.proto
+	standard_window_fns.proto
+
+It has these top-level messages:
+	Components
+	MessageWithComponents
+	Pipeline
+	PTransform
+	PCollection
+	ParDoPayload
+	Parameter
+	StateSpec
+	ValueStateSpec
+	BagStateSpec
+	CombiningStateSpec
+	MapStateSpec
+	SetStateSpec
+	TimerSpec
+	IsBounded
+	ReadPayload
+	WindowIntoPayload
+	CombinePayload
+	TestStreamPayload
+	WriteFilesPayload
+	Coder
+	WindowingStrategy
+	MergeStatus
+	AccumulationMode
+	ClosingBehavior
+	OnTimeBehavior
+	OutputTime
+	TimeDomain
+	Trigger
+	TimestampTransform
+	SideInput
+	Environment
+	SdkFunctionSpec
+	FunctionSpec
+	DisplayData
+	ApiServiceDescriptor
+	OAuth2ClientCredentialsGrant
+	FixedWindowsPayload
+	SlidingWindowsPayload
+	SessionsPayload
+*/
+package pipeline_v1
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+import google_protobuf "github.com/golang/protobuf/ptypes/any"
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package
+
+type Parameter_Type_Enum int32
+
+const (
+	Parameter_Type_UNSPECIFIED         Parameter_Type_Enum = 0
+	Parameter_Type_WINDOW              Parameter_Type_Enum = 1
+	Parameter_Type_PIPELINE_OPTIONS    Parameter_Type_Enum = 2
+	Parameter_Type_RESTRICTION_TRACKER Parameter_Type_Enum = 3
+)
+
+var Parameter_Type_Enum_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "WINDOW",
+	2: "PIPELINE_OPTIONS",
+	3: "RESTRICTION_TRACKER",
+}
+var Parameter_Type_Enum_value = map[string]int32{
+	"UNSPECIFIED":         0,
+	"WINDOW":              1,
+	"PIPELINE_OPTIONS":    2,
+	"RESTRICTION_TRACKER": 3,
+}
+
+func (x Parameter_Type_Enum) String() string {
+	return proto.EnumName(Parameter_Type_Enum_name, int32(x))
+}
+func (Parameter_Type_Enum) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{6, 0, 0} }
+
+type IsBounded_Enum int32
+
+const (
+	IsBounded_UNSPECIFIED IsBounded_Enum = 0
+	IsBounded_UNBOUNDED   IsBounded_Enum = 1
+	IsBounded_BOUNDED     IsBounded_Enum = 2
+)
+
+var IsBounded_Enum_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "UNBOUNDED",
+	2: "BOUNDED",
+}
+var IsBounded_Enum_value = map[string]int32{
+	"UNSPECIFIED": 0,
+	"UNBOUNDED":   1,
+	"BOUNDED":     2,
+}
+
+func (x IsBounded_Enum) String() string {
+	return proto.EnumName(IsBounded_Enum_name, int32(x))
+}
+func (IsBounded_Enum) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{14, 0} }
+
+type MergeStatus_Enum int32
+
+const (
+	MergeStatus_UNSPECIFIED MergeStatus_Enum = 0
+	// The WindowFn does not require merging.
+	// Examples: global window, FixedWindows, SlidingWindows
+	MergeStatus_NON_MERGING MergeStatus_Enum = 1
+	// The WindowFn is merging and the PCollection has not had merging
+	// performed.
+	// Example: Sessions prior to a GroupByKey
+	MergeStatus_NEEDS_MERGE MergeStatus_Enum = 2
+	// The WindowFn is merging and the PCollection has had merging occur
+	// already.
+	// Example: Sessions after a GroupByKey
+	MergeStatus_ALREADY_MERGED MergeStatus_Enum = 3
+)
+
+var MergeStatus_Enum_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "NON_MERGING",
+	2: "NEEDS_MERGE",
+	3: "ALREADY_MERGED",
+}
+var MergeStatus_Enum_value = map[string]int32{
+	"UNSPECIFIED":    0,
+	"NON_MERGING":    1,
+	"NEEDS_MERGE":    2,
+	"ALREADY_MERGED": 3,
+}
+
+func (x MergeStatus_Enum) String() string {
+	return proto.EnumName(MergeStatus_Enum_name, int32(x))
+}
+func (MergeStatus_Enum) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{22, 0} }
+
+type AccumulationMode_Enum int32
+
+const (
+	AccumulationMode_UNSPECIFIED AccumulationMode_Enum = 0
+	// The aggregation is discarded when it is output
+	AccumulationMode_DISCARDING AccumulationMode_Enum = 1
+	// The aggregation is accumulated across outputs
+	AccumulationMode_ACCUMULATING AccumulationMode_Enum = 2
+)
+
+var AccumulationMode_Enum_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "DISCARDING",
+	2: "ACCUMULATING",
+}
+var AccumulationMode_Enum_value = map[string]int32{
+	"UNSPECIFIED":  0,
+	"DISCARDING":   1,
+	"ACCUMULATING": 2,
+}
+
+func (x AccumulationMode_Enum) String() string {
+	return proto.EnumName(AccumulationMode_Enum_name, int32(x))
+}
+func (AccumulationMode_Enum) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{23, 0} }
+
+type ClosingBehavior_Enum int32
+
+const (
+	ClosingBehavior_UNSPECIFIED ClosingBehavior_Enum = 0
+	// Emit output when a window expires, whether or not there has been
+	// any new data since the last output.
+	ClosingBehavior_EMIT_ALWAYS ClosingBehavior_Enum = 1
+	// Only emit output when new data has arrives since the last output
+	ClosingBehavior_EMIT_IF_NONEMPTY ClosingBehavior_Enum = 2
+)
+
+var ClosingBehavior_Enum_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "EMIT_ALWAYS",
+	2: "EMIT_IF_NONEMPTY",
+}
+var ClosingBehavior_Enum_value = map[string]int32{
+	"UNSPECIFIED":      0,
+	"EMIT_ALWAYS":      1,
+	"EMIT_IF_NONEMPTY": 2,
+}
+
+func (x ClosingBehavior_Enum) String() string {
+	return proto.EnumName(ClosingBehavior_Enum_name, int32(x))
+}
+func (ClosingBehavior_Enum) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{24, 0} }
+
+type OnTimeBehavior_Enum int32
+
+const (
+	OnTimeBehavior_UNSPECIFIED OnTimeBehavior_Enum = 0
+	// Always fire the on-time pane. Even if there is no new data since
+	// the previous firing, an element will be produced.
+	OnTimeBehavior_FIRE_ALWAYS OnTimeBehavior_Enum = 1
+	// Only fire the on-time pane if there is new data since the previous firing.
+	OnTimeBehavior_FIRE_IF_NONEMPTY OnTimeBehavior_Enum = 2
+)
+
+var OnTimeBehavior_Enum_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "FIRE_ALWAYS",
+	2: "FIRE_IF_NONEMPTY",
+}
+var OnTimeBehavior_Enum_value = map[string]int32{
+	"UNSPECIFIED":      0,
+	"FIRE_ALWAYS":      1,
+	"FIRE_IF_NONEMPTY": 2,
+}
+
+func (x OnTimeBehavior_Enum) String() string {
+	return proto.EnumName(OnTimeBehavior_Enum_name, int32(x))
+}
+func (OnTimeBehavior_Enum) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{25, 0} }
+
+type OutputTime_Enum int32
+
+const (
+	OutputTime_UNSPECIFIED OutputTime_Enum = 0
+	// The output has the timestamp of the end of the window.
+	OutputTime_END_OF_WINDOW OutputTime_Enum = 1
+	// The output has the latest timestamp of the input elements since
+	// the last output.
+	OutputTime_LATEST_IN_PANE OutputTime_Enum = 2
+	// The output has the earliest timestamp of the input elements since
+	// the last output.
+	OutputTime_EARLIEST_IN_PANE OutputTime_Enum = 3
+)
+
+var OutputTime_Enum_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "END_OF_WINDOW",
+	2: "LATEST_IN_PANE",
+	3: "EARLIEST_IN_PANE",
+}
+var OutputTime_Enum_value = map[string]int32{
+	"UNSPECIFIED":      0,
+	"END_OF_WINDOW":    1,
+	"LATEST_IN_PANE":   2,
+	"EARLIEST_IN_PANE": 3,
+}
+
+func (x OutputTime_Enum) String() string {
+	return proto.EnumName(OutputTime_Enum_name, int32(x))
+}
+func (OutputTime_Enum) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{26, 0} }
+
+type TimeDomain_Enum int32
+
+const (
+	TimeDomain_UNSPECIFIED TimeDomain_Enum = 0
+	// Event time is time from the perspective of the data
+	TimeDomain_EVENT_TIME TimeDomain_Enum = 1
+	// Processing time is time from the perspective of the
+	// execution of your pipeline
+	TimeDomain_PROCESSING_TIME TimeDomain_Enum = 2
+	// Synchronized processing time is the minimum of the
+	// processing time of all pending elements.
+	//
+	// The "processing time" of an element refers to
+	// the local processing time at which it was emitted
+	TimeDomain_SYNCHRONIZED_PROCESSING_TIME TimeDomain_Enum = 3
+)
+
+var TimeDomain_Enum_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "EVENT_TIME",
+	2: "PROCESSING_TIME",
+	3: "SYNCHRONIZED_PROCESSING_TIME",
+}
+var TimeDomain_Enum_value = map[string]int32{
+	"UNSPECIFIED":                  0,
+	"EVENT_TIME":                   1,
+	"PROCESSING_TIME":              2,
+	"SYNCHRONIZED_PROCESSING_TIME": 3,
+}
+
+func (x TimeDomain_Enum) String() string {
+	return proto.EnumName(TimeDomain_Enum_name, int32(x))
+}
+func (TimeDomain_Enum) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{27, 0} }
+
+type DisplayData_Type_Enum int32
+
+const (
+	DisplayData_Type_UNSPECIFIED DisplayData_Type_Enum = 0
+	DisplayData_Type_STRING      DisplayData_Type_Enum = 1
+	DisplayData_Type_INTEGER     DisplayData_Type_Enum = 2
+	DisplayData_Type_FLOAT       DisplayData_Type_Enum = 3
+	DisplayData_Type_BOOLEAN     DisplayData_Type_Enum = 4
+	DisplayData_Type_TIMESTAMP   DisplayData_Type_Enum = 5
+	DisplayData_Type_DURATION    DisplayData_Type_Enum = 6
+	DisplayData_Type_JAVA_CLASS  DisplayData_Type_Enum = 7
+)
+
+var DisplayData_Type_Enum_name = map[int32]string{
+	0: "UNSPECIFIED",
+	1: "STRING",
+	2: "INTEGER",
+	3: "FLOAT",
+	4: "BOOLEAN",
+	5: "TIMESTAMP",
+	6: "DURATION",
+	7: "JAVA_CLASS",
+}
+var DisplayData_Type_Enum_value = map[string]int32{
+	"UNSPECIFIED": 0,
+	"STRING":      1,
+	"INTEGER":     2,
+	"FLOAT":       3,
+	"BOOLEAN":     4,
+	"TIMESTAMP":   5,
+	"DURATION":    6,
+	"JAVA_CLASS":  7,
+}
+
+func (x DisplayData_Type_Enum) String() string {
+	return proto.EnumName(DisplayData_Type_Enum_name, int32(x))
+}
+func (DisplayData_Type_Enum) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{34, 2, 0} }
+
+// A set of mappings from id to message. This is included as an optional field
+// on any proto message that may contain references needing resolution.
+type Components struct {
+	// (Required) A map from pipeline-scoped id to PTransform.
+	Transforms map[string]*PTransform `protobuf:"bytes,1,rep,name=transforms" json:"transforms,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"`
+	// (Required) A map from pipeline-scoped id to PCollection.
+	Pcollections map[string]*PCollection `protobuf:"bytes,2,rep,name=pcollections" json:"pcollections,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"`
+	// (Required) A map from pipeline-scoped id to WindowingStrategy.
+	WindowingStrategies map[string]*WindowingStrategy `protobuf:"bytes,3,rep,name=windowing_strategies,json=windowingStrategies" json:"windowing_strategies,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"`
+	// (Required) A map from pipeline-scoped id to Coder.
+	Coders map[string]*Coder `protobuf:"bytes,4,rep,name=coders" json:"coders,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"`
+	// (Required) A map from pipeline-scoped id to Environment.
+	Environments map[string]*Environment `protobuf:"bytes,5,rep,name=environments" json:"environments,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"`
+}
+
+func (m *Components) Reset()                    { *m = Components{} }
+func (m *Components) String() string            { return proto.CompactTextString(m) }
+func (*Components) ProtoMessage()               {}
+func (*Components) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0} }
+
+func (m *Components) GetTransforms() map[string]*PTransform {
+	if m != nil {
+		return m.Transforms
+	}
+	return nil
+}
+
+func (m *Components) GetPcollections() map[string]*PCollection {
+	if m != nil {
+		return m.Pcollections
+	}
+	return nil
+}
+
+func (m *Components) GetWindowingStrategies() map[string]*WindowingStrategy {
+	if m != nil {
+		return m.WindowingStrategies
+	}
+	return nil
+}
+
+func (m *Components) GetCoders() map[string]*Coder {
+	if m != nil {
+		return m.Coders
+	}
+	return nil
+}
+
+func (m *Components) GetEnvironments() map[string]*Environment {
+	if m != nil {
+		return m.Environments
+	}
+	return nil
+}
+
+// A disjoint union of all the things that may contain references
+// that require Components to resolve.
+type MessageWithComponents struct {
+	// (Optional) The by-reference components of the root message,
+	// enabling a standalone message.
+	//
+	// If this is absent, it is expected that there are no
+	// references.
+	Components *Components `protobuf:"bytes,1,opt,name=components" json:"components,omitempty"`
+	// (Required) The root message that may contain pointers
+	// that should be resolved by looking inside components.
+	//
+	// Types that are valid to be assigned to Root:
+	//	*MessageWithComponents_Coder
+	//	*MessageWithComponents_CombinePayload
+	//	*MessageWithComponents_SdkFunctionSpec
+	//	*MessageWithComponents_ParDoPayload
+	//	*MessageWithComponents_Ptransform
+	//	*MessageWithComponents_Pcollection
+	//	*MessageWithComponents_ReadPayload
+	//	*MessageWithComponents_SideInput
+	//	*MessageWithComponents_WindowIntoPayload
+	//	*MessageWithComponents_WindowingStrategy
+	//	*MessageWithComponents_FunctionSpec
+	Root isMessageWithComponents_Root `protobuf_oneof:"root"`
+}
+
+func (m *MessageWithComponents) Reset()                    { *m = MessageWithComponents{} }
+func (m *MessageWithComponents) String() string            { return proto.CompactTextString(m) }
+func (*MessageWithComponents) ProtoMessage()               {}
+func (*MessageWithComponents) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{1} }
+
+type isMessageWithComponents_Root interface {
+	isMessageWithComponents_Root()
+}
+
+type MessageWithComponents_Coder struct {
+	Coder *Coder `protobuf:"bytes,2,opt,name=coder,oneof"`
+}
+type MessageWithComponents_CombinePayload struct {
+	CombinePayload *CombinePayload `protobuf:"bytes,3,opt,name=combine_payload,json=combinePayload,oneof"`
+}
+type MessageWithComponents_SdkFunctionSpec struct {
+	SdkFunctionSpec *SdkFunctionSpec `protobuf:"bytes,4,opt,name=sdk_function_spec,json=sdkFunctionSpec,oneof"`
+}
+type MessageWithComponents_ParDoPayload struct {
+	ParDoPayload *ParDoPayload `protobuf:"bytes,6,opt,name=par_do_payload,json=parDoPayload,oneof"`
+}
+type MessageWithComponents_Ptransform struct {
+	Ptransform *PTransform `protobuf:"bytes,7,opt,name=ptransform,oneof"`
+}
+type MessageWithComponents_Pcollection struct {
+	Pcollection *PCollection `protobuf:"bytes,8,opt,name=pcollection,oneof"`
+}
+type MessageWithComponents_ReadPayload struct {
+	ReadPayload *ReadPayload `protobuf:"bytes,9,opt,name=read_payload,json=readPayload,oneof"`
+}
+type MessageWithComponents_SideInput struct {
+	SideInput *SideInput `protobuf:"bytes,11,opt,name=side_input,json=sideInput,oneof"`
+}
+type MessageWithComponents_WindowIntoPayload struct {
+	WindowIntoPayload *WindowIntoPayload `protobuf:"bytes,12,opt,name=window_into_payload,json=windowIntoPayload,oneof"`
+}
+type MessageWithComponents_WindowingStrategy struct {
+	WindowingStrategy *WindowingStrategy `protobuf:"bytes,13,opt,name=windowing_strategy,json=windowingStrategy,oneof"`
+}
+type MessageWithComponents_FunctionSpec struct {
+	FunctionSpec *FunctionSpec `protobuf:"bytes,14,opt,name=function_spec,json=functionSpec,oneof"`
+}
+
+func (*MessageWithComponents_Coder) isMessageWithComponents_Root()             {}
+func (*MessageWithComponents_CombinePayload) isMessageWithComponents_Root()    {}
+func (*MessageWithComponents_SdkFunctionSpec) isMessageWithComponents_Root()   {}
+func (*MessageWithComponents_ParDoPayload) isMessageWithComponents_Root()      {}
+func (*MessageWithComponents_Ptransform) isMessageWithComponents_Root()        {}
+func (*MessageWithComponents_Pcollection) isMessageWithComponents_Root()       {}
+func (*MessageWithComponents_ReadPayload) isMessageWithComponents_Root()       {}
+func (*MessageWithComponents_SideInput) isMessageWithComponents_Root()         {}
+func (*MessageWithComponents_WindowIntoPayload) isMessageWithComponents_Root() {}
+func (*MessageWithComponents_WindowingStrategy) isMessageWithComponents_Root() {}
+func (*MessageWithComponents_FunctionSpec) isMessageWithComponents_Root()      {}
+
+func (m *MessageWithComponents) GetRoot() isMessageWithComponents_Root {
+	if m != nil {
+		return m.Root
+	}
+	return nil
+}
+
+func (m *MessageWithComponents) GetComponents() *Components {
+	if m != nil {
+		return m.Components
+	}
+	return nil
+}
+
+func (m *MessageWithComponents) GetCoder() *Coder {
+	if x, ok := m.GetRoot().(*MessageWithComponents_Coder); ok {
+		return x.Coder
+	}
+	return nil
+}
+
+func (m *MessageWithComponents) GetCombinePayload() *CombinePayload {
+	if x, ok := m.GetRoot().(*MessageWithComponents_CombinePayload); ok {
+		return x.CombinePayload
+	}
+	return nil
+}
+
+func (m *MessageWithComponents) GetSdkFunctionSpec() *SdkFunctionSpec {
+	if x, ok := m.GetRoot().(*MessageWithComponents_SdkFunctionSpec); ok {
+		return x.SdkFunctionSpec
+	}
+	return nil
+}
+
+func (m *MessageWithComponents) GetParDoPayload() *ParDoPayload {
+	if x, ok := m.GetRoot().(*MessageWithComponents_ParDoPayload); ok {
+		return x.ParDoPayload
+	}
+	return nil
+}
+
+func (m *MessageWithComponents) GetPtransform() *PTransform {
+	if x, ok := m.GetRoot().(*MessageWithComponents_Ptransform); ok {
+		return x.Ptransform
+	}
+	return nil
+}
+
+func (m *MessageWithComponents) GetPcollection() *PCollection {
+	if x, ok := m.GetRoot().(*MessageWithComponents_Pcollection); ok {
+		return x.Pcollection
+	}
+	return nil
+}
+
+func (m *MessageWithComponents) GetReadPayload() *ReadPayload {
+	if x, ok := m.GetRoot().(*MessageWithComponents_ReadPayload); ok {
+		return x.ReadPayload
+	}
+	return nil
+}
+
+func (m *MessageWithComponents) GetSideInput() *SideInput {
+	if x, ok := m.GetRoot().(*MessageWithComponents_SideInput); ok {
+		return x.SideInput
+	}
+	return nil
+}
+
+func (m *MessageWithComponents) GetWindowIntoPayload() *WindowIntoPayload {
+	if x, ok := m.GetRoot().(*MessageWithComponents_WindowIntoPayload); ok {
+		return x.WindowIntoPayload
+	}
+	return nil
+}
+
+func (m *MessageWithComponents) GetWindowingStrategy() *WindowingStrategy {
+	if x, ok := m.GetRoot().(*MessageWithComponents_WindowingStrategy); ok {
+		return x.WindowingStrategy
+	}
+	return nil
+}
+
+func (m *MessageWithComponents) GetFunctionSpec() *FunctionSpec {
+	if x, ok := m.GetRoot().(*MessageWithComponents_FunctionSpec); ok {
+		return x.FunctionSpec
+	}
+	return nil
+}
+
+// XXX_OneofFuncs is for the internal use of the proto package.
+func (*MessageWithComponents) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) {
+	return _MessageWithComponents_OneofMarshaler, _MessageWithComponents_OneofUnmarshaler, _MessageWithComponents_OneofSizer, []interface{}{
+		(*MessageWithComponents_Coder)(nil),
+		(*MessageWithComponents_CombinePayload)(nil),
+		(*MessageWithComponents_SdkFunctionSpec)(nil),
+		(*MessageWithComponents_ParDoPayload)(nil),
+		(*MessageWithComponents_Ptransform)(nil),
+		(*MessageWithComponents_Pcollection)(nil),
+		(*MessageWithComponents_ReadPayload)(nil),
+		(*MessageWithComponents_SideInput)(nil),
+		(*MessageWithComponents_WindowIntoPayload)(nil),
+		(*MessageWithComponents_WindowingStrategy)(nil),
+		(*MessageWithComponents_FunctionSpec)(nil),
+	}
+}
+
+func _MessageWithComponents_OneofMarshaler(msg proto.Message, b *proto.Buffer) error {
+	m := msg.(*MessageWithComponents)
+	// root
+	switch x := m.Root.(type) {
+	case *MessageWithComponents_Coder:
+		b.EncodeVarint(2<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.Coder); err != nil {
+			return err
+		}
+	case *MessageWithComponents_CombinePayload:
+		b.EncodeVarint(3<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.CombinePayload); err != nil {
+			return err
+		}
+	case *MessageWithComponents_SdkFunctionSpec:
+		b.EncodeVarint(4<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.SdkFunctionSpec); err != nil {
+			return err
+		}
+	case *MessageWithComponents_ParDoPayload:
+		b.EncodeVarint(6<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.ParDoPayload); err != nil {
+			return err
+		}
+	case *MessageWithComponents_Ptransform:
+		b.EncodeVarint(7<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.Ptransform); err != nil {
+			return err
+		}
+	case *MessageWithComponents_Pcollection:
+		b.EncodeVarint(8<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.Pcollection); err != nil {
+			return err
+		}
+	case *MessageWithComponents_ReadPayload:
+		b.EncodeVarint(9<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.ReadPayload); err != nil {
+			return err
+		}
+	case *MessageWithComponents_SideInput:
+		b.EncodeVarint(11<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.SideInput); err != nil {
+			return err
+		}
+	case *MessageWithComponents_WindowIntoPayload:
+		b.EncodeVarint(12<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.WindowIntoPayload); err != nil {
+			return err
+		}
+	case *MessageWithComponents_WindowingStrategy:
+		b.EncodeVarint(13<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.WindowingStrategy); err != nil {
+			return err
+		}
+	case *MessageWithComponents_FunctionSpec:
+		b.EncodeVarint(14<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.FunctionSpec); err != nil {
+			return err
+		}
+	case nil:
+	default:
+		return fmt.Errorf("MessageWithComponents.Root has unexpected type %T", x)
+	}
+	return nil
+}
+
+func _MessageWithComponents_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) {
+	m := msg.(*MessageWithComponents)
+	switch tag {
+	case 2: // root.coder
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(Coder)
+		err := b.DecodeMessage(msg)
+		m.Root = &MessageWithComponents_Coder{msg}
+		return true, err
+	case 3: // root.combine_payload
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(CombinePayload)
+		err := b.DecodeMessage(msg)
+		m.Root = &MessageWithComponents_CombinePayload{msg}
+		return true, err
+	case 4: // root.sdk_function_spec
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(SdkFunctionSpec)
+		err := b.DecodeMessage(msg)
+		m.Root = &MessageWithComponents_SdkFunctionSpec{msg}
+		return true, err
+	case 6: // root.par_do_payload
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(ParDoPayload)
+		err := b.DecodeMessage(msg)
+		m.Root = &MessageWithComponents_ParDoPayload{msg}
+		return true, err
+	case 7: // root.ptransform
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(PTransform)
+		err := b.DecodeMessage(msg)
+		m.Root = &MessageWithComponents_Ptransform{msg}
+		return true, err
+	case 8: // root.pcollection
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(PCollection)
+		err := b.DecodeMessage(msg)
+		m.Root = &MessageWithComponents_Pcollection{msg}
+		return true, err
+	case 9: // root.read_payload
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(ReadPayload)
+		err := b.DecodeMessage(msg)
+		m.Root = &MessageWithComponents_ReadPayload{msg}
+		return true, err
+	case 11: // root.side_input
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(SideInput)
+		err := b.DecodeMessage(msg)
+		m.Root = &MessageWithComponents_SideInput{msg}
+		return true, err
+	case 12: // root.window_into_payload
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(WindowIntoPayload)
+		err := b.DecodeMessage(msg)
+		m.Root = &MessageWithComponents_WindowIntoPayload{msg}
+		return true, err
+	case 13: // root.windowing_strategy
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(WindowingStrategy)
+		err := b.DecodeMessage(msg)
+		m.Root = &MessageWithComponents_WindowingStrategy{msg}
+		return true, err
+	case 14: // root.function_spec
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(FunctionSpec)
+		err := b.DecodeMessage(msg)
+		m.Root = &MessageWithComponents_FunctionSpec{msg}
+		return true, err
+	default:
+		return false, nil
+	}
+}
+
+func _MessageWithComponents_OneofSizer(msg proto.Message) (n int) {
+	m := msg.(*MessageWithComponents)
+	// root
+	switch x := m.Root.(type) {
+	case *MessageWithComponents_Coder:
+		s := proto.Size(x.Coder)
+		n += proto.SizeVarint(2<<3 | proto.WireBytes)
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *MessageWithComponents_CombinePayload:
+		s := proto.Size(x.CombinePayload)
+		n += proto.SizeVarint(3<<3 | proto.WireBytes)
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *MessageWithComponents_SdkFunctionSpec:
+		s := proto.Size(x.SdkFunctionSpec)
+		n += proto.SizeVarint(4<<3 | proto.WireBytes)
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *MessageWithComponents_ParDoPayload:
+		s := proto.Size(x.ParDoPayload)
+		n += proto.SizeVarint(6<<3 | proto.WireBytes)
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *MessageWithComponents_Ptransform:
+		s := proto.Size(x.Ptransform)
+		n += proto.SizeVarint(7<<3 | proto.WireBytes)
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *MessageWithComponents_Pcollection:
+		s := proto.Size(x.Pcollection)
+		n += proto.SizeVarint(8<<3 | proto.WireBytes)
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *MessageWithComponents_ReadPayload:
+		s := proto.Size(x.ReadPayload)
+		n += proto.SizeVarint(9<<3 | proto.WireBytes)
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *MessageWithComponents_SideInput:
+		s := proto.Size(x.SideInput)
+		n += proto.SizeVarint(11<<3 | proto.WireBytes)
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *MessageWithComponents_WindowIntoPayload:
+		s := proto.Size(x.WindowIntoPayload)
+		n += proto.SizeVarint(12<<3 | proto.WireBytes)
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *MessageWithComponents_WindowingStrategy:
+		s := proto.Size(x.WindowingStrategy)
+		n += proto.SizeVarint(13<<3 | proto.WireBytes)
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *MessageWithComponents_FunctionSpec:
+		s := proto.Size(x.FunctionSpec)
+		n += proto.SizeVarint(14<<3 | proto.WireBytes)
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case nil:
+	default:
+		panic(fmt.Sprintf("proto: unexpected type %T in oneof", x))
+	}
+	return n
+}
+
+// A Pipeline is a hierarchical graph of PTransforms, linked
+// by PCollections.
+//
+// This is represented by a number of by-reference maps to nodes,
+// PCollections, SDK environments, UDF, etc., for
+// supporting compact reuse and arbitrary graph structure.
+//
+// All of the keys in the maps here are arbitrary strings that are only
+// required to be internally consistent within this proto message.
+type Pipeline struct {
+	// (Required) The coders, UDFs, graph nodes, etc, that make up
+	// this pipeline.
+	Components *Components `protobuf:"bytes,1,opt,name=components" json:"components,omitempty"`
+	// (Required) The ids of all PTransforms that are not contained within another PTransform.
+	// These must be in shallow topological order, so that traversing them recursively
+	// in this order yields a recursively topological traversal.
+	RootTransformIds []string `protobuf:"bytes,2,rep,name=root_transform_ids,json=rootTransformIds" json:"root_transform_ids,omitempty"`
+	// (Optional) Static display data for the pipeline. If there is none,
+	// it may be omitted.
+	DisplayData *DisplayData `protobuf:"bytes,3,opt,name=display_data,json=displayData" json:"display_data,omitempty"`
+}
+
+func (m *Pipeline) Reset()                    { *m = Pipeline{} }
+func (m *Pipeline) String() string            { return proto.CompactTextString(m) }
+func (*Pipeline) ProtoMessage()               {}
+func (*Pipeline) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{2} }
+
+func (m *Pipeline) GetComponents() *Components {
+	if m != nil {
+		return m.Components
+	}
+	return nil
+}
+
+func (m *Pipeline) GetRootTransformIds() []string {
+	if m != nil {
+		return m.RootTransformIds
+	}
+	return nil
+}
+
+func (m *Pipeline) GetDisplayData() *DisplayData {
+	if m != nil {
+		return m.DisplayData
+	}
+	return nil
+}
+
+// An applied PTransform! This does not contain the graph data, but only the
+// fields specific to a graph node that is a Runner API transform
+// between PCollections.
+type PTransform struct {
+	// (Required) A unique name for the application node.
+	//
+	// Ideally, this should be stable over multiple evolutions of a pipeline
+	// for the purposes of logging and associating pipeline state with a node,
+	// etc.
+	//
+	// If it is not stable, then the runner decides what will happen. But, most
+	// importantly, it must always be here and be unique, even if it is
+	// autogenerated.
+	UniqueName string `protobuf:"bytes,5,opt,name=unique_name,json=uniqueName" json:"unique_name,omitempty"`
+	// (Optional) A URN and payload that, together, fully defined the semantics
+	// of this transform.
+	//
+	// If absent, this must be an "anonymous" composite transform.
+	//
+	// For primitive transform in the Runner API, this is required, and the
+	// payloads are well-defined messages. When the URN indicates ParDo it
+	// is a ParDoPayload, and so on.
+	//
+	// TODO: document the standardized URNs and payloads
+	// TODO: separate standardized payloads into a separate proto file
+	//
+	// For some special composite transforms, the payload is also officially
+	// defined:
+	//
+	//  - when the URN is "urn:beam:transforms:combine" it is a CombinePayload
+	//
+	Spec *FunctionSpec `protobuf:"bytes,1,opt,name=spec" json:"spec,omitempty"`
+	// (Optional) if this node is a composite, a list of the ids of
+	// transforms that it contains.
+	Subtransforms []string `protobuf:"bytes,2,rep,name=subtransforms" json:"subtransforms,omitempty"`
+	// (Required) A map from local names of inputs (unique only with this map, and
+	// likely embedded in the transform payload and serialized user code) to
+	// PCollection ids.
+	//
+	// The payload for this transform may clarify the relationship of these
+	// inputs. For example:
+	//
+	//  - for a Flatten transform they are merged
+	//  - for a ParDo transform, some may be side inputs
+	//
+	// All inputs are recorded here so that the topological ordering of
+	// the graph is consistent whether or not the payload is understood.
+	//
+	Inputs map[string]string `protobuf:"bytes,3,rep,name=inputs" json:"inputs,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"`
+	// (Required) A map from local names of outputs (unique only within this map,
+	// and likely embedded in the transform payload and serialized user code)
+	// to PCollection ids.
+	//
+	// The URN or payload for this transform node may clarify the type and
+	// relationship of these outputs. For example:
+	//
+	//  - for a ParDo transform, these are tags on PCollections, which will be
+	//    embedded in the DoFn.
+	//
+	Outputs map[string]string `protobuf:"bytes,4,rep,name=outputs" json:"outputs,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"`
+	// (Optional) Static display data for this PTransform application. If
+	// there is none, or it is not relevant (such as use by the Fn API)
+	// then it may be omitted.
+	DisplayData *DisplayData `protobuf:"bytes,6,opt,name=display_data,json=displayData" json:"display_data,omitempty"`
+}
+
+func (m *PTransform) Reset()                    { *m = PTransform{} }
+func (m *PTransform) String() string            { return proto.CompactTextString(m) }
+func (*PTransform) ProtoMessage()               {}
+func (*PTransform) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{3} }
+
+func (m *PTransform) GetUniqueName() string {
+	if m != nil {
+		return m.UniqueName
+	}
+	return ""
+}
+
+func (m *PTransform) GetSpec() *FunctionSpec {
+	if m != nil {
+		return m.Spec
+	}
+	return nil
+}
+
+func (m *PTransform) GetSubtransforms() []string {
+	if m != nil {
+		return m.Subtransforms
+	}
+	return nil
+}
+
+func (m *PTransform) GetInputs() map[string]string {
+	if m != nil {
+		return m.Inputs
+	}
+	return nil
+}
+
+func (m *PTransform) GetOutputs() map[string]string {
+	if m != nil {
+		return m.Outputs
+	}
+	return nil
+}
+
+func (m *PTransform) GetDisplayData() *DisplayData {
+	if m != nil {
+		return m.DisplayData
+	}
+	return nil
+}
+
+// A PCollection!
+type PCollection struct {
+	// (Required) A unique name for the PCollection.
+	//
+	// Ideally, this should be stable over multiple evolutions of a pipeline
+	// for the purposes of logging and associating pipeline state with a node,
+	// etc.
+	//
+	// If it is not stable, then the runner decides what will happen. But, most
+	// importantly, it must always be here, even if it is autogenerated.
+	UniqueName string `protobuf:"bytes,1,opt,name=unique_name,json=uniqueName" json:"unique_name,omitempty"`
+	// (Required) The id of the Coder for this PCollection.
+	CoderId string `protobuf:"bytes,2,opt,name=coder_id,json=coderId" json:"coder_id,omitempty"`
+	// (Required) Whether this PCollection is bounded or unbounded
+	IsBounded IsBounded_Enum `protobuf:"varint,3,opt,name=is_bounded,json=isBounded,enum=org.apache.beam.model.pipeline.v1.IsBounded_Enum" json:"is_bounded,omitempty"`
+	// (Required) The id of the windowing strategy for this PCollection.
+	WindowingStrategyId string `protobuf:"bytes,4,opt,name=windowing_strategy_id,json=windowingStrategyId" json:"windowing_strategy_id,omitempty"`
+	// (Optional) Static display data for this PTransform application. If
+	// there is none, or it is not relevant (such as use by the Fn API)
+	// then it may be omitted.
+	DisplayData *DisplayData `protobuf:"bytes,5,opt,name=display_data,json=displayData" json:"display_data,omitempty"`
+}
+
+func (m *PCollection) Reset()                    { *m = PCollection{} }
+func (m *PCollection) String() string            { return proto.CompactTextString(m) }
+func (*PCollection) ProtoMessage()               {}
+func (*PCollection) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{4} }
+
+func (m *PCollection) GetUniqueName() string {
+	if m != nil {
+		return m.UniqueName
+	}
+	return ""
+}
+
+func (m *PCollection) GetCoderId() string {
+	if m != nil {
+		return m.CoderId
+	}
+	return ""
+}
+
+func (m *PCollection) GetIsBounded() IsBounded_Enum {
+	if m != nil {
+		return m.IsBounded
+	}
+	return IsBounded_UNSPECIFIED
+}
+
+func (m *PCollection) GetWindowingStrategyId() string {
+	if m != nil {
+		return m.WindowingStrategyId
+	}
+	return ""
+}
+
+func (m *PCollection) GetDisplayData() *DisplayData {
+	if m != nil {
+		return m.DisplayData
+	}
+	return nil
+}
+
+// The payload for the primitive ParDo transform.
+type ParDoPayload struct {
+	// (Required) The SdkFunctionSpec of the DoFn.
+	DoFn *SdkFunctionSpec `protobuf:"bytes,1,opt,name=do_fn,json=doFn" json:"do_fn,omitempty"`
+	// (Required) Additional pieces of context the DoFn may require that
+	// are not otherwise represented in the payload.
+	// (may force runners to execute the ParDo differently)
+	Parameters []*Parameter `protobuf:"bytes,2,rep,name=parameters" json:"parameters,omitempty"`
+	// (Optional) A mapping of local input names to side inputs, describing
+	// the expected access pattern.
+	SideInputs map[string]*SideInput `protobuf:"bytes,3,rep,name=side_inputs,json=sideInputs" json:"side_inputs,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"`
+	// (Optional) A mapping of local state names to state specifications.
+	StateSpecs map[string]*StateSpec `protobuf:"bytes,4,rep,name=state_specs,json=stateSpecs" json:"state_specs,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"`
+	// (Optional) A mapping of local timer names to timer specifications.
+	TimerSpecs map[string]*TimerSpec `protobuf:"bytes,5,rep,name=timer_specs,json=timerSpecs" json:"timer_specs,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"`
+	// Whether the DoFn is splittable
+	Splittable bool `protobuf:"varint,6,opt,name=splittable" json:"splittable,omitempty"`
+}
+
+func (m *ParDoPayload) Reset()                    { *m = ParDoPayload{} }
+func (m *ParDoPayload) String() string            { return proto.CompactTextString(m) }
+func (*ParDoPayload) ProtoMessage()               {}
+func (*ParDoPayload) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{5} }
+
+func (m *ParDoPayload) GetDoFn() *SdkFunctionSpec {
+	if m != nil {
+		return m.DoFn
+	}
+	return nil
+}
+
+func (m *ParDoPayload) GetParameters() []*Parameter {
+	if m != nil {
+		return m.Parameters
+	}
+	return nil
+}
+
+func (m *ParDoPayload) GetSideInputs() map[string]*SideInput {
+	if m != nil {
+		return m.SideInputs
+	}
+	return nil
+}
+
+func (m *ParDoPayload) GetStateSpecs() map[string]*StateSpec {
+	if m != nil {
+		return m.StateSpecs
+	}
+	return nil
+}
+
+func (m *ParDoPayload) GetTimerSpecs() map[string]*TimerSpec {
+	if m != nil {
+		return m.TimerSpecs
+	}
+	return nil
+}
+
+func (m *ParDoPayload) GetSplittable() bool {
+	if m != nil {
+		return m.Splittable
+	}
+	return false
+}
+
+// Parameters that a UDF might require.
+//
+// The details of how a runner sends these parameters to the SDK harness
+// are the subject of the Fn API.
+//
+// The details of how an SDK harness delivers them to the UDF is entirely
+// up to the SDK. (for some SDKs there may be parameters that are not
+// represented here if the runner doesn't need to do anything)
+//
+// Here, the parameters are simply indicators to the runner that they
+// need to run the function a particular way.
+//
+// TODO: the evolution of the Fn API will influence what needs explicit
+// representation here
+type Parameter struct {
+	Type Parameter_Type_Enum `protobuf:"varint,1,opt,name=type,enum=org.apache.beam.model.pipeline.v1.Parameter_Type_Enum" json:"type,omitempty"`
+}
+
+func (m *Parameter) Reset()                    { *m = Parameter{} }
+func (m *Parameter) String() string            { return proto.CompactTextString(m) }
+func (*Parameter) ProtoMessage()               {}
+func (*Parameter) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{6} }
+
+func (m *Parameter) GetType() Parameter_Type_Enum {
+	if m != nil {
+		return m.Type
+	}
+	return Parameter_Type_UNSPECIFIED
+}
+
+type Parameter_Type struct {
+}
+
+func (m *Parameter_Type) Reset()                    { *m = Parameter_Type{} }
+func (m *Parameter_Type) String() string            { return proto.CompactTextString(m) }
+func (*Parameter_Type) ProtoMessage()               {}
+func (*Parameter_Type) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{6, 0} }
+
+type StateSpec struct {
+	// Types that are valid to be assigned to Spec:
+	//	*StateSpec_ValueSpec
+	//	*StateSpec_BagSpec
+	//	*StateSpec_CombiningSpec
+	//	*StateSpec_MapSpec
+	//	*StateSpec_SetSpec
+	Spec isStateSpec_Spec `protobuf_oneof:"spec"`
+}
+
+func (m *StateSpec) Reset()                    { *m = StateSpec{} }
+func (m *StateSpec) String() string            { return proto.CompactTextString(m) }
+func (*StateSpec) ProtoMessage()               {}
+func (*StateSpec) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{7} }
+
+type isStateSpec_Spec interface {
+	isStateSpec_Spec()
+}
+
+type StateSpec_ValueSpec struct {
+	ValueSpec *ValueStateSpec `protobuf:"bytes,1,opt,name=value_spec,json=valueSpec,oneof"`
+}
+type StateSpec_BagSpec struct {
+	BagSpec *BagStateSpec `protobuf:"bytes,2,opt,name=bag_spec,json=bagSpec,oneof"`
+}
+type StateSpec_CombiningSpec struct {
+	CombiningSpec *CombiningStateSpec `protobuf:"bytes,3,opt,name=combining_spec,json=combiningSpec,oneof"`
+}
+type StateSpec_MapSpec struct {
+	MapSpec *MapStateSpec `protobuf:"bytes,4,opt,name=map_spec,json=mapSpec,oneof"`
+}
+type StateSpec_SetSpec struct {
+	SetSpec *SetStateSpec `protobuf:"bytes,5,opt,name=set_spec,json=setSpec,oneof"`
+}
+
+func (*StateSpec_ValueSpec) isStateSpec_Spec()     {}
+func (*StateSpec_BagSpec) isStateSpec_Spec()       {}
+func (*StateSpec_CombiningSpec) isStateSpec_Spec() {}
+func (*StateSpec_MapSpec) isStateSpec_Spec()       {}
+func (*StateSpec_SetSpec) isStateSpec_Spec()       {}
+
+func (m *StateSpec) GetSpec() isStateSpec_Spec {
+	if m != nil {
+		return m.Spec
+	}
+	return nil
+}
+
+func (m *StateSpec) GetValueSpec() *ValueStateSpec {
+	if x, ok := m.GetSpec().(*StateSpec_ValueSpec); ok {
+		return x.ValueSpec
+	}
+	return nil
+}
+
+func (m *StateSpec) GetBagSpec() *BagStateSpec {
+	if x, ok := m.GetSpec().(*StateSpec_BagSpec); ok {
+		return x.BagSpec
+	}
+	return nil
+}
+
+func (m *StateSpec) GetCombiningSpec() *CombiningStateSpec {
+	if x, ok := m.GetSpec().(*StateSpec_CombiningSpec); ok {
+		return x.CombiningSpec
+	}
+	return nil
+}
+
+func (m *StateSpec) GetMapSpec() *MapStateSpec {
+	if x, ok := m.GetSpec().(*StateSpec_MapSpec); ok {
+		return x.MapSpec
+	}
+	return nil
+}
+
+func (m *StateSpec) GetSetSpec() *SetStateSpec {
+	if x, ok := m.GetSpec().(*StateSpec_SetSpec); ok {
+		return x.SetSpec
+	}
+	return nil
+}
+
+// XXX_OneofFuncs is for the internal use of the proto package.
+func (*StateSpec) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) {
+	return _StateSpec_OneofMarshaler, _StateSpec_OneofUnmarshaler, _StateSpec_OneofSizer, []interface{}{
+		(*StateSpec_ValueSpec)(nil),
+		(*StateSpec_BagSpec)(nil),
+		(*StateSpec_CombiningSpec)(nil),
+		(*StateSpec_MapSpec)(nil),
+		(*StateSpec_SetSpec)(nil),
+	}
+}
+
+func _StateSpec_OneofMarshaler(msg proto.Message, b *proto.Buffer) error {
+	m := msg.(*StateSpec)
+	// spec
+	switch x := m.Spec.(type) {
+	case *StateSpec_ValueSpec:
+		b.EncodeVarint(1<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.ValueSpec); err != nil {
+			return err
+		}
+	case *StateSpec_BagSpec:
+		b.EncodeVarint(2<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.BagSpec); err != nil {
+			return err
+		}
+	case *StateSpec_CombiningSpec:
+		b.EncodeVarint(3<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.CombiningSpec); err != nil {
+			return err
+		}
+	case *StateSpec_MapSpec:
+		b.EncodeVarint(4<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.MapSpec); err != nil {
+			return err
+		}
+	case *StateSpec_SetSpec:
+		b.EncodeVarint(5<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.SetSpec); err != nil {
+			return err
+		}
+	case nil:
+	default:
+		return fmt.Errorf("StateSpec.Spec has unexpected type %T", x)
+	}
+	return nil
+}
+
+func _StateSpec_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) {
+	m := msg.(*StateSpec)
+	switch tag {
+	case 1: // spec.value_spec
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(ValueStateSpec)
+		err := b.DecodeMessage(msg)
+		m.Spec = &StateSpec_ValueSpec{msg}
+		return true, err
+	case 2: // spec.bag_spec
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(BagStateSpec)
+		err := b.DecodeMessage(msg)
+		m.Spec = &StateSpec_BagSpec{msg}
+		return true, err
+	case 3: // spec.combining_spec
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(CombiningStateSpec)
+		err := b.DecodeMessage(msg)
+		m.Spec = &StateSpec_CombiningSpec{msg}
+		return true, err
+	case 4: // spec.map_spec
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(MapStateSpec)
+		err := b.DecodeMessage(msg)
+		m.Spec = &StateSpec_MapSpec{msg}
+		return true, err
+	case 5: // spec.set_spec
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(SetStateSpec)
+		err := b.DecodeMessage(msg)
+		m.Spec = &StateSpec_SetSpec{msg}
+		return true, err
+	default:
+		return false, nil
+	}
+}
+
+func _StateSpec_OneofSizer(msg proto.Message) (n int) {
+	m := msg.(*StateSpec)
+	// spec
+	switch x := m.Spec.(type) {
+	case *StateSpec_ValueSpec:
+		s := proto.Size(x.ValueSpec)
+		n += proto.SizeVarint(1<<3 | proto.WireBytes)
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *StateSpec_BagSpec:
+		s := proto.Size(x.BagSpec)
+		n += proto.SizeVarint(2<<3 | proto.WireBytes)
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *StateSpec_CombiningSpec:
+		s := proto.Size(x.CombiningSpec)
+		n += proto.SizeVarint(3<<3 | proto.WireBytes)
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *StateSpec_MapSpec:
+		s := proto.Size(x.MapSpec)
+		n += proto.SizeVarint(4<<3 | proto.WireBytes)
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *StateSpec_SetSpec:
+		s := proto.Size(x.SetSpec)
+		n += proto.SizeVarint(5<<3 | proto.WireBytes)
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case nil:
+	default:
+		panic(fmt.Sprintf("proto: unexpected type %T in oneof", x))
+	}
+	return n
+}
+
+type ValueStateSpec struct {
+	CoderId string `protobuf:"bytes,1,opt,name=coder_id,json=coderId" json:"coder_id,omitempty"`
+}
+
+func (m *ValueStateSpec) Reset()                    { *m = ValueStateSpec{} }
+func (m *ValueStateSpec) String() string            { return proto.CompactTextString(m) }
+func (*ValueStateSpec) ProtoMessage()               {}
+func (*ValueStateSpec) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{8} }
+
+func (m *ValueStateSpec) GetCoderId() string {
+	if m != nil {
+		return m.CoderId
+	}
+	return ""
+}
+
+type BagStateSpec struct {
+	ElementCoderId string `protobuf:"bytes,1,opt,name=element_coder_id,json=elementCoderId" json:"element_coder_id,omitempty"`
+}
+
+func (m *BagStateSpec) Reset()                    { *m = BagStateSpec{} }
+func (m *BagStateSpec) String() string            { return proto.CompactTextString(m) }
+func (*BagStateSpec) ProtoMessage()               {}
+func (*BagStateSpec) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{9} }
+
+func (m *BagStateSpec) GetElementCoderId() string {
+	if m != nil {
+		return m.ElementCoderId
+	}
+	return ""
+}
+
+type CombiningStateSpec struct {
+	AccumulatorCoderId string           `protobuf:"bytes,1,opt,name=accumulator_coder_id,json=accumulatorCoderId" json:"accumulator_coder_id,omitempty"`
+	CombineFn          *SdkFunctionSpec `protobuf:"bytes,2,opt,name=combine_fn,json=combineFn" json:"combine_fn,omitempty"`
+}
+
+func (m *CombiningStateSpec) Reset()                    { *m = CombiningStateSpec{} }
+func (m *CombiningStateSpec) String() string            { return proto.CompactTextString(m) }
+func (*CombiningStateSpec) ProtoMessage()               {}
+func (*CombiningStateSpec) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{10} }
+
+func (m *CombiningStateSpec) GetAccumulatorCoderId() string {
+	if m != nil {
+		return m.AccumulatorCoderId
+	}
+	return ""
+}
+
+func (m *CombiningStateSpec) GetCombineFn() *SdkFunctionSpec {
+	if m != nil {
+		return m.CombineFn
+	}
+	return nil
+}
+
+type MapStateSpec struct {
+	KeyCoderId   string `protobuf:"bytes,1,opt,name=key_coder_id,json=keyCoderId" json:"key_coder_id,omitempty"`
+	ValueCoderId string `protobuf:"bytes,2,opt,name=value_coder_id,json=valueCoderId" json:"value_coder_id,omitempty"`
+}
+
+func (m *MapStateSpec) Reset()                    { *m = MapStateSpec{} }
+func (m *MapStateSpec) String() string            { return proto.CompactTextString(m) }
+func (*MapStateSpec) ProtoMessage()               {}
+func (*MapStateSpec) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{11} }
+
+func (m *MapStateSpec) GetKeyCoderId() string {
+	if m != nil {
+		return m.KeyCoderId
+	}
+	return ""
+}
+
+func (m *MapStateSpec) GetValueCoderId() string {
+	if m != nil {
+		return m.ValueCoderId
+	}
+	return ""
+}
+
+type SetStateSpec struct {
+	ElementCoderId string `protobuf:"bytes,1,opt,name=element_coder_id,json=elementCoderId" json:"element_coder_id,omitempty"`
+}
+
+func (m *SetStateSpec) Reset()                    { *m = SetStateSpec{} }
+func (m *SetStateSpec) String() string            { return proto.CompactTextString(m) }
+func (*SetStateSpec) ProtoMessage()               {}
+func (*SetStateSpec) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{12} }
+
+func (m *SetStateSpec) GetElementCoderId() string {
+	if m != nil {
+		return m.ElementCoderId
+	}
+	return ""
+}
+
+type TimerSpec struct {
+	TimeDomain TimeDomain_Enum `protobuf:"varint,1,opt,name=time_domain,json=timeDomain,enum=org.apache.beam.model.pipeline.v1.TimeDomain_Enum" json:"time_domain,omitempty"`
+}
+
+func (m *TimerSpec) Reset()                    { *m = TimerSpec{} }
+func (m *TimerSpec) String() string            { return proto.CompactTextString(m) }
+func (*TimerSpec) ProtoMessage()               {}
+func (*TimerSpec) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{13} }
+
+func (m *TimerSpec) GetTimeDomain() TimeDomain_Enum {
+	if m != nil {
+		return m.TimeDomain
+	}
+	return TimeDomain_UNSPECIFIED
+}
+
+type IsBounded struct {
+}
+
+func (m *IsBounded) Reset()                    { *m = IsBounded{} }
+func (m *IsBounded) String() string            { return proto.CompactTextString(m) }
+func (*IsBounded) ProtoMessage()               {}
+func (*IsBounded) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{14} }
+
+// The payload for the primitive Read transform.
+type ReadPayload struct {
+	// (Required) The SdkFunctionSpec of the source for this Read.
+	Source *SdkFunctionSpec `protobuf:"bytes,1,opt,name=source" json:"source,omitempty"`
+	// (Required) Whether the source is bounded or unbounded
+	IsBounded IsBounded_Enum `protobuf:"varint,2,opt,name=is_bounded,json=isBounded,enum=org.apache.beam.model.pipeline.v1.IsBounded_Enum" json:"is_bounded,omitempty"`
+}
+
+func (m *ReadPayload) Reset()                    { *m = ReadPayload{} }
+func (m *ReadPayload) String() string            { return proto.CompactTextString(m) }
+func (*ReadPayload) ProtoMessage()               {}
+func (*ReadPayload) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{15} }
+
+func (m *ReadPayload) GetSource() *SdkFunctionSpec {
+	if m != nil {
+		return m.Source
+	}
+	return nil
+}
+
+func (m *ReadPayload) GetIsBounded() IsBounded_Enum {
+	if m != nil {
+		return m.IsBounded
+	}
+	return IsBounded_UNSPECIFIED
+}
+
+// The payload for the WindowInto transform.
+type WindowIntoPayload struct {
+	// (Required) The SdkFunctionSpec of the WindowFn.
+	WindowFn *SdkFunctionSpec `protobuf:"bytes,1,opt,name=window_fn,json=windowFn" json:"window_fn,omitempty"`
+}
+
+func (m *WindowIntoPayload) Reset()                    { *m = WindowIntoPayload{} }
+func (m *WindowIntoPayload) String() string            { return proto.CompactTextString(m) }
+func (*WindowIntoPayload) ProtoMessage()               {}
+func (*WindowIntoPayload) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{16} }
+
+func (m *WindowIntoPayload) GetWindowFn() *SdkFunctionSpec {
+	if m != nil {
+		return m.WindowFn
+	}
+	return nil
+}
+
+// The payload for the special-but-not-primitive Combine transform.
+type CombinePayload struct {
+	// (Required) The SdkFunctionSpec of the CombineFn.
+	CombineFn *SdkFunctionSpec `protobuf:"bytes,1,opt,name=combine_fn,json=combineFn" json:"combine_fn,omitempty"`
+	// (Required) A reference to the Coder to use for accumulators of the CombineFn
+	AccumulatorCoderId string `protobuf:"bytes,2,opt,name=accumulator_coder_id,json=accumulatorCoderId" json:"accumulator_coder_id,omitempty"`
+	// (Required) Additional pieces of context the DoFn may require that
+	// are not otherwise represented in the payload.
+	// (may force runners to execute the ParDo differently)
+	Parameters []*Parameter `protobuf:"bytes,3,rep,name=parameters" json:"parameters,omitempty"`
+	// (Optional) A mapping of local input names to side inputs, describing
+	// the expected access pattern.
+	SideInputs map[string]*SideInput `protobuf:"bytes,4,rep,name=side_inputs,json=sideInputs" json:"side_inputs,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"`
+}
+
+func (m *CombinePayload) Reset()                    { *m = CombinePayload{} }
+func (m *CombinePayload) String() string            { return proto.CompactTextString(m) }
+func (*CombinePayload) ProtoMessage()               {}
+func (*CombinePayload) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{17} }
+
+func (m *CombinePayload) GetCombineFn() *SdkFunctionSpec {
+	if m != nil {
+		return m.CombineFn
+	}
+	return nil
+}
+
+func (m *CombinePayload) GetAccumulatorCoderId() string {
+	if m != nil {
+		return m.AccumulatorCoderId
+	}
+	return ""
+}
+
+func (m *CombinePayload) GetParameters() []*Parameter {
+	if m != nil {
+		return m.Parameters
+	}
+	return nil
+}
+
+func (m *CombinePayload) GetSideInputs() map[string]*SideInput {
+	if m != nil {
+		return m.SideInputs
+	}
+	return nil
+}
+
+// The payload for the test-only primitive TestStream
+type TestStreamPayload struct {
+	// (Required) the coder for elements in the TestStream events
+	CoderId string                     `protobuf:"bytes,1,opt,name=coder_id,json=coderId" json:"coder_id,omitempty"`
+	Events  []*TestStreamPayload_Event `protobuf:"bytes,2,rep,name=events" json:"events,omitempty"`
+}
+
+func (m *TestStreamPayload) Reset()                    { *m = TestStreamPayload{} }
+func (m *TestStreamPayload) String() string            { return proto.CompactTextString(m) }
+func (*TestStreamPayload) ProtoMessage()               {}
+func (*TestStreamPayload) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{18} }
+
+func (m *TestStreamPayload) GetCoderId() string {
+	if m != nil {
+		return m.CoderId
+	}
+	return ""
+}
+
+func (m *TestStreamPayload) GetEvents() []*TestStreamPayload_Event {
+	if m != nil {
+		return m.Events
+	}
+	return nil
+}
+
+type TestStreamPayload_Event struct {
+	// Types that are valid to be assigned to Event:
+	//	*TestStreamPayload_Event_WatermarkEvent
+	//	*TestStreamPayload_Event_ProcessingTimeEvent
+	//	*TestStreamPayload_Event_ElementEvent
+	Event isTestStreamPayload_Event_Event `protobuf_oneof:"event"`
+}
+
+func (m *TestStreamPayload_Event) Reset()                    { *m = TestStreamPayload_Event{} }
+func (m *TestStreamPayload_Event) String() string            { return proto.CompactTextString(m) }
+func (*TestStreamPayload_Event) ProtoMessage()               {}
+func (*TestStreamPayload_Event) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{18, 0} }
+
+type isTestStreamPayload_Event_Event interface {
+	isTestStreamPayload_Event_Event()
+}
+
+type TestStreamPayload_Event_WatermarkEvent struct {
+	WatermarkEvent *TestStreamPayload_Event_AdvanceWatermark `protobuf:"bytes,1,opt,name=watermark_event,json=watermarkEvent,oneof"`
+}
+type TestStreamPayload_Event_ProcessingTimeEvent struct {
+	ProcessingTimeEvent *TestStreamPayload_Event_AdvanceProcessingTime `protobuf:"bytes,2,opt,name=processing_time_event,json=processingTimeEvent,oneof"`
+}
+type TestStreamPayload_Event_ElementEvent struct {
+	ElementEvent *TestStreamPayload_Event_AddElements `protobuf:"bytes,3,opt,name=element_event,json=elementEvent,oneof"`
+}
+
+func (*TestStreamPayload_Event_WatermarkEvent) isTestStreamPayload_Event_Event()      {}
+func (*TestStreamPayload_Event_ProcessingTimeEvent) isTestStreamPayload_Event_Event() {}
+func (*TestStreamPayload_Event_ElementEvent) isTestStreamPayload_Event_Event()        {}
+
+func (m *TestStreamPayload_Event) GetEvent() isTestStreamPayload_Event_Event {
+	if m != nil {
+		return m.Event
+	}
+	return nil
+}
+
+func (m *TestStreamPayload_Event) GetWatermarkEvent() *TestStreamPayload_Event_AdvanceWatermark {
+	if x, ok := m.GetEvent().(*TestStreamPayload_Event_WatermarkEvent); ok {
+		return x.WatermarkEvent
+	}
+	return nil
+}
+
+func (m *TestStreamPayload_Event) GetProcessingTimeEvent() *TestStreamPayload_Event_AdvanceProcessingTime {
+	if x, ok := m.GetEvent().(*TestStreamPayload_Event_ProcessingTimeEvent); ok {
+		return x.ProcessingTimeEvent
+	}
+	return nil
+}
+
+func (m *TestStreamPayload_Event) GetElementEvent() *TestStreamPayload_Event_AddElements {
+	if x, ok := m.GetEvent().(*TestStreamPayload_Event_ElementEvent); ok {
+		return x.ElementEvent
+	}
+	return nil
+}
+
+// XXX_OneofFuncs is for the internal use of the proto package.
+func (*TestStreamPayload_Event) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) {
+	return _TestStreamPayload_Event_OneofMarshaler, _TestStreamPayload_Event_OneofUnmarshaler, _TestStreamPayload_Event_OneofSizer, []interface{}{
+		(*TestStreamPayload_Event_WatermarkEvent)(nil),
+		(*TestStreamPayload_Event_ProcessingTimeEvent)(nil),
+		(*TestStreamPayload_Event_ElementEvent)(nil),
+	}
+}
+
+func _TestStreamPayload_Event_OneofMarshaler(msg proto.Message, b *proto.Buffer) error {
+	m := msg.(*TestStreamPayload_Event)
+	// event
+	switch x := m.Event.(type) {
+	case *TestStreamPayload_Event_WatermarkEvent:
+		b.EncodeVarint(1<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.WatermarkEvent); err != nil {
+			return err
+		}
+	case *TestStreamPayload_Event_ProcessingTimeEvent:
+		b.EncodeVarint(2<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.ProcessingTimeEvent); err != nil {
+			return err
+		}
+	case *TestStreamPayload_Event_ElementEvent:
+		b.EncodeVarint(3<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.ElementEvent); err != nil {
+			return err
+		}
+	case nil:
+	default:
+		return fmt.Errorf("TestStreamPayload_Event.Event has unexpected type %T", x)
+	}
+	return nil
+}
+
+func _TestStreamPayload_Event_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) {
+	m := msg.(*TestStreamPayload_Event)
+	switch tag {
+	case 1: // event.watermark_event
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(TestStreamPayload_Event_AdvanceWatermark)
+		err := b.DecodeMessage(msg)
+		m.Event = &TestStreamPayload_Event_WatermarkEvent{msg}
+		return true, err
+	case 2: // event.processing_time_event
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(TestStreamPayload_Event_AdvanceProcessingTime)
+		err := b.DecodeMessage(msg)
+		m.Event = &TestStreamPayload_Event_ProcessingTimeEvent{msg}
+		return true, err
+	case 3: // event.element_event
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(TestStreamPayload_Event_AddElements)
+		err := b.DecodeMessage(msg)
+		m.Event = &TestStreamPayload_Event_ElementEvent{msg}
+		return true, err
+	default:
+		return false, nil
+	}
+}
+
+func _TestStreamPayload_Event_OneofSizer(msg proto.Message) (n int) {
+	m := msg.(*TestStreamPayload_Event)
+	// event
+	switch x := m.Event.(type) {
+	case *TestStreamPayload_Event_WatermarkEvent:
+		s := proto.Size(x.WatermarkEvent)
+		n += proto.SizeVarint(1<<3 | proto.WireBytes)
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *TestStreamPayload_Event_ProcessingTimeEvent:
+		s := proto.Size(x.ProcessingTimeEvent)
+		n += proto.SizeVarint(2<<3 | proto.WireBytes)
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *TestStreamPayload_Event_ElementEvent:
+		s := proto.Size(x.ElementEvent)
+		n += proto.SizeVarint(3<<3 | proto.WireBytes)
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case nil:
+	default:
+		panic(fmt.Sprintf("proto: unexpected type %T in oneof", x))
+	}
+	return n
+}
+
+type TestStreamPayload_Event_AdvanceWatermark struct {
+	NewWatermark int64 `protobuf:"varint,1,opt,name=new_watermark,json=newWatermark" json:"new_watermark,omitempty"`
+}
+
+func (m *TestStreamPayload_Event_AdvanceWatermark) Reset() {
+	*m = TestStreamPayload_Event_AdvanceWatermark{}
+}
+func (m *TestStreamPayload_Event_AdvanceWatermark) String() string { return proto.CompactTextString(m) }
+func (*TestStreamPayload_Event_AdvanceWatermark) ProtoMessage()    {}
+func (*TestStreamPayload_Event_AdvanceWatermark) Descriptor() ([]byte, []int) {
+	return fileDescriptor0, []int{18, 0, 0}
+}
+
+func (m *TestStreamPayload_Event_AdvanceWatermark) GetNewWatermark() int64 {
+	if m != nil {
+		return m.NewWatermark
+	}
+	return 0
+}
+
+type TestStreamPayload_Event_AdvanceProcessingTime struct {
+	AdvanceDuration int64 `protobuf:"varint,1,opt,name=advance_duration,json=advanceDuration" json:"advance_duration,omitempty"`
+}
+
+func (m *TestStreamPayload_Event_AdvanceProcessingTime) Reset() {
+	*m = TestStreamPayload_Event_AdvanceProcessingTime{}
+}
+func (m *TestStreamPayload_Event_AdvanceProcessingTime) String() string {
+	return proto.CompactTextString(m)
+}
+func (*TestStreamPayload_Event_AdvanceProcessingTime) ProtoMessage() {}
+func (*TestStreamPayload_Event_AdvanceProcessingTime) Descriptor() ([]byte, []int) {
+	return fileDescriptor0, []int{18, 0, 1}
+}
+
+func (m *TestStreamPayload_Event_AdvanceProcessingTime) GetAdvanceDuration() int64 {
+	if m != nil {
+		return m.AdvanceDuration
+	}
+	return 0
+}
+
+type TestStreamPayload_Event_AddElements struct {
+	Elements []*TestStreamPayload_TimestampedElement `protobuf:"bytes,1,rep,name=elements" json:"elements,omitempty"`
+}
+
+func (m *TestStreamPayload_Event_AddElements) Reset()         { *m = TestStreamPayload_Event_AddElements{} }
+func (m *TestStreamPayload_Event_AddElements) String() string { return proto.CompactTextString(m) }
+func (*TestStreamPayload_Event_AddElements) ProtoMessage()    {}
+func (*TestStreamPayload_Event_AddElements) Descriptor() ([]byte, []int) {
+	return fileDescriptor0, []int{18, 0, 2}
+}
+
+func (m *TestStreamPayload_Event_AddElements) GetElements() []*TestStreamPayload_TimestampedElement {
+	if m != nil {
+		return m.Elements
+	}
+	return nil
+}
+
+type TestStreamPayload_TimestampedElement struct {
+	EncodedElement []byte `protobuf:"bytes,1,opt,name=encoded_element,json=encodedElement,proto3" json:"encoded_element,omitempty"`
+	Timestamp      int64  `protobuf:"varint,2,opt,name=timestamp" json:"timestamp,omitempty"`
+}
+
+func (m *TestStreamPayload_TimestampedElement) Reset()         { *m = TestStreamPayload_TimestampedElement{} }
+func (m *TestStreamPayload_TimestampedElement) String() string { return proto.CompactTextString(m) }
+func (*TestStreamPayload_TimestampedElement) ProtoMessage()    {}
+func (*TestStreamPayload_TimestampedElement) Descriptor() ([]byte, []int) {
+	return fileDescriptor0, []int{18, 1}
+}
+
+func (m *TestStreamPayload_TimestampedElement) GetEncodedElement() []byte {
+	if m != nil {
+		return m.EncodedElement
+	}
+	return nil
+}
+
+func (m *TestStreamPayload_TimestampedElement) GetTimestamp() int64 {
+	if m != nil {
+		return m.Timestamp
+	}
+	return 0
+}
+
+// The payload for the special-but-not-primitive WriteFiles transform.
+type WriteFilesPayload struct {
+	// (Required) The SdkFunctionSpec of the FileBasedSink.
+	Sink *SdkFunctionSpec `protobuf:"bytes,1,opt,name=sink" json:"sink,omitempty"`
+	// (Required) The format function.
+	FormatFunction           *SdkFunctionSpec      `protobuf:"bytes,2,opt,name=format_function,json=formatFunction" json:"format_function,omitempty"`
+	WindowedWrites           bool                  `protobuf:"varint,3,opt,name=windowed_writes,json=windowedWrites" json:"windowed_writes,omitempty"`
+	RunnerDeterminedSharding bool                  `protobuf:"varint,4,opt,name=runner_determined_sharding,json=runnerDeterminedSharding" json:"runner_determined_sharding,omitempty"`
+	SideInputs               map[string]*SideInput `protobuf:"bytes,5,rep,name=side_inputs,json=sideInputs" json:"side_inputs,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"`
+}
+
+func (m *WriteFilesPayload) Reset()                    { *m = WriteFilesPayload{} }
+func (m *WriteFilesPayload) String() string            { return proto.CompactTextString(m) }
+func (*WriteFilesPayload) ProtoMessage()               {}
+func (*WriteFilesPayload) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{19} }
+
+func (m *WriteFilesPayload) GetSink() *SdkFunctionSpec {
+	if m != nil {
+		return m.Sink
+	}
+	return nil
+}
+
+func (m *WriteFilesPayload) GetFormatFunction() *SdkFunctionSpec {
+	if m != nil {
+		return m.FormatFunction
+	}
+	return nil
+}
+
+func (m *WriteFilesPayload) GetWindowedWrites() bool {
+	if m != nil {
+		return m.WindowedWrites
+	}
+	return false
+}
+
+func (m *WriteFilesPayload) GetRunnerDeterminedSharding() bool {
+	if m != nil {
+		return m.RunnerDeterminedSharding
+	}
+	return false
+}
+
+func (m *WriteFilesPayload) GetSideInputs() map[string]*SideInput {
+	if m != nil {
+		return m.SideInputs
+	}
+	return nil
+}
+
+// A coder, the binary format for serialization and deserialization of data in
+// a pipeline.
+type Coder struct {
+	// (Required) A specification for the coder, as a URN plus parameters. This
+	// may be a cross-language agreed-upon format, or it may be a "custom coder"
+	// that can only be used by a particular SDK. It does not include component
+	// coders, as it is beneficial for these to be comprehensible to a runner
+	// regardless of whether the binary format is agree-upon.
+	Spec *SdkFunctionSpec `protobuf:"bytes,1,opt,name=spec" json:"spec,omitempty"`
+	// (Optional) If this coder is parametric, such as ListCoder(VarIntCoder),
+	// this is a list of the components. In order for encodings to be identical,
+	// the SdkFunctionSpec and all components must be identical, recursively.
+	ComponentCoderIds []string `protobuf:"bytes,2,rep,name=component_coder_ids,json=componentCoderIds" json:"component_coder_ids,omitempty"`
+}
+
+func (m *Coder) Reset()                    { *m = Coder{} }
+func (m *Coder) String() string            { return proto.CompactTextString(m) }
+func (*Coder) ProtoMessage()               {}
+func (*Coder) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{20} }
+
+func (m *Coder) GetSpec() *SdkFunctionSpec {
+	if m != nil {
+		return m.Spec
+	}
+	return nil
+}
+
+func (m *Coder) GetComponentCoderIds() []string {
+	if m != nil {
+		return m.ComponentCoderIds
+	}
+	return nil
+}
+
+// A windowing strategy describes the window function, triggering, allowed
+// lateness, and accumulation mode for a PCollection.
+//
+// TODO: consider inlining field on PCollection
+type WindowingStrategy struct {
+	// (Required) The SdkFunctionSpec of the UDF that assigns windows,
+	// merges windows, and shifts timestamps before they are
+	// combined according to the OutputTime.
+	WindowFn *SdkFunctionSpec `protobuf:"bytes,1,opt,name=window_fn,json=windowFn" json:"window_fn,omitempty"`
+	// (Required) Whether or not the window fn is merging.
+	//
+	// This knowledge is required for many optimizations.
+	MergeStatus MergeStatus_Enum `protobuf:"varint,2,opt,name=merge_status,json=mergeStatus,enum=org.apache.beam.model.pipeline.v1.MergeStatus_Enum" json:"merge_status,omitempty"`
+	// (Required) The coder for the windows of this PCollection.
+	WindowCoderId string `protobuf:"bytes,3,opt,name=window_coder_id,json=windowCoderId" json:"window_coder_id,omitempty"`
+	// (Required) The trigger to use when grouping this PCollection.
+	Trigger *Trigger `protobuf:"bytes,4,opt,name=trigger" json:"trigger,omitempty"`
+	// (Required) The accumulation mode indicates whether new panes are a full
+	// replacement for prior panes or whether they are deltas to be combined
+	// with other panes (the combine should correspond to whatever the upstream
+	// grouping transform is).
+	AccumulationMode AccumulationMode_Enum `protobuf:"varint,5,opt,name=accumulation_mode,json=accumulationMode,enum=org.apache.beam.model.pipeline.v1.AccumulationMode_Enum" json:"accumulation_mode,omitempty"`
+	// (Required) The OutputTime specifies, for a grouping transform, how to
+	// compute the aggregate timestamp. The window_fn will first possibly shift
+	// it later, then the OutputTime takes the max, min, or ignores it and takes
+	// the end of window.
+	//
+	// This is actually only for input to grouping transforms, but since they
+	// may be introduced in runner-specific ways, it is carried along with the
+	// windowing strategy.
+	OutputTime OutputTime_Enum `protobuf:"varint,6,opt,name=output_time,json=outputTime,enum=org.apache.beam.model.pipeline.v1.OutputTime_Enum" json:"output_time,omitempty"`
+	// (Required) Indicate when output should be omitted upon window expiration.
+	ClosingBehavior ClosingBehavior_Enum `protobuf:"varint,7,opt,name=closing_behavior,json=closingBehavior,enum=org.apache.beam.model.pipeline.v1.ClosingBehavior_Enum" json:"closing_behavior,omitempty"`
+	// (Required) The duration, in milliseconds, beyond the end of a window at
+	// which the window becomes droppable.
+	AllowedLateness int64 `protobuf:"varint,8,opt,name=allowed_lateness,json=allowedLateness" json:"allowed_lateness,omitempty"`
+	// (Required) Indicate whether empty on-time panes should be omitted.
+	OnTimeBehavior OnTimeBehavior_Enum `protobuf:"varint,9,opt,name=OnTimeBehavior,enum=org.apache.beam.model.pipeline.v1.OnTimeBehavior_Enum" json:"OnTimeBehavior,omitempty"`
+	// (Required) Whether or not the window fn assigns inputs to exactly one window
+	//
+	// This knowledge is required for some optimizations
+	AssignsToOneWindow bool `protobuf:"varint,10,opt,name=assigns_to_one_window,json=assignsToOneWindow" json:"assigns_to_one_window,omitempty"`
+}
+
+func (m *WindowingStrategy) Reset()                    { *m = WindowingStrategy{} }
+func (m *WindowingStrategy) String() string            { return proto.CompactTextString(m) }
+func (*WindowingStrategy) ProtoMessage()               {}
+func (*WindowingStrategy) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{21} }
+
+func (m *WindowingStrategy) GetWindowFn() *SdkFunctionSpec {
+	if m != nil {
+		return m.WindowFn
+	}
+	return nil
+}
+
+func (m *WindowingStrategy) GetMergeStatus() MergeStatus_Enum {
+	if m != nil {
+		return m.MergeStatus
+	}
+	return MergeStatus_UNSPECIFIED
+}
+
+func (m *WindowingStrategy) GetWindowCoderId() string {
+	if m != nil {
+		return m.WindowCoderId
+	}
+	return ""
+}
+
+func (m *WindowingStrategy) GetTrigger() *Trigger {
+	if m != nil {
+		return m.Trigger
+	}
+	return nil
+}
+
+func (m *WindowingStrategy) GetAccumulationMode() AccumulationMode_Enum {
+	if m != nil {
+		return m.AccumulationMode
+	}
+	return AccumulationMode_UNSPECIFIED
+}
+
+func (m *WindowingStrategy) GetOutputTime() OutputTime_Enum {
+	if m != nil {
+		return m.OutputTime
+	}
+	return OutputTime_UNSPECIFIED
+}
+
+func (m *WindowingStrategy) GetClosingBehavior() ClosingBehavior_Enum {
+	if m != nil {
+		return m.ClosingBehavior
+	}
+	return ClosingBehavior_UNSPECIFIED
+}
+
+func (m *WindowingStrategy) GetAllowedLateness() int64 {
+	if m != nil {
+		return m.AllowedLateness
+	}
+	return 0
+}
+
+func (m *WindowingStrategy) GetOnTimeBehavior() OnTimeBehavior_Enum {
+	if m != nil {
+		return m.OnTimeBehavior
+	}
+	return OnTimeBehavior_UNSPECIFIED
+}
+
+func (m *WindowingStrategy) GetAssignsToOneWindow() bool {
+	if m != nil {
+		return m.AssignsToOneWindow
+	}
+	return false
+}
+
+// Whether or not a PCollection's WindowFn is non-merging, merging, or
+// merging-but-already-merged, in which case a subsequent GroupByKey is almost
+// always going to do something the user does not want
+type MergeStatus struct {
+}
+
+func (m *MergeStatus) Reset()                    { *m = MergeStatus{} }
+func (m *MergeStatus) String() string            { return proto.CompactTextString(m) }
+func (*MergeStatus) ProtoMessage()               {}
+func (*MergeStatus) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{22} }
+
+// Whether or not subsequent outputs of aggregations should be entire
+// replacement values or just the aggregation of inputs received since
+// the prior output.
+type AccumulationMode struct {
+}
+
+func (m *AccumulationMode) Reset()                    { *m = AccumulationMode{} }
+func (m *AccumulationMode) String() string            { return proto.CompactTextString(m) }
+func (*AccumulationMode) ProtoMessage()               {}
+func (*AccumulationMode) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{23} }
+
+// Controls whether or not an aggregating transform should output data
+// when a window expires.
+type ClosingBehavior struct {
+}
+
+func (m *ClosingBehavior) Reset()                    { *m = ClosingBehavior{} }
+func (m *ClosingBehavior) String() string            { return proto.CompactTextString(m) }
+func (*ClosingBehavior) ProtoMessage()               {}
+func (*ClosingBehavior) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{24} }
+
+// Controls whether or not an aggregating transform should output data
+// when an on-time pane is empty.
+type OnTimeBehavior struct {
+}
+
+func (m *OnTimeBehavior) Reset()                    { *m = OnTimeBehavior{} }
+func (m *OnTimeBehavior) String() string            { return proto.CompactTextString(m) }
+func (*OnTimeBehavior) ProtoMessage()               {}
+func (*OnTimeBehavior) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{25} }
+
+// When a number of windowed, timestamped inputs are aggregated, the timestamp
+// for the resulting output.
+type OutputTime struct {
+}
+
+func (m *OutputTime) Reset()                    { *m = OutputTime{} }
+func (m *OutputTime) String() string            { return proto.CompactTextString(m) }
+func (*OutputTime) ProtoMessage()               {}
+func (*OutputTime) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{26} }
+
+// The different time domains in the Beam model.
+type TimeDomain struct {
+}
+
+func (m *TimeDomain) Reset()                    { *m = TimeDomain{} }
+func (m *TimeDomain) String() string            { return proto.CompactTextString(m) }
+func (*TimeDomain) ProtoMessage()               {}
+func (*TimeDomain) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{27} }
+
+// A small DSL for expressing when to emit new aggregations
+// from a GroupByKey or CombinePerKey
+//
+// A trigger is described in terms of when it is _ready_ to permit output.
+type Trigger struct {
+	// The full disjoint union of possible triggers.
+	//
+	// Types that are valid to be assigned to Trigger:
+	//	*Trigger_AfterAll_
+	//	*Trigger_AfterAny_
+	//	*Trigger_AfterEach_
+	//	*Trigger_AfterEndOfWindow_
+	//	*Trigger_AfterProcessingTime_
+	//	*Trigger_AfterSynchronizedProcessingTime_
+	//	*Trigger_Always_
+	//	*Trigger_Default_
+	//	*Trigger_ElementCount_
+	//	*Trigger_Never_
+	//	*Trigger_OrFinally_
+	//	*Trigger_Repeat_
+	Trigger isTrigger_Trigger `protobuf_oneof:"trigger"`
+}
+
+func (m *Trigger) Reset()                    { *m = Trigger{} }
+func (m *Trigger) String() string            { return proto.CompactTextString(m) }
+func (*Trigger) ProtoMessage()               {}
+func (*Trigger) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{28} }
+
+type isTrigger_Trigger interface {
+	isTrigger_Trigger()
+}
+
+type Trigger_AfterAll_ struct {
+	AfterAll *Trigger_AfterAll `protobuf:"bytes,1,opt,name=after_all,json=afterAll,oneof"`
+}
+type Trigger_AfterAny_ struct {
+	AfterAny *Trigger_AfterAny `protobuf:"bytes,2,opt,name=after_any,json=afterAny,oneof"`
+}
+type Trigger_AfterEach_ struct {
+	AfterEach *Trigger_AfterEach `protobuf:"bytes,3,opt,name=after_each,json=afterEach,oneof"`
+}
+type Trigger_AfterEndOfWindow_ struct {
+	AfterEndOfWindow *Trigger_AfterEndOfWindow `protobuf:"bytes,4,opt,name=after_end_of_window,json=afterEndOfWindow,oneof"`
+}
+type Trigger_AfterProcessingTime_ struct {
+	AfterProcessingTime *Trigger_AfterProcessingTime `protobuf:"bytes,5,opt,name=after_processing_time,json=afterProcessingTime,oneof"`
+}
+type Trigger_AfterSynchronizedProcessingTime_ struct {
+	AfterSynchronizedProcessingTime *Trigger_AfterSynchronizedProcessingTime `protobuf:"bytes,6,opt,name=after_synchronized_processing_time,json=afterSynchronizedProcessingTime,oneof"`
+}
+type Trigger_Always_ struct {
+	Always *Trigger_Always `protobuf:"bytes,12,opt,name=always,oneof"`
+}
+type Trigger_Default_ struct {
+	Default *Trigger_Default `protobuf:"bytes,7,opt,name=default,oneof"`
+}
+type Trigger_ElementCount_ struct {
+	ElementCount *Trigger_ElementCount `protobuf:"bytes,8,opt,name=element_count,json=elementCount,oneof"`
+}
+type Trigger_Never_ struct {
+	Never *Trigger_Never `protobuf:"bytes,9,opt,name=never,oneof"`
+}
+type Trigger_OrFinally_ struct {
+	OrFinally *Trigger_OrFinally `protobuf:"bytes,10,opt,name=or_finally,json=orFinally,oneof"`
+}
+type Trigger_Repeat_ struct {
+	Repeat *Trigger_Repeat `protobuf:"bytes,11,opt,name=repeat,oneof"`
+}
+
+func (*Trigger_AfterAll_) isTrigger_Trigger()                        {}
+func (*Trigger_AfterAny_) isTrigger_Trigger()                        {}
+func (*Trigger_AfterEach_) isTrigger_Trigger()                       {}
+func (*Trigger_AfterEndOfWindow_) isTrigger_Trigger()                {}
+func (*Trigger_AfterProcessingTime_) isTrigger_Trigger()             {}
+func (*Trigger_AfterSynchronizedProcessingTime_) isTrigger_Trigger() {}
+func (*Trigger_Always_) isTrigger_Trigger()                          {}
+func (*Trigger_Default_) isTrigger_Trigger()                         {}
+func (*Trigger_ElementCount_) isTrigger_Trigger()                    {}
+func (*Trigger_Never_) isTrigger_Trigger()                           {}
+func (*Trigger_OrFinally_) isTrigger_Trigger()                       {}
+func (*Trigger_Repeat_) isTrigger_Trigger()                          {}
+
+func (m *Trigger) GetTrigger() isTrigger_Trigger {
+	if m != nil {
+		return m.Trigger
+	}
+	return nil
+}
+
+func (m *Trigger) GetAfterAll() *Trigger_AfterAll {
+	if x, ok := m.GetTrigger().(*Trigger_AfterAll_); ok {
+		return x.AfterAll
+	}
+	return nil
+}
+
+func (m *Trigger) GetAfterAny() *Trigger_AfterAny {
+	if x, ok := m.GetTrigger().(*Trigger_AfterAny_); ok {
+		return x.AfterAny
+	}
+	return nil
+}
+
+func (m *Trigger) GetAfterEach() *Trigger_AfterEach {
+	if x, ok := m.GetTrigger().(*Trigger_AfterEach_); ok {
+		return x.AfterEach
+	}
+	return nil
+}
+
+func (m *Trigger) GetAfterEndOfWindow() *Trigger_AfterEndOfWindow {
+	if x, ok := m.GetTrigger().(*Trigger_AfterEndOfWindow_); ok {
+		return x.AfterEndOfWindow
+	}
+	return nil
+}
+
+func (m *Trigger) GetAfterProcessingTime() *Trigger_AfterProcessingTime {
+	if x, ok := m.GetTrigger().(*Trigger_AfterProcessingTime_); ok {
+		return x.AfterProcessingTime
+	}
+	return nil
+}
+
+func (m *Trigger) GetAfterSynchronizedProcessingTime() *Trigger_AfterSynchronizedProcessingTime {
+	if x, ok := m.GetTrigger().(*Trigger_AfterSynchronizedProcessingTime_); ok {
+		return x.AfterSynchronizedProcessingTime
+	}
+	return nil
+}
+
+func (m *Trigger) GetAlways() *Trigger_Always {
+	if x, ok := m.GetTrigger().(*Trigger_Always_); ok {
+		return x.Always
+	}
+	return nil
+}
+
+func (m *Trigger) GetDefault() *Trigger_Default {
+	if x, ok := m.GetTrigger().(*Trigger_Default_); ok {
+		return x.Default
+	}
+	return nil
+}
+
+func (m *Trigger) GetElementCount() *Trigger_ElementCount {
+	if x, ok := m.GetTrigger().(*Trigger_ElementCount_); ok {
+		return x.ElementCount
+	}
+	return nil
+}
+
+func (m *Trigger) GetNever() *Trigger_Never {
+	if x, ok := m.GetTrigger().(*Trigger_Never_); ok {
+		return x.Never
+	}
+	return nil
+}
+
+func (m *Trigger) GetOrFinally() *Trigger_OrFinally {
+	if x, ok := m.GetTrigger().(*Trigger_OrFinally_); ok {
+		return x.OrFinally
+	}
+	return nil
+}
+
+func (m *Trigger) GetRepeat() *Trigger_Repeat {
+	if x, ok := m.GetTrigger().(*Trigger_Repeat_); ok {
+		return x.Repeat
+	}
+	return nil
+}
+
+// XXX_OneofFuncs is for the internal use of the proto package.
+func (*Trigger) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) {
+	return _Trigger_OneofMarshaler, _Trigger_OneofUnmarshaler, _Trigger_OneofSizer, []interface{}{
+		(*Trigger_AfterAll_)(nil),
+		(*Trigger_AfterAny_)(nil),
+		(*Trigger_AfterEach_)(nil),
+		(*Trigger_AfterEndOfWindow_)(nil),
+		(*Trigger_AfterProcessingTime_)(nil),
+		(*Trigger_AfterSynchronizedProcessingTime_)(nil),
+		(*Trigger_Always_)(nil),
+		(*Trigger_Default_)(nil),
+		(*Trigger_ElementCount_)(nil),
+		(*Trigger_Never_)(nil),
+		(*Trigger_OrFinally_)(nil),
+		(*Trigger_Repeat_)(nil),
+	}
+}
+
+func _Trigger_OneofMarshaler(msg proto.Message, b *proto.Buffer) error {
+	m := msg.(*Trigger)
+	// trigger
+	switch x := m.Trigger.(type) {
+	case *Trigger_AfterAll_:
+		b.EncodeVarint(1<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.AfterAll); err != nil {
+			return err
+		}
+	case *Trigger_AfterAny_:
+		b.EncodeVarint(2<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.AfterAny); err != nil {
+			return err
+		}
+	case *Trigger_AfterEach_:
+		b.EncodeVarint(3<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.AfterEach); err != nil {
+			return err
+		}
+	case *Trigger_AfterEndOfWindow_:
+		b.EncodeVarint(4<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.AfterEndOfWindow); err != nil {
+			return err
+		}
+	case *Trigger_AfterProcessingTime_:
+		b.EncodeVarint(5<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.AfterProcessingTime); err != nil {
+			return err
+		}
+	case *Trigger_AfterSynchronizedProcessingTime_:
+		b.EncodeVarint(6<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.AfterSynchronizedProcessingTime); err != nil {
+			return err
+		}
+	case *Trigger_Always_:
+		b.EncodeVarint(12<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.Always); err != nil {
+			return err
+		}
+	case *Trigger_Default_:
+		b.EncodeVarint(7<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.Default); err != nil {
+			return err
+		}
+	case *Trigger_ElementCount_:
+		b.EncodeVarint(8<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.ElementCount); err != nil {
+			return err
+		}
+	case *Trigger_Never_:
+		b.EncodeVarint(9<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.Never); err != nil {
+			return err
+		}
+	case *Trigger_OrFinally_:
+		b.EncodeVarint(10<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.OrFinally); err != nil {
+			return err
+		}
+	case *Trigger_Repeat_:
+		b.EncodeVarint(11<<3 | proto.WireBytes)
+		if err := b.EncodeMessage(x.Repeat); err != nil {
+			return err
+		}
+	case nil:
+	default:
+		return fmt.Errorf("Trigger.Trigger has unexpected type %T", x)
+	}
+	return nil
+}
+
+func _Trigger_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) {
+	m := msg.(*Trigger)
+	switch tag {
+	case 1: // trigger.after_all
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(Trigger_AfterAll)
+		err := b.DecodeMessage(msg)
+		m.Trigger = &Trigger_AfterAll_{msg}
+		return true, err
+	case 2: // trigger.after_any
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(Trigger_AfterAny)
+		err := b.DecodeMessage(msg)
+		m.Trigger = &Trigger_AfterAny_{msg}
+		return true, err
+	case 3: // trigger.after_each
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(Trigger_AfterEach)
+		err := b.DecodeMessage(msg)
+		m.Trigger = &Trigger_AfterEach_{msg}
+		return true, err
+	case 4: // trigger.after_end_of_window
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(Trigger_AfterEndOfWindow)
+		err := b.DecodeMessage(msg)
+		m.Trigger = &Trigger_AfterEndOfWindow_{msg}
+		return true, err
+	case 5: // trigger.after_processing_time
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(Trigger_AfterProcessingTime)
+		err := b.DecodeMessage(msg)
+		m.Trigger = &Trigger_AfterProcessingTime_{msg}
+		return true, err
+	case 6: // trigger.after_synchronized_processing_time
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(Trigger_AfterSynchronizedProcessingTime)
+		err := b.DecodeMessage(msg)
+		m.Trigger = &Trigger_AfterSynchronizedProcessingTime_{msg}
+		return true, err
+	case 12: // trigger.always
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(Trigger_Always)
+		err := b.DecodeMessage(msg)
+		m.Trigger = &Trigger_Always_{msg}
+		return true, err
+	case 7: // trigger.default
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(Trigger_Default)
+		err := b.DecodeMessage(msg)
+		m.Trigger = &Trigger_Default_{msg}
+		return true, err
+	case 8: // trigger.element_count
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(Trigger_ElementCount)
+		err := b.DecodeMessage(msg)
+		m.Trigger = &Trigger_ElementCount_{msg}
+		return true, err
+	case 9: // trigger.never
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(Trigger_Never)
+		err := b.DecodeMessage(msg)
+		m.Trigger = &Trigger_Never_{msg}
+		return true, err
+	case 10: // trigger.or_finally
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(Trigger_OrFinally)
+		err := b.DecodeMessage(msg)
+		m.Trigger = &Trigger_OrFinally_{msg}
+		return true, err
+	case 11: // trigger.repeat
+		if wire != proto.WireBytes {
+			return true, proto.ErrInternalBadWireType
+		}
+		msg := new(Trigger_Repeat)
+		err := b.DecodeMessage(msg)
+		m.Trigger = &Trigger_Repeat_{msg}
+		return true, err
+	default:
+		return false, nil
+	}
+}
+
+func _Trigger_OneofSizer(msg proto.Message) (n int) {
+	m := msg.(*Trigger)
+	// trigger
+	switch x := m.Trigger.(type) {
+	case *Trigger_AfterAll_:
+		s := proto.Size(x.AfterAll)
+		n += proto.SizeVarint(1<<3 | proto.WireBytes)
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *Trigger_AfterAny_:
+		s := proto.Size(x.AfterAny)
+		n += proto.SizeVarint(2<<3 | proto.WireBytes)
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *Trigger_AfterEach_:
+		s := proto.Size(x.AfterEach)
+		n += proto.SizeVarint(3<<3 | proto.WireBytes)
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *Trigger_AfterEndOfWindow_:
+		s := proto.Size(x.AfterEndOfWindow)
+		n += proto.SizeVarint(4<<3 | proto.WireBytes)
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *Trigger_AfterProcessingTime_:
+		s := proto.Size(x.AfterProcessingTime)
+		n += proto.SizeVarint(5<<3 | proto.WireBytes)
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *Trigger_AfterSynchronizedProcessingTime_:
+		s := proto.Size(x.AfterSynchronizedProcessingTime)
+		n += proto.SizeVarint(6<<3 | proto.WireBytes)
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *Trigger_Always_:
+		s := proto.Size(x.Always)
+		n += proto.SizeVarint(12<<3 | proto.WireBytes)
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *Trigger_Default_:
+		s := proto.Size(x.Default)
+		n += proto.SizeVarint(7<<3 | proto.WireBytes)
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *Trigger_ElementCount_:
+		s := proto.Size(x.ElementCount)
+		n += proto.SizeVarint(8<<3 | proto.WireBytes)
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *Trigger_Never_:
+		s := proto.Size(x.Never)
+		n += proto.SizeVarint(9<<3 | proto.WireBytes)
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *Trigger_OrFinally_:
+		s := proto.Size(x.OrFinally)
+		n += proto.SizeVarint(10<<3 | proto.WireBytes)
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case *Trigger_Repeat_:
+		s := proto.Size(x.Repeat)
+		n += proto.SizeVarint(11<<3 | proto.WireBytes)
+		n += proto.SizeVarint(uint64(s))
+		n += s
+	case nil:
+	default:
+		panic(fmt.Sprintf("proto: unexpected type %T in oneof", x))
+	}
+	return n
+}
+
+// Ready when all subtriggers are ready.
+type Trigger_AfterAll struct {
+	Subtriggers []*Trigger `protobuf:"bytes,1,rep,name=subtriggers" json:"subtriggers,omitempty"`
+}
+
+func (m *Trigger_AfterAll) Reset()                    { *m = Trigger_AfterAll{} }
+func (m *Trigger_AfterAll) String() string            { return proto.CompactTextString(m) }
+func (*Trigger_AfterAll) ProtoMessage()               {}
+func (*Trigger_AfterAll) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{28, 0} }
+
+func (m *Trigger_AfterAll) GetSubtriggers() []*Trigger {
+	if m != nil {
+		return m.Subtriggers
+	}
+	return nil
+}
+
+// Ready when any subtrigger is ready.
+type Trigger_AfterAny struct {
+	Subtriggers []*Trigger `protobuf:"bytes,1,rep,name=subtriggers" json:"subtriggers,omitempty"`
+}
+
+func (m *Trigger_AfterAny) Reset()                    {

<TRUNCATED>