// This proto file is part of protobuf-ts. It defines custom options
// that are interpreted by @protobuf-ts/plugin.
//
// To use the options, add an import to this file:
//
//     import "protobuf-ts.proto";
//
// If you use @protobuf-ts/plugin, it should not be necessary to add a proto
// path to the file. @protobuf-ts/protoc automatically adds
// `--proto_path ./node_modules/@protobuf-ts/plugin` to your commands.

syntax = "proto3";

package ts;

import "google/protobuf/descriptor.proto";


// Custom file options interpreted by @protobuf-ts/plugin
extend google.protobuf.FileOptions {

    // Exclude field or method options from being emitted in reflection data.
    //
    // For example, to stop the data of the "google.api.http" method option
    // from being exported in the reflection information, set the following
    // file option:
    //
    // ```proto
    // option (ts.exclude_options) = "google.api.http";
    // ```
    //
    // The option can be set multiple times.
    // `*` serves as a wildcard and will greedily match anything.
    repeated string exclude_options = 777701;

}


// Custom service options interpreted by @protobuf-ts/plugin
extend google.protobuf.ServiceOptions {

    // Generate a client for this service with this style.
    // Can be set multiple times to generate several styles.
    repeated ClientStyle client = 777701;

    // Generate a server for this service with this style.
    // Can be set multiple times to generate several styles.
    repeated ServerStyle server = 777702;

}


// The available client styles that can be generated by @protobuf-ts/plugin
enum ClientStyle {

    // Do not emit a client for this service.
    NO_CLIENT = 0;

    // Use the generic implementations of @protobuf-ts/runtime-rpc.
    // This is the default behaviour.
    GENERIC_CLIENT = 1;

    // Generate a client using @grpc/grpc-js (major version 1).
    GRPC1_CLIENT = 4;
}


// The available server styles that can be generated by @protobuf-ts/plugin
enum ServerStyle {

    // Do not emit a server for this service.
    // This is the default behaviour.
    NO_SERVER = 0;

    // Generate a generic server interface.
    // Adapters be used to serve the service, for example @protobuf-ts/grpc-backend
    // for gRPC.
    GENERIC_SERVER = 1;

    // Generate a server for @grpc/grpc-js (major version 1).
    GRPC1_SERVER = 2;

}
