connectrpc_codegen/lib.rs
1//! connectrpc-codegen - library for generating ConnectRPC Rust bindings.
2//!
3//! This crate provides programmatic code generation from compiled proto
4//! descriptors: buffa message types + ConnectRPC service traits, extension
5//! traits, and typed clients.
6//!
7//! Most users will not use this crate directly. Use either:
8//!
9//! - **`protoc-gen-connect-rust`** - protoc/buf plugin binary (generates
10//! checked-in service stubs via `buf generate`)
11//! - **`connectrpc-build`** - `build.rs` integration (generates unified
12//! message types + service stubs into `$OUT_DIR`)
13//!
14//! # Two generation modes
15//!
16//! [`codegen::generate_files`] - **unified** output. Buffa message types
17//! and ConnectRPC service stubs in one file per proto, with
18//! `super::`-relative type paths. Used by `connectrpc-build`.
19//!
20//! [`codegen::generate_services`] - **service stubs only**. Message types
21//! are referenced via absolute paths configured via
22//! [`codegen::CodeGenConfig::extern_paths`], so the output compiles standalone
23//! against a separately-generated buffa module or crate. Used by the
24//! `protoc-gen-connect-rust` plugin.
25//!
26//! # Library usage
27//!
28//! ```rust,ignore
29//! use connectrpc_codegen::codegen::{generate_services, Options};
30//!
31//! let mut options = Options::default();
32//! options.buffa.extern_paths.push((".".into(), "crate::proto".into()));
33//! let files = generate_services(&descriptors, &files_to_generate, &options)?;
34//! for f in files {
35//! std::fs::write(out_dir.join(&f.name), f.content)?;
36//! }
37//! ```
38
39pub mod codegen;
40pub mod plugin;
41
42pub use codegen::CodeGenConfig;