aws_smithy_http_server/schema/
mod.rs1use crate::config::RequestBodyCollectionConfig;
7
8mod deserialize;
9pub mod event_stream;
10mod modeled_error;
11pub mod protocol;
12pub(crate) mod request_bindings;
13pub(crate) mod response_bindings;
14pub mod routing;
15mod service;
16pub mod settings;
17mod timestamp;
18pub mod traits;
19
20pub use deserialize::{DeserializableShape, DeserializeError};
21pub use event_stream::InitialResponsePolicy;
22pub use modeled_error::HttpModeledError;
23pub(crate) use protocol::body_collection_rejection;
24pub use protocol::{
25 collect_request_body, BodyDirective, BodyRoutedProtocol, EventStreamFraming, MetadataRoutedProtocol,
26 ProtocolBuildContext, ProtocolFactory, ProtocolOrder, ProtocolRegistration, ProtocolRegistry,
27 RequestBodyCollectionError, ServerProtocol, SharedServerProtocol,
28};
29
30pub use service::{OperationSchema, ServiceSchema};
31
32#[derive(Clone)]
50pub struct SelectedOperation {
51 protocol: SharedServerProtocol,
52 operation: &'static OperationSchema<'static>,
53 request_body: RequestBodyCollectionConfig,
54}
55
56#[derive(Clone)]
57struct SelectedOperationExtension(SelectedOperation);
58
59impl SelectedOperation {
60 pub fn get_from_request<B>(request: &http::Request<B>) -> Option<&Self> {
64 Self::get_from_extensions(request.extensions())
65 }
66
67 pub fn get_from_extensions(extensions: &http::Extensions) -> Option<&Self> {
72 extensions.get::<SelectedOperationExtension>().map(|stored| &stored.0)
73 }
74
75 pub(crate) fn get_from_runtime_request<B>(request: &aws_smithy_runtime_api::http::Request<B>) -> Option<&Self> {
76 request
77 .extension::<SelectedOperationExtension>()
78 .map(|stored| &stored.0)
79 }
80
81 pub(crate) fn insert_into(self, extensions: &mut http::Extensions) {
82 extensions.insert(SelectedOperationExtension(self));
83 }
84
85 pub(crate) fn new(
88 protocol: SharedServerProtocol,
89 operation: &'static OperationSchema<'static>,
90 request_body: RequestBodyCollectionConfig,
91 ) -> Self {
92 Self {
93 protocol,
94 operation,
95 request_body,
96 }
97 }
98
99 pub fn protocol(&self) -> &SharedServerProtocol {
101 &self.protocol
102 }
103
104 pub fn operation(&self) -> &'static OperationSchema<'static> {
106 self.operation
107 }
108
109 pub fn request_body_config(&self) -> RequestBodyCollectionConfig {
113 self.request_body
114 }
115}
116
117impl std::fmt::Debug for SelectedOperation {
118 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
119 f.debug_struct("SelectedOperation")
120 .field("protocol", &self.protocol.protocol_id())
121 .field("operation", &self.operation.shape_id())
122 .field("request_body", &self.request_body)
123 .finish()
124 }
125}