// Copyright 2022 Google LLC
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

syntax = "proto3";

package google.cloud.video.livestream.v1;

import "google/api/annotations.proto";
import "google/api/client.proto";
import "google/api/field_behavior.proto";
import "google/api/resource.proto";
import "google/cloud/video/livestream/v1/resources.proto";
import "google/longrunning/operations.proto";
import "google/protobuf/empty.proto";
import "google/protobuf/field_mask.proto";
import "google/protobuf/timestamp.proto";

option csharp_namespace = "Google.Cloud.Video.LiveStream.V1";
option go_package = "cloud.google.com/go/video/livestream/apiv1/livestreampb;livestreampb";
option java_multiple_files = true;
option java_outer_classname = "ServiceProto";
option java_package = "com.google.cloud.video.livestream.v1";
option php_namespace = "Google\\Cloud\\Video\\LiveStream\\V1";
option ruby_package = "Google::Cloud::Video::LiveStream::V1";
option (google.api.resource_definition) = {
  type: "secretmanager.googleapis.com/SecretVersion"
  pattern: "projects/{project}/secrets/{secret}/versions/{version}"
};

// Using Live Stream API, you can generate live streams in the various
// renditions and streaming formats. The streaming format include HTTP Live
// Streaming (HLS) and Dynamic Adaptive Streaming over HTTP (DASH). You can send
// a source stream in the various ways, including Real-Time Messaging
// Protocol (RTMP) and Secure Reliable Transport (SRT).
service LivestreamService {
  option (google.api.default_host) = "livestream.googleapis.com";
  option (google.api.oauth_scopes) =
      "https://www.googleapis.com/auth/cloud-platform";

  // Creates a channel with the provided unique ID in the specified
  // region.
  rpc CreateChannel(CreateChannelRequest)
      returns (google.longrunning.Operation) {
    option (google.api.http) = {
      post: "/v1/{parent=projects/*/locations/*}/channels"
      body: "channel"
    };
    option (google.api.method_signature) = "parent,channel,channel_id";
    option (google.longrunning.operation_info) = {
      response_type: "Channel"
      metadata_type: "OperationMetadata"
    };
  }

  // Returns a list of all channels in the specified region.
  rpc ListChannels(ListChannelsRequest) returns (ListChannelsResponse) {
    option (google.api.http) = {
      get: "/v1/{parent=projects/*/locations/*}/channels"
    };
    option (google.api.method_signature) = "parent";
  }

  // Returns the specified channel.
  rpc GetChannel(GetChannelRequest) returns (Channel) {
    option (google.api.http) = {
      get: "/v1/{name=projects/*/locations/*/channels/*}"
    };
    option (google.api.method_signature) = "name";
  }

  // Deletes the specified channel.
  rpc DeleteChannel(DeleteChannelRequest)
      returns (google.longrunning.Operation) {
    option (google.api.http) = {
      delete: "/v1/{name=projects/*/locations/*/channels/*}"
    };
    option (google.api.method_signature) = "name";
    option (google.longrunning.operation_info) = {
      response_type: "google.protobuf.Empty"
      metadata_type: "OperationMetadata"
    };
  }

  // Updates the specified channel.
  rpc UpdateChannel(UpdateChannelRequest)
      returns (google.longrunning.Operation) {
    option (google.api.http) = {
      patch: "/v1/{channel.name=projects/*/locations/*/channels/*}"
      body: "channel"
    };
    option (google.api.method_signature) = "channel,update_mask";
    option (google.longrunning.operation_info) = {
      response_type: "Channel"
      metadata_type: "OperationMetadata"
    };
  }

  // Starts the specified channel. Part of the video pipeline will be created
  // only when the StartChannel request is received by the server.
  rpc StartChannel(StartChannelRequest) returns (google.longrunning.Operation) {
    option (google.api.http) = {
      post: "/v1/{name=projects/*/locations/*/channels/*}:start"
      body: "*"
    };
    option (google.api.method_signature) = "name";
    option (google.longrunning.operation_info) = {
      response_type: "ChannelOperationResponse"
      metadata_type: "OperationMetadata"
    };
  }

  // Stops the specified channel. Part of the video pipeline will be released
  // when the StopChannel request is received by the server.
  rpc StopChannel(StopChannelRequest) returns (google.longrunning.Operation) {
    option (google.api.http) = {
      post: "/v1/{name=projects/*/locations/*/channels/*}:stop"
      body: "*"
    };
    option (google.api.method_signature) = "name";
    option (google.longrunning.operation_info) = {
      response_type: "ChannelOperationResponse"
      metadata_type: "OperationMetadata"
    };
  }

  // Creates an input with the provided unique ID in the specified region.
  rpc CreateInput(CreateInputRequest) returns (google.longrunning.Operation) {
    option (google.api.http) = {
      post: "/v1/{parent=projects/*/locations/*}/inputs"
      body: "input"
    };
    option (google.api.method_signature) = "parent,input,input_id";
    option (google.longrunning.operation_info) = {
      response_type: "Input"
      metadata_type: "OperationMetadata"
    };
  }

  // Returns a list of all inputs in the specified region.
  rpc ListInputs(ListInputsRequest) returns (ListInputsResponse) {
    option (google.api.http) = {
      get: "/v1/{parent=projects/*/locations/*}/inputs"
    };
    option (google.api.method_signature) = "parent";
  }

  // Returns the specified input.
  rpc GetInput(GetInputRequest) returns (Input) {
    option (google.api.http) = {
      get: "/v1/{name=projects/*/locations/*/inputs/*}"
    };
    option (google.api.method_signature) = "name";
  }

  // Deletes the specified input.
  rpc DeleteInput(DeleteInputRequest) returns (google.longrunning.Operation) {
    option (google.api.http) = {
      delete: "/v1/{name=projects/*/locations/*/inputs/*}"
    };
    option (google.api.method_signature) = "name";
    option (google.longrunning.operation_info) = {
      response_type: "google.protobuf.Empty"
      metadata_type: "OperationMetadata"
    };
  }

  // Updates the specified input.
  rpc UpdateInput(UpdateInputRequest) returns (google.longrunning.Operation) {
    option (google.api.http) = {
      patch: "/v1/{input.name=projects/*/locations/*/inputs/*}"
      body: "input"
    };
    option (google.api.method_signature) = "input,update_mask";
    option (google.longrunning.operation_info) = {
      response_type: "Input"
      metadata_type: "OperationMetadata"
    };
  }

  // Creates an event with the provided unique ID in the specified channel.
  rpc CreateEvent(CreateEventRequest) returns (Event) {
    option (google.api.http) = {
      post: "/v1/{parent=projects/*/locations/*/channels/*}/events"
      body: "event"
    };
    option (google.api.method_signature) = "parent,event,event_id";
  }

  // Returns a list of all events in the specified channel.
  rpc ListEvents(ListEventsRequest) returns (ListEventsResponse) {
    option (google.api.http) = {
      get: "/v1/{parent=projects/*/locations/*/channels/*}/events"
    };
    option (google.api.method_signature) = "parent";
  }

  // Returns the specified event.
  rpc GetEvent(GetEventRequest) returns (Event) {
    option (google.api.http) = {
      get: "/v1/{name=projects/*/locations/*/channels/*/events/*}"
    };
    option (google.api.method_signature) = "name";
  }

  // Deletes the specified event.
  rpc DeleteEvent(DeleteEventRequest) returns (google.protobuf.Empty) {
    option (google.api.http) = {
      delete: "/v1/{name=projects/*/locations/*/channels/*/events/*}"
    };
    option (google.api.method_signature) = "name";
  }
}

// Request message for "LivestreamService.CreateChannel".
message CreateChannelRequest {
  // Required. The parent location for the resource, in the form of:
  // `projects/{project}/locations/{location}`.
  string parent = 1 [
    (google.api.field_behavior) = REQUIRED,
    (google.api.resource_reference) = {
      child_type: "livestream.googleapis.com/Channel"
    }
  ];

  // Required. The channel resource to be created.
  Channel channel = 2 [(google.api.field_behavior) = REQUIRED];

  // Required. The ID of the channel resource to be created.
  // This value must be 1-63 characters, begin and end with `[a-z0-9]`,
  // could contain dashes (-) in between.
  string channel_id = 3 [(google.api.field_behavior) = REQUIRED];

  // A request ID to identify requests. Specify a unique request ID
  // so that if you must retry your request, the server will know to ignore
  // the request if it has already been completed. The server will guarantee
  // that for at least 60 minutes since the first request.
  //
  // For example, consider a situation where you make an initial request and the
  // request times out. If you make the request again with the same request ID,
  // the server can check if original operation with the same request ID was
  // received, and if so, will ignore the second request. This prevents clients
  // from accidentally creating duplicate commitments.
  //
  // The request ID must be a valid UUID with the exception that zero UUID is
  // not supported `(00000000-0000-0000-0000-000000000000)`.
  string request_id = 4;
}

// Request message for "LivestreamService.ListChannels".
message ListChannelsRequest {
  // Required. The parent location for the resource, in the form of:
  // `projects/{project}/locations/{location}`.
  string parent = 1 [
    (google.api.field_behavior) = REQUIRED,
    (google.api.resource_reference) = {
      child_type: "livestream.googleapis.com/Channel"
    }
  ];

  // The maximum number of items to return. If unspecified, server
  // will pick an appropriate default. Server may return fewer items than
  // requested. A caller should only rely on response's
  // [next_page_token][google.cloud.video.livestream.v1.ListChannelsResponse.next_page_token]
  // to determine if there are more items left to be queried.
  int32 page_size = 2;

  // The next_page_token value returned from a previous List request, if any.
  string page_token = 3;

  // The filter to apply to list results.
  string filter = 4;

  // Specifies the ordering of results following syntax at
  // https://cloud.google.com/apis/design/design_patterns#sorting_order.
  string order_by = 5;
}

// Response message for "LivestreamService.ListChannels".
message ListChannelsResponse {
  // A list of channels.
  repeated Channel channels = 1;

  // Token to retrieve the next page of results, or empty if there are no more
  // results in the list.
  string next_page_token = 2;

  // Locations that could not be reached.
  repeated string unreachable = 3;
}

// Request message for "LivestreamService.GetChannel".
message GetChannelRequest {
  // Required. The name of the channel resource, in the form of:
  // `projects/{project}/locations/{location}/channels/{channelId}`.
  string name = 1 [
    (google.api.field_behavior) = REQUIRED,
    (google.api.resource_reference) = {
      type: "livestream.googleapis.com/Channel"
    }
  ];
}

// Request message for "LivestreamService.DeleteChannel".
message DeleteChannelRequest {
  // Required. The name of the channel resource, in the form of:
  // `projects/{project}/locations/{location}/channels/{channelId}`.
  string name = 1 [
    (google.api.field_behavior) = REQUIRED,
    (google.api.resource_reference) = {
      type: "livestream.googleapis.com/Channel"
    }
  ];

  // A request ID to identify requests. Specify a unique request ID
  // so that if you must retry your request, the server will know to ignore
  // the request if it has already been completed. The server will guarantee
  // that for at least 60 minutes after the first request.
  //
  // For example, consider a situation where you make an initial request and the
  // request times out. If you make the request again with the same request ID,
  // the server can check if original operation with the same request ID was
  // received, and if so, will ignore the second request. This prevents clients
  // from accidentally creating duplicate commitments.
  //
  // The request ID must be a valid UUID with the exception that zero UUID is
  // not supported `(00000000-0000-0000-0000-000000000000)`.
  string request_id = 2;

  // If the `force` field is set to the default value of `false`, you must
  // delete all of a channel's events before you can delete the channel itself.
  // If the field is set to `true`, requests to delete a channel also delete
  // associated channel events.
  bool force = 3;
}

// Request message for "LivestreamService.UpdateChannel".
message UpdateChannelRequest {
  // Field mask is used to specify the fields to be overwritten in the Channel
  // resource by the update. You can only update the following fields:
  //
  // * [`inputAttachments`](https://cloud.google.com/livestream/docs/reference/rest/v1/projects.locations.channels#inputattachment)
  // * [`inputConfig`](https://cloud.google.com/livestream/docs/reference/rest/v1/projects.locations.channels#inputconfig)
  // * [`output`](https://cloud.google.com/livestream/docs/reference/rest/v1/projects.locations.channels#output)
  // * [`elementaryStreams`](https://cloud.google.com/livestream/docs/reference/rest/v1/projects.locations.channels#elementarystream)
  // * [`muxStreams`](https://cloud.google.com/livestream/docs/reference/rest/v1/projects.locations.channels#muxstream)
  // * [`manifests`](https://cloud.google.com/livestream/docs/reference/rest/v1/projects.locations.channels#manifest)
  // * [`spriteSheets`](https://cloud.google.com/livestream/docs/reference/rest/v1/projects.locations.channels#spritesheet)
  // * [`logConfig`](https://cloud.google.com/livestream/docs/reference/rest/v1/projects.locations.channels#logconfig)
  // * [`timecodeConfig`](https://cloud.google.com/livestream/docs/reference/rest/v1/projects.locations.channels#timecodeconfig)
  // * [`encryptions`](https://cloud.google.com/livestream/docs/reference/rest/v1/projects.locations.channels#encryption)
  //
  // The fields specified in the update_mask are relative to the resource, not
  // the full request. A field will be overwritten if it is in the mask.
  //
  // If the mask is not present, then each field from the list above is updated
  // if the field appears in the request payload. To unset a field, add the
  // field to the update mask and remove it from the request payload.
  google.protobuf.FieldMask update_mask = 1;

  // Required. The channel resource to be updated.
  Channel channel = 2 [(google.api.field_behavior) = REQUIRED];

  // A request ID to identify requests. Specify a unique request ID
  // so that if you must retry your request, the server will know to ignore
  // the request if it has already been completed. The server will guarantee
  // that for at least 60 minutes since the first request.
  //
  // For example, consider a situation where you make an initial request and the
  // request times out. If you make the request again with the same request ID,
  // the server can check if original operation with the same request ID was
  // received, and if so, will ignore the second request. This prevents clients
  // from accidentally creating duplicate commitments.
  //
  // The request ID must be a valid UUID with the exception that zero UUID is
  // not supported `(00000000-0000-0000-0000-000000000000)`.
  string request_id = 3;
}

// Request message for "LivestreamService.StartChannel".
message StartChannelRequest {
  // Required. The name of the channel resource, in the form of:
  // `projects/{project}/locations/{location}/channels/{channelId}`.
  string name = 1 [
    (google.api.field_behavior) = REQUIRED,
    (google.api.resource_reference) = {
      type: "livestream.googleapis.com/Channel"
    }
  ];

  // A request ID to identify requests. Specify a unique request ID
  // so that if you must retry your request, the server will know to ignore
  // the request if it has already been completed. The server will guarantee
  // that for at least 60 minutes since the first request.
  //
  // For example, consider a situation where you make an initial request and the
  // request times out. If you make the request again with the same request ID,
  // the server can check if original operation with the same request ID was
  // received, and if so, will ignore the second request. This prevents clients
  // from accidentally creating duplicate commitments.
  //
  // The request ID must be a valid UUID with the exception that zero UUID is
  // not supported `(00000000-0000-0000-0000-000000000000)`.
  string request_id = 2;
}

// Request message for "LivestreamService.StopChannel".
message StopChannelRequest {
  // Required. The name of the channel resource, in the form of:
  // `projects/{project}/locations/{location}/channels/{channelId}`.
  string name = 1 [
    (google.api.field_behavior) = REQUIRED,
    (google.api.resource_reference) = {
      type: "livestream.googleapis.com/Channel"
    }
  ];

  // A request ID to identify requests. Specify a unique request ID
  // so that if you must retry your request, the server will know to ignore
  // the request if it has already been completed. The server will guarantee
  // that for at least 60 minutes since the first request.
  //
  // For example, consider a situation where you make an initial request and the
  // request times out. If you make the request again with the same request ID,
  // the server can check if original operation with the same request ID was
  // received, and if so, will ignore the second request. This prevents clients
  // from accidentally creating duplicate commitments.
  //
  // The request ID must be a valid UUID with the exception that zero UUID is
  // not supported `(00000000-0000-0000-0000-000000000000)`.
  string request_id = 2;
}

// Request message for "LivestreamService.CreateInput".
message CreateInputRequest {
  // Required. The parent location for the resource, in the form of:
  // `projects/{project}/locations/{location}`.
  string parent = 1 [
    (google.api.field_behavior) = REQUIRED,
    (google.api.resource_reference) = {
      child_type: "livestream.googleapis.com/Input"
    }
  ];

  // Required. The input resource to be created.
  Input input = 2 [(google.api.field_behavior) = REQUIRED];

  // Required. The ID of the input resource to be created.
  // This value must be 1-63 characters, begin and end with `[a-z0-9]`,
  // could contain dashes (-) in between.
  string input_id = 3 [(google.api.field_behavior) = REQUIRED];

  // A request ID to identify requests. Specify a unique request ID
  // so that if you must retry your request, the server will know to ignore
  // the request if it has already been completed. The server will guarantee
  // that for at least 60 minutes since the first request.
  //
  // For example, consider a situation where you make an initial request and the
  // request times out. If you make the request again with the same request ID,
  // the server can check if original operation with the same request ID was
  // received, and if so, will ignore the second request. This prevents clients
  // from accidentally creating duplicate commitments.
  //
  // The request ID must be a valid UUID with the exception that zero UUID is
  // not supported `(00000000-0000-0000-0000-000000000000)`.
  string request_id = 4;
}

// Request message for "LivestreamService.ListInputs".
message ListInputsRequest {
  // Required. The parent location for the resource, in the form of:
  // `projects/{project}/locations/{location}`.
  string parent = 1 [
    (google.api.field_behavior) = REQUIRED,
    (google.api.resource_reference) = {
      child_type: "livestream.googleapis.com/Input"
    }
  ];

  // The maximum number of items to return. If unspecified, server
  // will pick an appropriate default. Server may return fewer items than
  // requested. A caller should only rely on response's
  // [next_page_token][google.cloud.video.livestream.v1.ListInputsResponse.next_page_token]
  // to determine if there are more items left to be queried.
  int32 page_size = 2;

  // The next_page_token value returned from a previous List request, if any.
  string page_token = 3;

  // The filter to apply to list results.
  string filter = 4;

  // Specifies the ordering of results following syntax at [Sorting
  // Order](https://cloud.google.com/apis/design/design_patterns#sorting_order).
  string order_by = 5;
}

// Response message for "LivestreamService.ListInputs".
message ListInputsResponse {
  // A list of inputs.
  repeated Input inputs = 1;

  // Token to retrieve the next page of results, or empty if there are no more
  // results in the list.
  string next_page_token = 2;

  // Locations that could not be reached.
  repeated string unreachable = 3;
}

// Request message for "LivestreamService.GetInput".
message GetInputRequest {
  // Required. The name of the input resource, in the form of:
  // `projects/{project}/locations/{location}/inputs/{inputId}`.
  string name = 1 [
    (google.api.field_behavior) = REQUIRED,
    (google.api.resource_reference) = {
      type: "livestream.googleapis.com/Input"
    }
  ];
}

// Request message for "LivestreamService.DeleteInput".
message DeleteInputRequest {
  // Required. The name of the input resource, in the form of:
  // `projects/{project}/locations/{location}/inputs/{inputId}`.
  string name = 1 [
    (google.api.field_behavior) = REQUIRED,
    (google.api.resource_reference) = {
      type: "livestream.googleapis.com/Input"
    }
  ];

  // A request ID to identify requests. Specify a unique request ID
  // so that if you must retry your request, the server will know to ignore
  // the request if it has already been completed. The server will guarantee
  // that for at least 60 minutes since the first request.
  //
  // For example, consider a situation where you make an initial request and the
  // request times out. If you make the request again with the same request ID,
  // the server can check if original operation with the same request ID was
  // received, and if so, will ignore the second request. This prevents clients
  // from accidentally creating duplicate commitments.
  //
  // The request ID must be a valid UUID with the exception that zero UUID is
  // not supported `(00000000-0000-0000-0000-000000000000)`.
  string request_id = 2;
}

// Request message for "LivestreamService.UpdateInput".
message UpdateInputRequest {
  // Field mask is used to specify the fields to be overwritten in the Input
  // resource by the update. You can only update the following fields:
  //
  // * [`preprocessingConfig`](https://cloud.google.com/livestream/docs/reference/rest/v1/projects.locations.inputs#PreprocessingConfig)
  // * [`securityRules`](https://cloud.google.com/livestream/docs/reference/rest/v1/projects.locations.inputs#SecurityRule)
  //
  // The fields specified in the update_mask are relative to the resource, not
  // the full request. A field will be overwritten if it is in the mask.
  //
  // If the mask is not present, then each field from the list above is updated
  // if the field appears in the request payload. To unset a field, add the
  // field to the update mask and remove it from the request payload.
  google.protobuf.FieldMask update_mask = 1;

  // Required. The input resource to be updated.
  Input input = 2 [(google.api.field_behavior) = REQUIRED];

  // A request ID to identify requests. Specify a unique request ID
  // so that if you must retry your request, the server will know to ignore
  // the request if it has already been completed. The server will guarantee
  // that for at least 60 minutes since the first request.
  //
  // For example, consider a situation where you make an initial request and the
  // request times out. If you make the request again with the same request ID,
  // the server can check if original operation with the same request ID was
  // received, and if so, will ignore the second request. This prevents clients
  // from accidentally creating duplicate commitments.
  //
  // The request ID must be a valid UUID with the exception that zero UUID is
  // not supported `(00000000-0000-0000-0000-000000000000)`.
  string request_id = 3;
}

// Request message for "LivestreamService.CreateEvent".
message CreateEventRequest {
  // Required. The parent channel for the resource, in the form of:
  // `projects/{project}/locations/{location}/channels/{channelId}`.
  string parent = 1 [
    (google.api.field_behavior) = REQUIRED,
    (google.api.resource_reference) = {
      child_type: "livestream.googleapis.com/Event"
    }
  ];

  // Required. The event resource to be created.
  Event event = 2 [(google.api.field_behavior) = REQUIRED];

  // Required. The ID of the event resource to be created.
  // This value must be 1-63 characters, begin and end with `[a-z0-9]`,
  // could contain dashes (-) in between.
  string event_id = 3 [(google.api.field_behavior) = REQUIRED];

  // A request ID to identify requests. Specify a unique request ID
  // so that if you must retry your request, the server will know to ignore
  // the request if it has already been completed. The server will guarantee
  // that for at least 60 minutes since the first request.
  //
  // For example, consider a situation where you make an initial request and the
  // request times out. If you make the request again with the same request ID,
  // the server can check if original operation with the same request ID was
  // received, and if so, will ignore the second request. This prevents clients
  // from accidentally creating duplicate commitments.
  //
  // The request ID must be a valid UUID with the exception that zero UUID is
  // not supported `(00000000-0000-0000-0000-000000000000)`.
  string request_id = 4;
}

// Request message for "LivestreamService.ListEvents".
message ListEventsRequest {
  // Required. The parent channel for the resource, in the form of:
  // `projects/{project}/locations/{location}/channels/{channelId}`.
  string parent = 1 [
    (google.api.field_behavior) = REQUIRED,
    (google.api.resource_reference) = {
      child_type: "livestream.googleapis.com/Event"
    }
  ];

  // The maximum number of items to return. If unspecified, server
  // will pick an appropriate default. Server may return fewer items than
  // requested. A caller should only rely on response's
  // [next_page_token][google.cloud.video.livestream.v1.ListEventsResponse.next_page_token]
  // to determine if there are more items left to be queried.
  int32 page_size = 2;

  // The next_page_token value returned from a previous List request, if any.
  string page_token = 3;

  // The filter to apply to list results.
  string filter = 4;

  // Specifies the ordering of results following syntax at
  // https://cloud.google.com/apis/design/design_patterns#sorting_order.
  string order_by = 5;
}

// Response message for "LivestreamService.ListEvents".
message ListEventsResponse {
  // A list of events.
  repeated Event events = 1;

  // Token to retrieve the next page of results, or empty if there are no more
  // results in the list.
  string next_page_token = 2;

  // Locations that could not be reached.
  repeated string unreachable = 3;
}

// Request message for "LivestreamService.GetEvent".
message GetEventRequest {
  // Required. The name of the event resource, in the form of:
  // `projects/{project}/locations/{location}/channels/{channelId}/events/{eventId}`.
  string name = 1 [
    (google.api.field_behavior) = REQUIRED,
    (google.api.resource_reference) = {
      type: "livestream.googleapis.com/Event"
    }
  ];
}

// Request message for "LivestreamService.DeleteEvent".
message DeleteEventRequest {
  // Required. The name of the event resource, in the form of:
  // `projects/{project}/locations/{location}/channels/{channelId}/events/{eventId}`.
  string name = 1 [
    (google.api.field_behavior) = REQUIRED,
    (google.api.resource_reference) = {
      type: "livestream.googleapis.com/Event"
    }
  ];

  // A request ID to identify requests. Specify a unique request ID
  // so that if you must retry your request, the server will know to ignore
  // the request if it has already been completed. The server will guarantee
  // that for at least 60 minutes since the first request.
  //
  // For example, consider a situation where you make an initial request and the
  // request times out. If you make the request again with the same request ID,
  // the server can check if original operation with the same request ID was
  // received, and if so, will ignore the second request. This prevents clients
  // from accidentally creating duplicate commitments.
  //
  // The request ID must be a valid UUID with the exception that zero UUID is
  // not supported `(00000000-0000-0000-0000-000000000000)`.
  string request_id = 2;
}

// Response message for Start/Stop Channel long-running operations.
message ChannelOperationResponse {}

// Represents the metadata of the long-running operation.
message OperationMetadata {
  // Output only. The time the operation was created.
  google.protobuf.Timestamp create_time = 1
      [(google.api.field_behavior) = OUTPUT_ONLY];

  // Output only. The time the operation finished running.
  google.protobuf.Timestamp end_time = 2
      [(google.api.field_behavior) = OUTPUT_ONLY];

  // Output only. Server-defined resource path for the target of the operation.
  string target = 3 [(google.api.field_behavior) = OUTPUT_ONLY];

  // Output only. Name of the verb executed by the operation.
  string verb = 4 [(google.api.field_behavior) = OUTPUT_ONLY];

  // Output only. Identifies whether the user has requested cancellation
  // of the operation. Operations that have successfully been cancelled
  // have [Operation.error][] value with a
  // [google.rpc.Status.code][google.rpc.Status.code] of 1, corresponding to
  // `Code.CANCELLED`.
  bool requested_cancellation = 5 [(google.api.field_behavior) = OUTPUT_ONLY];

  // Output only. API version used to start the operation.
  string api_version = 6 [(google.api.field_behavior) = OUTPUT_ONLY];
}
