syntax = "proto3";

package envoy.service.tap.v3;

import "envoy/config/tap/v3/common.proto";
import "envoy/service/discovery/v3/discovery.proto";

import "google/api/annotations.proto";

import "udpa/annotations/status.proto";
import "udpa/annotations/versioning.proto";
import "validate/validate.proto";

option java_package = "io.envoyproxy.envoy.service.tap.v3";
option java_outer_classname = "TapdsProto";
option java_multiple_files = true;
option java_generic_services = true;
option (udpa.annotations.file_status).package_version_status = ACTIVE;

// [#protodoc-title: Tap discovery service]

// [#not-implemented-hide:] Tap discovery service.
service TapDiscoveryService {
  rpc StreamTapConfigs(stream discovery.v3.DiscoveryRequest)
      returns (stream discovery.v3.DiscoveryResponse) {
  }

  rpc DeltaTapConfigs(stream discovery.v3.DeltaDiscoveryRequest)
      returns (stream discovery.v3.DeltaDiscoveryResponse) {
  }

  rpc FetchTapConfigs(discovery.v3.DiscoveryRequest) returns (discovery.v3.DiscoveryResponse) {
    option (google.api.http).post = "/v3/discovery:tap_configs";
    option (google.api.http).body = "*";
  }
}

// [#not-implemented-hide:] A tap resource is essentially a tap configuration with a name
// The filter TapDS config references this name.
message TapResource {
  option (udpa.annotations.versioning).previous_message_type =
      "envoy.service.tap.v2alpha.TapResource";

  // The name of the tap configuration.
  string name = 1 [(validate.rules).string = {min_bytes: 1}];

  // Tap config to apply
  config.tap.v3.TapConfig config = 2;
}
