From ea7fe66b145e01891f1c1f16d247e02524d98fae Mon Sep 17 00:00:00 2001 From: Lucio Franco Date: Wed, 8 Jul 2020 18:01:16 -0400 Subject: [PATCH] feat(types): Add `tonic-types` crate (#391) --- Cargo.toml | 1 + README.md | 1 + tonic-types/Cargo.toml | 22 ++++++++++++++++ tonic-types/build.rs | 3 +++ tonic-types/proto/status.proto | 47 ++++++++++++++++++++++++++++++++++ tonic-types/src/lib.rs | 19 ++++++++++++++ 6 files changed, 93 insertions(+) create mode 100644 tonic-types/Cargo.toml create mode 100644 tonic-types/build.rs create mode 100644 tonic-types/proto/status.proto create mode 100644 tonic-types/src/lib.rs diff --git a/Cargo.toml b/Cargo.toml index 2afbedede..bbe5a00b1 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -3,6 +3,7 @@ members = [ "tonic", "tonic-build", "tonic-health", + "tonic-types", # Non-published crates "examples", diff --git a/README.md b/README.md index 5d1018ac8..0ed6bc56b 100644 --- a/README.md +++ b/README.md @@ -68,6 +68,7 @@ question. If that doesn't work, try opening an [issue] with the question. - [`tonic`](https://github.com/hyperium/tonic/tree/master/tonic): Generic gRPC and HTTP/2 client/server implementation. - [`tonic-build`](https://github.com/hyperium/tonic/tree/master/tonic-build): [`prost`] based service codegen. +- [`tonic-types`](https://github.com/hyperium/tonic/tree/master/tonic-types): [`prost`] based grpc utility types. - [`tonic-health`](https://github.com/hyperium/tonic/tree/master/tonic-health): Implementation of the standard [gRPC health checking service][healthcheck]. Also serves as an example of both unary and response streaming. - [`examples`](https://github.com/hyperium/tonic/tree/master/examples): Example gRPC implementations showing off diff --git a/tonic-types/Cargo.toml b/tonic-types/Cargo.toml new file mode 100644 index 000000000..7bbf1e4ee --- /dev/null +++ b/tonic-types/Cargo.toml @@ -0,0 +1,22 @@ +[package] +name = "tonic-types" +version = "0.1.0" +authors = ["Lucio Franco "] +edition = "2018" +license = "MIT" +documentation = "https://docs.rs/tonic-types/0.1.0/tonic-types/" +repository = "https://github.com/hyperium/tonic" +homepage = "https://github.com/hyperium/tonic" +description = """ +A collection of useful protobuf types that can be used with `tonic`. +""" +readme = "../README.md" +categories = ["web-programming", "network-programming", "asynchronous"] +keywords = ["rpc", "grpc", "protobuf"] + +[dependencies] +prost = "0.6" +prost-types = "0.6" + +[build-dependencies] +prost-build = "0.6" diff --git a/tonic-types/build.rs b/tonic-types/build.rs new file mode 100644 index 000000000..88b28da40 --- /dev/null +++ b/tonic-types/build.rs @@ -0,0 +1,3 @@ +fn main() { + prost_build::compile_protos(&["proto/status.proto"], &["proto/"]).unwrap(); +} diff --git a/tonic-types/proto/status.proto b/tonic-types/proto/status.proto new file mode 100644 index 000000000..5bd51aa2f --- /dev/null +++ b/tonic-types/proto/status.proto @@ -0,0 +1,47 @@ +// Copyright 2020 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.rpc; + +import "google/protobuf/any.proto"; + +option cc_enable_arenas = true; +option go_package = "google.golang.org/genproto/googleapis/rpc/status;status"; +option java_multiple_files = true; +option java_outer_classname = "StatusProto"; +option java_package = "com.google.rpc"; +option objc_class_prefix = "RPC"; + +// The `Status` type defines a logical error model that is suitable for +// different programming environments, including REST APIs and RPC APIs. It is +// used by [gRPC](https://github.com/grpc). Each `Status` message contains +// three pieces of data: error code, error message, and error details. +// +// You can find out more about this error model and how to work with it in the +// [API Design Guide](https://cloud.google.com/apis/design/errors). +message Status { + // The status code, which should be an enum value of [google.rpc.Code][google.rpc.Code]. + int32 code = 1; + + // A developer-facing error message, which should be in English. Any + // user-facing error message should be localized and sent in the + // [google.rpc.Status.details][google.rpc.Status.details] field, or localized by the client. + string message = 2; + + // A list of messages that carry the error details. There is a common set of + // message types for APIs to use. + repeated google.protobuf.Any details = 3; +} \ No newline at end of file diff --git a/tonic-types/src/lib.rs b/tonic-types/src/lib.rs new file mode 100644 index 000000000..3624a0981 --- /dev/null +++ b/tonic-types/src/lib.rs @@ -0,0 +1,19 @@ +//! A collection of useful protobuf types that can be used with `tonic`. + +#![warn( + missing_debug_implementations, + missing_docs, + rust_2018_idioms, + unreachable_pub +)] +#![doc( + html_logo_url = "https://github.com/hyperium/tonic/raw/master/.github/assets/tonic-docs.png" +)] +#![doc(html_root_url = "https://docs.rs/tonic-types/0.1.0")] +#![doc(issue_tracker_base_url = "https://github.com/hyperium/tonic/issues/")] + +mod pb { + include!(concat!(env!("OUT_DIR"), "/google.rpc.rs")); +} + +pub use pb::Status;