From 0a49ba8e5c94815394b06fa3a8e04d1dd226ba77 Mon Sep 17 00:00:00 2001 From: Eric Anderson Date: Thu, 28 May 2026 15:20:07 -0700 Subject: [PATCH 1/2] examples: Generate code to its own dedicated dir This allows us to delete the directory before re-generating code to avoid stale files from prior builds. This model works well if checking in the code or outputing to OUT_DIR; you'd only change between grpc::include_generated_proto! and grpc::include_proto!. --- examples/build.rs | 11 ++++++++--- .../generated => generated/helloworld}/generated.rs | 0 .../helloworld}/helloworld.u.pb.rs | 0 .../helloworld}/helloworld_grpc.pb.rs | 0 .../generated => generated/routeguide}/generated.rs | 0 .../routeguide}/route_guide.u.pb.rs | 0 .../routeguide}/route_guide_grpc.pb.rs | 0 examples/src/grpc-helloworld/client.rs | 3 +-- examples/src/grpc-routeguide/client.rs | 3 +-- 9 files changed, 10 insertions(+), 7 deletions(-) rename examples/{src/grpc-helloworld/generated => generated/helloworld}/generated.rs (100%) rename examples/{src/grpc-helloworld/generated => generated/helloworld}/helloworld.u.pb.rs (100%) rename examples/{src/grpc-helloworld/generated => generated/helloworld}/helloworld_grpc.pb.rs (100%) rename examples/{src/grpc-routeguide/generated => generated/routeguide}/generated.rs (100%) rename examples/{src/grpc-routeguide/generated => generated/routeguide}/route_guide.u.pb.rs (100%) rename examples/{src/grpc-routeguide/generated => generated/routeguide}/route_guide_grpc.pb.rs (100%) diff --git a/examples/build.rs b/examples/build.rs index 8c0aedade..4ac0ea997 100644 --- a/examples/build.rs +++ b/examples/build.rs @@ -47,10 +47,15 @@ fn main() { let grpc_routeguide = env::var_os("CARGO_FEATURE_GRPC_ROUTEGUIDE").is_some(); if (grpc_helloworld || grpc_routeguide) && env::var_os("GRPC_RUST_REGENERATE_PROTO").is_some() { - let manifest_dir = PathBuf::from(env::var("CARGO_MANIFEST_DIR").unwrap()); + let manifest_dir = PathBuf::from(env::var_os("CARGO_MANIFEST_DIR").unwrap()); + + let generated_dir = manifest_dir.join("generated"); + if generated_dir.exists() { + std::fs::remove_dir_all(&generated_dir).unwrap(); + } grpc_protobuf_build::CodeGen::new() - .output_dir(manifest_dir.join("src/grpc-helloworld/generated")) + .output_dir(generated_dir.join("helloworld")) .input("helloworld.proto") .include(manifest_dir.join("proto/helloworld")) .client_only() @@ -58,7 +63,7 @@ fn main() { .unwrap(); grpc_protobuf_build::CodeGen::new() - .output_dir(manifest_dir.join("src/grpc-routeguide/generated")) + .output_dir(generated_dir.join("routeguide")) .input("route_guide.proto") .include(manifest_dir.join("proto/routeguide")) .client_only() diff --git a/examples/src/grpc-helloworld/generated/generated.rs b/examples/generated/helloworld/generated.rs similarity index 100% rename from examples/src/grpc-helloworld/generated/generated.rs rename to examples/generated/helloworld/generated.rs diff --git a/examples/src/grpc-helloworld/generated/helloworld.u.pb.rs b/examples/generated/helloworld/helloworld.u.pb.rs similarity index 100% rename from examples/src/grpc-helloworld/generated/helloworld.u.pb.rs rename to examples/generated/helloworld/helloworld.u.pb.rs diff --git a/examples/src/grpc-helloworld/generated/helloworld_grpc.pb.rs b/examples/generated/helloworld/helloworld_grpc.pb.rs similarity index 100% rename from examples/src/grpc-helloworld/generated/helloworld_grpc.pb.rs rename to examples/generated/helloworld/helloworld_grpc.pb.rs diff --git a/examples/src/grpc-routeguide/generated/generated.rs b/examples/generated/routeguide/generated.rs similarity index 100% rename from examples/src/grpc-routeguide/generated/generated.rs rename to examples/generated/routeguide/generated.rs diff --git a/examples/src/grpc-routeguide/generated/route_guide.u.pb.rs b/examples/generated/routeguide/route_guide.u.pb.rs similarity index 100% rename from examples/src/grpc-routeguide/generated/route_guide.u.pb.rs rename to examples/generated/routeguide/route_guide.u.pb.rs diff --git a/examples/src/grpc-routeguide/generated/route_guide_grpc.pb.rs b/examples/generated/routeguide/route_guide_grpc.pb.rs similarity index 100% rename from examples/src/grpc-routeguide/generated/route_guide_grpc.pb.rs rename to examples/generated/routeguide/route_guide_grpc.pb.rs diff --git a/examples/src/grpc-helloworld/client.rs b/examples/src/grpc-helloworld/client.rs index bf71edfce..87fba7e6c 100644 --- a/examples/src/grpc-helloworld/client.rs +++ b/examples/src/grpc-helloworld/client.rs @@ -1,8 +1,7 @@ #[allow(unused)] mod generated { pub mod helloworld { - include!("generated/generated.rs"); // Contains messages - include!("generated/helloworld_grpc.pb.rs"); // Contains grpc stubs + grpc::include_generated_proto!("generated/helloworld", "helloworld"); } } diff --git a/examples/src/grpc-routeguide/client.rs b/examples/src/grpc-routeguide/client.rs index 755cf48a6..a94ff2ef2 100644 --- a/examples/src/grpc-routeguide/client.rs +++ b/examples/src/grpc-routeguide/client.rs @@ -3,8 +3,7 @@ use protobuf::proto; #[allow(unused)] mod generated { pub mod routeguide { - include!("generated/generated.rs"); // Contains messages - include!("generated/route_guide_grpc.pb.rs"); // Contains grpc stubs + grpc::include_generated_proto!("generated/routeguide", "route_guide"); } } From 34233887e77f3d9b25b2788092b3e015a93eea1f Mon Sep 17 00:00:00 2001 From: Eric Anderson Date: Fri, 29 May 2026 16:39:04 -0700 Subject: [PATCH 2/2] unwrap() to expect() Stop using the style of the file (unwrap() everywhere!), because remove_dir_all() does not give _any_ context as to what file had trouble. --- examples/build.rs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/examples/build.rs b/examples/build.rs index 4ac0ea997..37394a74d 100644 --- a/examples/build.rs +++ b/examples/build.rs @@ -51,7 +51,8 @@ fn main() { let generated_dir = manifest_dir.join("generated"); if generated_dir.exists() { - std::fs::remove_dir_all(&generated_dir).unwrap(); + std::fs::remove_dir_all(&generated_dir) + .expect("All files in generated/ directory should be deletable"); } grpc_protobuf_build::CodeGen::new()