yeti_types/resource/mod.rs
1//! Resource trait and Context — the v2 request pipeline.
2//!
3//! Context builds itself as it flows through layers:
4//!
5//! ```text
6//! Protocol adapter → Router → Auth → Resource → Table → Storage
7//! | | | | | |
8//! creates adds adds reads reads reads
9//! method,path app_id, access, permission key,
10//! body,headers resource identity fields value
11//! ```
12
13use std::future::Future;
14use std::pin::Pin;
15
16use crate::error::Result;
17
18mod context;
19mod entry;
20mod metadata;
21mod permission;
22mod realtime;
23mod response_body;
24
25// ----------------------------------------------------------------------------
26// Public re-exports — preserve the `yeti_types::resource::*` API surface.
27// ----------------------------------------------------------------------------
28
29#[cfg(target_arch = "wasm32")]
30pub use context::WitContextHandle;
31pub use context::{
32 AuthBlock, AuthMethod, Context, DelegateSpec, Hlc, Identity, Lineage, OpsMask, Outcome,
33 Permissions, Request, ResourcePerm, Response, Routing,
34};
35pub use entry::ResourceEntry;
36pub use metadata::ResourceMetadata;
37// ADR-015: `ResourceMetadata` is now the single resource trait — it carries
38// verb dispatch (`handle`) alongside permissions and realtime. `Resource` is
39// its public-facing name; authors write `impl Resource for X`.
40pub use metadata::ResourceMetadata as Resource;
41pub use permission::{MethodOverrides, TablePermission};
42pub use realtime::{Connection, MessageType, StaticFiles, Subscription, SubscriptionMessage};
43pub use response_body::ResponseBody;
44
45// ============================================================================
46// Future type aliases
47// ============================================================================
48
49/// HTTP response result with `ResponseBody`.
50pub type HttpResult = Result<http::Response<ResponseBody>>;
51
52/// Future type for resource methods.
53pub type ResourceFuture = Pin<Box<dyn Future<Output = HttpResult> + Send>>;
54
55/// Future type for subscription methods.
56pub type SubscriptionFuture = Pin<Box<dyn Future<Output = Result<Subscription>> + Send>>;
57
58/// Future type for connection methods (WebSocket/SSE).
59pub type ConnectionFuture = Pin<Box<dyn Future<Output = Result<Connection>> + Send>>;