xref: /tonic/examples/build.rs (revision 6cdb3d46)
1 use std::{env, path::PathBuf};
2 
3 fn main() {
4     tonic_build::configure()
5         .type_attribute("routeguide.Point", "#[derive(Hash)]")
6         .compile(&["proto/routeguide/route_guide.proto"], &["proto"])
7         .unwrap();
8 
9     let out_dir = PathBuf::from(env::var("OUT_DIR").unwrap());
10     tonic_build::configure()
11         .file_descriptor_set_path(out_dir.join("helloworld_descriptor.bin"))
12         .compile(&["proto/helloworld/helloworld.proto"], &["proto"])
13         .unwrap();
14 
15     tonic_build::compile_protos("proto/echo/echo.proto").unwrap();
16 
17     tonic_build::configure()
18         .server_mod_attribute("attrs", "#[cfg(feature = \"server\")]")
19         .server_attribute("Echo", "#[derive(PartialEq)]")
20         .client_mod_attribute("attrs", "#[cfg(feature = \"client\")]")
21         .client_attribute("Echo", "#[derive(PartialEq)]")
22         .compile(&["proto/attrs/attrs.proto"], &["proto"])
23         .unwrap();
24 
25     tonic_build::configure()
26         .build_server(false)
27         .compile(
28             &["proto/googleapis/google/pubsub/v1/pubsub.proto"],
29             &["proto/googleapis"],
30         )
31         .unwrap();
32 
33     build_json_codec_service();
34 }
35 
36 // Manually define the json.helloworld.Greeter service which used a custom JsonCodec to use json
37 // serialization instead of protobuf for sending messages on the wire.
38 // This will result in generated client and server code which relies on its request, response and
39 // codec types being defined in a module `crate::common`.
40 //
41 // See the client/server examples defined in `src/json-codec` for more information.
42 fn build_json_codec_service() {
43     let greeter_service = tonic_build::manual::Service::builder()
44         .name("Greeter")
45         .package("json.helloworld")
46         .method(
47             tonic_build::manual::Method::builder()
48                 .name("say_hello")
49                 .route_name("SayHello")
50                 .input_type("crate::common::HelloRequest")
51                 .output_type("crate::common::HelloResponse")
52                 .codec_path("crate::common::JsonCodec")
53                 .build(),
54         )
55         .build();
56 
57     tonic_build::manual::Builder::new().compile(&[greeter_service]);
58 }
59