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 with
22//! [`codegen::Options::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 options = Options {
32//! extern_paths: vec![(".".into(), "crate::proto".into())],
33//! ..Options::default()
34//! };
35//! let files = generate_services(&descriptors, &files_to_generate, &options)?;
36//! for f in files {
37//! std::fs::write(out_dir.join(&f.name), f.content)?;
38//! }
39//! ```
40
41pub mod codegen;
42pub mod plugin;