1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
//! Endpoint metadata trait for HTTP Method Macros
//!
//! This module provides the `EndpointInfo` trait that HTTP Method Macros
//! (`#[get]`, `#[post]`, etc.) implement to provide route metadata.
pub use ;
use Method;
/// Endpoint metadata for OpenAPI generation
///
/// This struct is automatically submitted to the global inventory
/// by HTTP method decorator macros (`#[get]`, `#[post]`, etc.) at compile time.
/// It can be collected at runtime using `inventory::iter::<EndpointMetadata>()`.
///
/// # Example
///
/// ```rust,no_run
/// use reinhardt_core::endpoint::EndpointMetadata;
///
/// // Collect all registered endpoints
/// for metadata in inventory::iter::<EndpointMetadata>() {
/// println!("{} {}", metadata.method, metadata.path);
/// }
/// ```
// NOTE: #[non_exhaustive] is intentionally omitted in the pre-1.0 phase.
// EndpointMetadata is constructed via struct literals in both proc-macro codegen
// (reinhardt-core-macros) and test code across multiple crates. Adding
// #[non_exhaustive] would require a builder or constructor, which adds complexity
// without benefit before the public API stabilizes at 1.0.
/// A response definition for an endpoint
/// A response header definition for an endpoint
// Register EndpointMetadata as a collectible type with inventory
collect!;
/// Trait for endpoint metadata used by HTTP Method Macros
///
/// This trait is automatically implemented by HTTP Method Macros (`#[get]`, `#[post]`, etc.)
/// for the generated View types. It provides the route path, HTTP method, and name
/// for URL reversal.
///
/// # Examples
///
/// The HTTP Method Macro generates a View type that implements this trait:
///
/// ```rust,ignore
/// # use reinhardt_core_macros::get;
/// # use reinhardt_http::Response;
/// # use reinhardt_core::endpoint::EndpointInfo;
/// # use hyper::Method;
/// #[get("/users/{id}/", name = "get_user")]
/// pub async fn get_user(id: i64) -> Result<Response, Box<dyn std::error::Error>> {
/// Ok(Response::ok())
/// }
///
/// // Generates:
/// // pub struct GetUserView;
/// //
/// // impl EndpointInfo for GetUserView {
/// // fn path() -> &'static str { "/users/{id}/" }
/// // fn method() -> Method { Method::GET }
/// // fn name() -> &'static str { "get_user" }
/// // }
/// ```