exomonad_proto/lib.rs
1//! Protocol buffer generated types for ExoMonad FFI boundary.
2//!
3//! This crate provides the single source of truth for types that cross
4//! the Rust/Haskell WASM boundary.
5//!
6//! ## Proto files
7//!
8//! ### Core types (exomonad/)
9//! Core FFI types use JSON wire format (serde derives).
10//! - `ffi.proto` - Core FFI types (ErrorCode, FfiError, FfiResult)
11//! - `common.proto` - Shared primitives (SessionId, Role, etc.)
12//! - `hook.proto` - Claude Code hook types
13//! - `agent.proto` - Agent management types
14//! - `popup.proto` - UI popup types
15//!
16//! ### Effect types (effects/)
17//! Effect types use protobuf binary encoding (prost Message).
18//! Modules are auto-generated from `proto/effects/*.proto` at build time.
19//! Each `.proto` file with a `service` definition gets its own module.
20
21pub mod ffi {
22 include!(concat!(env!("OUT_DIR"), "/exomonad.ffi.rs"));
23}
24
25// Conditionally include modules as they become available
26#[cfg(feature = "full")]
27pub mod common {
28 include!(concat!(env!("OUT_DIR"), "/exomonad.common.rs"));
29}
30
31#[cfg(feature = "full")]
32pub mod hook {
33 include!(concat!(env!("OUT_DIR"), "/exomonad.hook.rs"));
34}
35
36#[cfg(feature = "full")]
37pub mod agent {
38 include!(concat!(env!("OUT_DIR"), "/exomonad.agent.rs"));
39}
40
41#[cfg(feature = "full")]
42pub mod popup {
43 include!(concat!(env!("OUT_DIR"), "/exomonad.popup.rs"));
44}
45
46// ============================================================================
47// Effect types (feature = "effects")
48// ============================================================================
49
50/// Effect types module containing all generated effect message types.
51///
52/// Effect types use protobuf binary encoding (not JSON).
53/// Encode/decode via `prost::Message` trait.
54///
55/// Sub-modules are generated from `proto/effects/*.proto` — see
56/// `build.rs` `generate_effect_module_declarations()`.
57#[cfg(feature = "effects")]
58pub mod effects {
59 include!(concat!(env!("OUT_DIR"), "/effect_modules.rs"));
60
61 // Re-export common effect types (stable framework API)
62 pub use error::{
63 Custom, EffectEnvelope, EffectError, EffectResponse, InvalidInput, NetworkError, NotFound,
64 PermissionDenied, Timeout,
65 };
66}
67
68// Re-export common types at crate root for convenience
69pub use ffi::{ErrorCode, ErrorContext, FfiError, FfiResult};