Server Test

Server Test

rev. 3c756f73b1f83a0eed4275d9d1e22df0b10b66fb

Files changed:

tmp-codegen-diff/codegen-server-test/rpcv2Cbor_extras-http0x/rust-server-codegen/src/protocol_serde/shape_streaming_operation_with_optional_data_input.rs

@@ -0,1 +0,15 @@
           1  +
// Code generated by software.amazon.smithy.rust.codegen.smithy-rs. DO NOT EDIT.
           2  +
pub fn de_events_payload(
           3  +
    body: &mut ::aws_smithy_types::body::SdkBody,
           4  +
) -> std::result::Result<
           5  +
    crate::sigv4_event_stream::SigV4Receiver<
           6  +
        crate::model::Events,
           7  +
        ::aws_smithy_legacy_http::event_stream::MessageStreamError,
           8  +
    >,
           9  +
    ::aws_smithy_cbor::decode::DeserializeError,
          10  +
> {
          11  +
    let unmarshaller = crate::event_stream_serde::EventsUnmarshaller::new();
          12  +
    let body = std::mem::replace(body, ::aws_smithy_types::body::SdkBody::taken());
          13  +
    let receiver = crate::sigv4_event_stream::SigV4Receiver::new(unmarshaller, body);
          14  +
    Ok(receiver)
          15  +
}

tmp-codegen-diff/codegen-server-test/rpcv2Cbor_extras-http0x/rust-server-codegen/src/protocol_serde/shape_streaming_operation_with_optional_data_output.rs

@@ -0,1 +0,26 @@
           1  +
// Code generated by software.amazon.smithy.rust.codegen.smithy-rs. DO NOT EDIT.
           2  +
pub fn ser_streaming_operation_with_optional_data_output_output_output(
           3  +
    value: &crate::output::StreamingOperationWithOptionalDataOutput,
           4  +
) -> ::std::result::Result<
           5  +
    ::std::vec::Vec<u8>,
           6  +
    ::aws_smithy_types::error::operation::SerializationError,
           7  +
> {
           8  +
    let mut encoder = ::aws_smithy_cbor::Encoder::new(::std::vec::Vec::new());
           9  +
    {
          10  +
        let encoder = &mut encoder;
          11  +
        crate::protocol_serde::shape_streaming_operation_with_optional_data_output::ser_streaming_operation_with_optional_data_output_output(encoder, value )?;
          12  +
    }
          13  +
    ::std::result::Result::Ok(encoder.into_writer())
          14  +
}
          15  +
          16  +
pub fn ser_streaming_operation_with_optional_data_output_output(
          17  +
    encoder: &mut ::aws_smithy_cbor::Encoder,
          18  +
    #[allow(unused)] input: &crate::output::StreamingOperationWithOptionalDataOutput,
          19  +
) -> ::std::result::Result<(), ::aws_smithy_types::error::operation::SerializationError> {
          20  +
    encoder.begin_map();
          21  +
    if let Some(var_1) = &input.optional_response_data {
          22  +
        encoder.str("optionalResponseData").str(var_1.as_str());
          23  +
    }
          24  +
    encoder.end();
          25  +
    Ok(())
          26  +
}

tmp-codegen-diff/codegen-server-test/rpcv2Cbor_extras-http0x/rust-server-codegen/src/protocol_serde/shape_struct_list.rs

@@ -0,1 +0,54 @@
           1  +
// Code generated by software.amazon.smithy.rust.codegen.smithy-rs. DO NOT EDIT.
           2  +
pub(crate) fn de_struct_list(
           3  +
    decoder: &mut ::aws_smithy_cbor::Decoder,
           4  +
) -> ::std::result::Result<
           5  +
    crate::unconstrained::struct_list_unconstrained::StructListUnconstrained,
           6  +
    ::aws_smithy_cbor::decode::DeserializeError,
           7  +
> {
           8  +
    fn member(
           9  +
        mut list: crate::unconstrained::struct_list_unconstrained::StructListUnconstrained,
          10  +
        decoder: &mut ::aws_smithy_cbor::Decoder,
          11  +
    ) -> ::std::result::Result<
          12  +
        crate::unconstrained::struct_list_unconstrained::StructListUnconstrained,
          13  +
        ::aws_smithy_cbor::decode::DeserializeError,
          14  +
    > {
          15  +
        let value = match decoder.datatype()? {
          16  +
            ::aws_smithy_cbor::data::Type::Null => {
          17  +
                return ::std::result::Result::Err(
          18  +
                    ::aws_smithy_cbor::decode::DeserializeError::custom(
          19  +
                        "dense list cannot contain null values",
          20  +
                        decoder.position(),
          21  +
                    ),
          22  +
                )
          23  +
            }
          24  +
            _ => crate::protocol_serde::shape_simple_struct::de_simple_struct(decoder)?,
          25  +
        };
          26  +
        list.0.push(value);
          27  +
        Ok(list)
          28  +
    }
          29  +
          30  +
    let mut list = crate::unconstrained::struct_list_unconstrained::StructListUnconstrained(
          31  +
        ::std::vec::Vec::new(),
          32  +
    );
          33  +
          34  +
    match decoder.list()? {
          35  +
        None => loop {
          36  +
            match decoder.datatype()? {
          37  +
                ::aws_smithy_cbor::data::Type::Break => {
          38  +
                    decoder.skip()?;
          39  +
                    break;
          40  +
                }
          41  +
                _ => {
          42  +
                    list = member(list, decoder)?;
          43  +
                }
          44  +
            };
          45  +
        },
          46  +
        Some(n) => {
          47  +
            for _ in 0..n {
          48  +
                list = member(list, decoder)?;
          49  +
            }
          50  +
        }
          51  +
    };
          52  +
          53  +
    Ok(list)
          54  +
}

tmp-codegen-diff/codegen-server-test/rpcv2Cbor_extras-http0x/rust-server-codegen/src/protocol_serde/shape_unit_union.rs

@@ -0,1 +0,70 @@
           1  +
// Code generated by software.amazon.smithy.rust.codegen.smithy-rs. DO NOT EDIT.
           2  +
pub(crate) fn de_unit_union(
           3  +
    decoder: &mut ::aws_smithy_cbor::Decoder,
           4  +
) -> ::std::result::Result<crate::model::UnitUnion, ::aws_smithy_cbor::decode::DeserializeError> {
           5  +
    fn pair(
           6  +
        decoder: &mut ::aws_smithy_cbor::Decoder,
           7  +
    ) -> ::std::result::Result<crate::model::UnitUnion, ::aws_smithy_cbor::decode::DeserializeError>
           8  +
    {
           9  +
        Ok(match decoder.str()?.as_ref() {
          10  +
            "unitA" => {
          11  +
                decoder.skip()?;
          12  +
                crate::model::UnitUnion::UnitA
          13  +
            }
          14  +
            "unitB" => {
          15  +
                decoder.skip()?;
          16  +
                crate::model::UnitUnion::UnitB
          17  +
            }
          18  +
            variant => {
          19  +
                return Err(
          20  +
                    ::aws_smithy_cbor::decode::DeserializeError::unknown_union_variant(
          21  +
                        variant,
          22  +
                        decoder.position(),
          23  +
                    ),
          24  +
                )
          25  +
            }
          26  +
        })
          27  +
    }
          28  +
          29  +
    match decoder.map()? {
          30  +
        None => {
          31  +
            let variant = pair(decoder)?;
          32  +
            match decoder.datatype()? {
          33  +
                ::aws_smithy_cbor::data::Type::Break => {
          34  +
                    decoder.skip()?;
          35  +
                    Ok(variant)
          36  +
                }
          37  +
                ty => Err(
          38  +
                    ::aws_smithy_cbor::decode::DeserializeError::unexpected_union_variant(
          39  +
                        ty,
          40  +
                        decoder.position(),
          41  +
                    ),
          42  +
                ),
          43  +
            }
          44  +
        }
          45  +
        Some(1) => pair(decoder),
          46  +
        Some(_) => Err(
          47  +
            ::aws_smithy_cbor::decode::DeserializeError::mixed_union_variants(decoder.position()),
          48  +
        ),
          49  +
    }
          50  +
}
          51  +
          52  +
pub fn ser_unit_union(
          53  +
    encoder: &mut ::aws_smithy_cbor::Encoder,
          54  +
    input: &crate::model::UnitUnion,
          55  +
) -> ::std::result::Result<(), ::aws_smithy_types::error::operation::SerializationError> {
          56  +
    encoder.map(1);
          57  +
    match input {
          58  +
        crate::model::UnitUnion::UnitA => {
          59  +
            encoder.str("unitA");
          60  +
            encoder.begin_map();
          61  +
            encoder.end();
          62  +
        }
          63  +
        crate::model::UnitUnion::UnitB => {
          64  +
            encoder.str("unitB");
          65  +
            encoder.begin_map();
          66  +
            encoder.end();
          67  +
        }
          68  +
    }
          69  +
    ::std::result::Result::Ok(())
          70  +
}

tmp-codegen-diff/codegen-server-test/rpcv2Cbor_extras-http0x/rust-server-codegen/src/protocol_serde/shape_validation_exception.rs

@@ -0,1 +0,40 @@
           1  +
// Code generated by software.amazon.smithy.rust.codegen.smithy-rs. DO NOT EDIT.
           2  +
pub fn ser_validation_exception_error(
           3  +
    value: &crate::error::ValidationException,
           4  +
) -> ::std::result::Result<
           5  +
    ::std::vec::Vec<u8>,
           6  +
    ::aws_smithy_types::error::operation::SerializationError,
           7  +
> {
           8  +
    let mut encoder = ::aws_smithy_cbor::Encoder::new(::std::vec::Vec::new());
           9  +
    {
          10  +
        let encoder = &mut encoder;
          11  +
        crate::protocol_serde::shape_validation_exception::ser_validation_exception(
          12  +
            encoder, value,
          13  +
        )?;
          14  +
    }
          15  +
    ::std::result::Result::Ok(encoder.into_writer())
          16  +
}
          17  +
          18  +
pub fn ser_validation_exception(
          19  +
    encoder: &mut ::aws_smithy_cbor::Encoder,
          20  +
    #[allow(unused)] input: &crate::error::ValidationException,
          21  +
) -> ::std::result::Result<(), ::aws_smithy_types::error::operation::SerializationError> {
          22  +
    encoder.begin_map();
          23  +
    encoder
          24  +
        .str("__type")
          25  +
        .str("smithy.framework#ValidationException");
          26  +
    {
          27  +
        encoder.str("message").str(input.message.as_str());
          28  +
    }
          29  +
    if let Some(var_1) = &input.field_list {
          30  +
        encoder.str("fieldList");
          31  +
        encoder.array((*var_1).len());
          32  +
        for item_2 in var_1 {
          33  +
            {
          34  +
                crate::protocol_serde::shape_validation_exception_field::ser_validation_exception_field(encoder, item_2 )?;
          35  +
            }
          36  +
        }
          37  +
    }
          38  +
    encoder.end();
          39  +
    Ok(())
          40  +
}

tmp-codegen-diff/codegen-server-test/rpcv2Cbor_extras-http0x/rust-server-codegen/src/protocol_serde/shape_validation_exception_field.rs

@@ -0,1 +0,15 @@
           1  +
// Code generated by software.amazon.smithy.rust.codegen.smithy-rs. DO NOT EDIT.
           2  +
pub fn ser_validation_exception_field(
           3  +
    encoder: &mut ::aws_smithy_cbor::Encoder,
           4  +
    #[allow(unused)] input: &crate::model::ValidationExceptionField,
           5  +
) -> ::std::result::Result<(), ::aws_smithy_types::error::operation::SerializationError> {
           6  +
    encoder.begin_map();
           7  +
    {
           8  +
        encoder.str("path").str(input.path.as_str());
           9  +
    }
          10  +
    {
          11  +
        encoder.str("message").str(input.message.as_str());
          12  +
    }
          13  +
    encoder.end();
          14  +
    Ok(())
          15  +
}

tmp-codegen-diff/codegen-server-test/rpcv2Cbor_extras-http0x/rust-server-codegen/src/service.rs

@@ -0,1 +0,2497 @@
           1  +
// Code generated by software.amazon.smithy.rust.codegen.smithy-rs. DO NOT EDIT.
           2  +
/// The service builder for [`RpcV2CborService`].
           3  +
///
           4  +
/// Constructed via [`RpcV2CborService::builder`].
           5  +
pub struct RpcV2CborServiceBuilder<Body, L, HttpPl, ModelPl> {
           6  +
    complex_struct_operation: Option<::aws_smithy_legacy_http_server::routing::Route<Body>>,
           7  +
    empty_struct_operation: Option<::aws_smithy_legacy_http_server::routing::Route<Body>>,
           8  +
    error_serialization_operation: Option<::aws_smithy_legacy_http_server::routing::Route<Body>>,
           9  +
    recursive_union_operation: Option<::aws_smithy_legacy_http_server::routing::Route<Body>>,
          10  +
    simple_struct_operation: Option<::aws_smithy_legacy_http_server::routing::Route<Body>>,
          11  +
    single_member_struct_operation: Option<::aws_smithy_legacy_http_server::routing::Route<Body>>,
          12  +
    streaming_operation: Option<::aws_smithy_legacy_http_server::routing::Route<Body>>,
          13  +
    streaming_operation_with_initial_data:
          14  +
        Option<::aws_smithy_legacy_http_server::routing::Route<Body>>,
          15  +
    streaming_operation_with_initial_response:
          16  +
        Option<::aws_smithy_legacy_http_server::routing::Route<Body>>,
          17  +
    streaming_operation_with_optional_data:
          18  +
        Option<::aws_smithy_legacy_http_server::routing::Route<Body>>,
          19  +
    layer: L,
          20  +
    http_plugin: HttpPl,
          21  +
    model_plugin: ModelPl,
          22  +
}
          23  +
          24  +
impl<Body, L, HttpPl, ModelPl> RpcV2CborServiceBuilder<Body, L, HttpPl, ModelPl> {
          25  +
    /// Sets the [`ComplexStructOperation`](crate::operation_shape::ComplexStructOperation) operation.
          26  +
    ///
          27  +
    /// This should be an async function satisfying the [`Handler`](::aws_smithy_legacy_http_server::operation::Handler) trait.
          28  +
    /// See the [operation module documentation](::aws_smithy_legacy_http_server::operation) for more information.
          29  +
    ///
          30  +
    /// # Example
          31  +
    ///
          32  +
    /// ```no_run
          33  +
    /// use rpcv2cbor_extras_http0x::{RpcV2CborService, RpcV2CborServiceConfig};
          34  +
    ///
          35  +
    /// use rpcv2cbor_extras_http0x::{input, output, error};
          36  +
    ///
          37  +
    /// async fn handler(input: input::ComplexStructOperationInput) -> Result<output::ComplexStructOperationOutput, error::ComplexStructOperationError> {
          38  +
    ///     todo!()
          39  +
    /// }
          40  +
    ///
          41  +
    /// let config = RpcV2CborServiceConfig::builder().build();
          42  +
    /// let app = RpcV2CborService::builder(config)
          43  +
    ///     .complex_struct_operation(handler)
          44  +
    ///     /* Set other handlers */
          45  +
    ///     .build()
          46  +
    ///     .unwrap();
          47  +
    /// # let app: RpcV2CborService<::aws_smithy_legacy_http_server::routing::RoutingService<::aws_smithy_legacy_http_server::protocol::rpc_v2_cbor::router::RpcV2CborRouter<::aws_smithy_legacy_http_server::routing::Route>, ::aws_smithy_legacy_http_server::protocol::rpc_v2_cbor::RpcV2Cbor>> = app;
          48  +
    /// ```
          49  +
    ///
          50  +
                    pub fn complex_struct_operation<HandlerType, HandlerExtractors, UpgradeExtractors>(self, handler: HandlerType) -> Self
          51  +
                    where
          52  +
                        HandlerType: ::aws_smithy_legacy_http_server::operation::Handler<crate::operation_shape::ComplexStructOperation, HandlerExtractors>,
          53  +
          54  +
                        ModelPl: ::aws_smithy_legacy_http_server::plugin::Plugin<
          55  +
                            RpcV2CborService<L>,
          56  +
                            crate::operation_shape::ComplexStructOperation,
          57  +
                            ::aws_smithy_legacy_http_server::operation::IntoService<crate::operation_shape::ComplexStructOperation, HandlerType>
          58  +
                        >,
          59  +
                        ::aws_smithy_legacy_http_server::operation::UpgradePlugin::<UpgradeExtractors>: ::aws_smithy_legacy_http_server::plugin::Plugin<
          60  +
                            RpcV2CborService<L>,
          61  +
                            crate::operation_shape::ComplexStructOperation,
          62  +
                            ModelPl::Output
          63  +
                        >,
          64  +
                        HttpPl: ::aws_smithy_legacy_http_server::plugin::Plugin<
          65  +
                            RpcV2CborService<L>,
          66  +
                            crate::operation_shape::ComplexStructOperation,
          67  +
                            <
          68  +
                                ::aws_smithy_legacy_http_server::operation::UpgradePlugin::<UpgradeExtractors>
          69  +
                                as ::aws_smithy_legacy_http_server::plugin::Plugin<
          70  +
                                    RpcV2CborService<L>,
          71  +
                                    crate::operation_shape::ComplexStructOperation,
          72  +
                                    ModelPl::Output
          73  +
                                >
          74  +
                            >::Output
          75  +
                        >,
          76  +
          77  +
                        HttpPl::Output: ::tower::Service<::http::Request<Body>, Response = ::http::Response<::aws_smithy_legacy_http_server::body::BoxBody>, Error = ::std::convert::Infallible> + Clone + Send + 'static,
          78  +
                        <HttpPl::Output as ::tower::Service<::http::Request<Body>>>::Future: Send + 'static,
          79  +
          80  +
                    {
          81  +
        use ::aws_smithy_legacy_http_server::operation::OperationShapeExt;
          82  +
        use ::aws_smithy_legacy_http_server::plugin::Plugin;
          83  +
        let svc = crate::operation_shape::ComplexStructOperation::from_handler(handler);
          84  +
        let svc = self.model_plugin.apply(svc);
          85  +
        let svc =
          86  +
            ::aws_smithy_legacy_http_server::operation::UpgradePlugin::<UpgradeExtractors>::new()
          87  +
                .apply(svc);
          88  +
        let svc = self.http_plugin.apply(svc);
          89  +
        self.complex_struct_operation_custom(svc)
          90  +
    }
          91  +
          92  +
    /// Sets the [`ComplexStructOperation`](crate::operation_shape::ComplexStructOperation) operation.
          93  +
    ///
          94  +
    /// This should be an async function satisfying the [`Handler`](::aws_smithy_legacy_http_server::operation::Handler) trait.
          95  +
    /// See the [operation module documentation](::aws_smithy_legacy_http_server::operation) for more information.
          96  +
    ///
          97  +
    /// # Example
          98  +
    ///
          99  +
    /// ```no_run
         100  +
    /// use rpcv2cbor_extras_http0x::{RpcV2CborService, RpcV2CborServiceConfig};
         101  +
    ///
         102  +
    /// use rpcv2cbor_extras_http0x::{input, output, error};
         103  +
    ///
         104  +
    /// async fn handler(input: input::ComplexStructOperationInput) -> Result<output::ComplexStructOperationOutput, error::ComplexStructOperationError> {
         105  +
    ///     todo!()
         106  +
    /// }
         107  +
    ///
         108  +
    /// let config = RpcV2CborServiceConfig::builder().build();
         109  +
    /// let svc = ::tower::util::service_fn(handler);
         110  +
    /// let app = RpcV2CborService::builder(config)
         111  +
    ///     .complex_struct_operation_service(svc)
         112  +
    ///     /* Set other handlers */
         113  +
    ///     .build()
         114  +
    ///     .unwrap();
         115  +
    /// # let app: RpcV2CborService<::aws_smithy_legacy_http_server::routing::RoutingService<::aws_smithy_legacy_http_server::protocol::rpc_v2_cbor::router::RpcV2CborRouter<::aws_smithy_legacy_http_server::routing::Route>, ::aws_smithy_legacy_http_server::protocol::rpc_v2_cbor::RpcV2Cbor>> = app;
         116  +
    /// ```
         117  +
    ///
         118  +
                    pub fn complex_struct_operation_service<S, ServiceExtractors, UpgradeExtractors>(self, service: S) -> Self
         119  +
                    where
         120  +
                        S: ::aws_smithy_legacy_http_server::operation::OperationService<crate::operation_shape::ComplexStructOperation, ServiceExtractors>,
         121  +
         122  +
                        ModelPl: ::aws_smithy_legacy_http_server::plugin::Plugin<
         123  +
                            RpcV2CborService<L>,
         124  +
                            crate::operation_shape::ComplexStructOperation,
         125  +
                            ::aws_smithy_legacy_http_server::operation::Normalize<crate::operation_shape::ComplexStructOperation, S>
         126  +
                        >,
         127  +
                        ::aws_smithy_legacy_http_server::operation::UpgradePlugin::<UpgradeExtractors>: ::aws_smithy_legacy_http_server::plugin::Plugin<
         128  +
                            RpcV2CborService<L>,
         129  +
                            crate::operation_shape::ComplexStructOperation,
         130  +
                            ModelPl::Output
         131  +
                        >,
         132  +
                        HttpPl: ::aws_smithy_legacy_http_server::plugin::Plugin<
         133  +
                            RpcV2CborService<L>,
         134  +
                            crate::operation_shape::ComplexStructOperation,
         135  +
                            <
         136  +
                                ::aws_smithy_legacy_http_server::operation::UpgradePlugin::<UpgradeExtractors>
         137  +
                                as ::aws_smithy_legacy_http_server::plugin::Plugin<
         138  +
                                    RpcV2CborService<L>,
         139  +
                                    crate::operation_shape::ComplexStructOperation,
         140  +
                                    ModelPl::Output
         141  +
                                >
         142  +
                            >::Output
         143  +
                        >,
         144  +
         145  +
                        HttpPl::Output: ::tower::Service<::http::Request<Body>, Response = ::http::Response<::aws_smithy_legacy_http_server::body::BoxBody>, Error = ::std::convert::Infallible> + Clone + Send + 'static,
         146  +
                        <HttpPl::Output as ::tower::Service<::http::Request<Body>>>::Future: Send + 'static,
         147  +
         148  +
                    {
         149  +
        use ::aws_smithy_legacy_http_server::operation::OperationShapeExt;
         150  +
        use ::aws_smithy_legacy_http_server::plugin::Plugin;
         151  +
        let svc = crate::operation_shape::ComplexStructOperation::from_service(service);
         152  +
        let svc = self.model_plugin.apply(svc);
         153  +
        let svc =
         154  +
            ::aws_smithy_legacy_http_server::operation::UpgradePlugin::<UpgradeExtractors>::new()
         155  +
                .apply(svc);
         156  +
        let svc = self.http_plugin.apply(svc);
         157  +
        self.complex_struct_operation_custom(svc)
         158  +
    }
         159  +
         160  +
    /// Sets the [`ComplexStructOperation`](crate::operation_shape::ComplexStructOperation) to a custom [`Service`](tower::Service).
         161  +
    /// not constrained by the Smithy contract.
         162  +
    fn complex_struct_operation_custom<S>(mut self, svc: S) -> Self
         163  +
    where
         164  +
        S: ::tower::Service<
         165  +
                ::http::Request<Body>,
         166  +
                Response = ::http::Response<::aws_smithy_legacy_http_server::body::BoxBody>,
         167  +
                Error = ::std::convert::Infallible,
         168  +
            > + Clone
         169  +
            + Send
         170  +
            + 'static,
         171  +
        S::Future: Send + 'static,
         172  +
    {
         173  +
        self.complex_struct_operation =
         174  +
            Some(::aws_smithy_legacy_http_server::routing::Route::new(svc));
         175  +
        self
         176  +
    }
         177  +
         178  +
    /// Sets the [`EmptyStructOperation`](crate::operation_shape::EmptyStructOperation) operation.
         179  +
    ///
         180  +
    /// This should be an async function satisfying the [`Handler`](::aws_smithy_legacy_http_server::operation::Handler) trait.
         181  +
    /// See the [operation module documentation](::aws_smithy_legacy_http_server::operation) for more information.
         182  +
    ///
         183  +
    /// # Example
         184  +
    ///
         185  +
    /// ```no_run
         186  +
    /// use rpcv2cbor_extras_http0x::{RpcV2CborService, RpcV2CborServiceConfig};
         187  +
    ///
         188  +
    /// use rpcv2cbor_extras_http0x::{input, output, error};
         189  +
    ///
         190  +
    /// async fn handler(input: input::EmptyStructOperationInput) -> output::EmptyStructOperationOutput {
         191  +
    ///     todo!()
         192  +
    /// }
         193  +
    ///
         194  +
    /// let config = RpcV2CborServiceConfig::builder().build();
         195  +
    /// let app = RpcV2CborService::builder(config)
         196  +
    ///     .empty_struct_operation(handler)
         197  +
    ///     /* Set other handlers */
         198  +
    ///     .build()
         199  +
    ///     .unwrap();
         200  +
    /// # let app: RpcV2CborService<::aws_smithy_legacy_http_server::routing::RoutingService<::aws_smithy_legacy_http_server::protocol::rpc_v2_cbor::router::RpcV2CborRouter<::aws_smithy_legacy_http_server::routing::Route>, ::aws_smithy_legacy_http_server::protocol::rpc_v2_cbor::RpcV2Cbor>> = app;
         201  +
    /// ```
         202  +
    ///
         203  +
                    pub fn empty_struct_operation<HandlerType, HandlerExtractors, UpgradeExtractors>(self, handler: HandlerType) -> Self
         204  +
                    where
         205  +
                        HandlerType: ::aws_smithy_legacy_http_server::operation::Handler<crate::operation_shape::EmptyStructOperation, HandlerExtractors>,
         206  +
         207  +
                        ModelPl: ::aws_smithy_legacy_http_server::plugin::Plugin<
         208  +
                            RpcV2CborService<L>,
         209  +
                            crate::operation_shape::EmptyStructOperation,
         210  +
                            ::aws_smithy_legacy_http_server::operation::IntoService<crate::operation_shape::EmptyStructOperation, HandlerType>
         211  +
                        >,
         212  +
                        ::aws_smithy_legacy_http_server::operation::UpgradePlugin::<UpgradeExtractors>: ::aws_smithy_legacy_http_server::plugin::Plugin<
         213  +
                            RpcV2CborService<L>,
         214  +
                            crate::operation_shape::EmptyStructOperation,
         215  +
                            ModelPl::Output
         216  +
                        >,
         217  +
                        HttpPl: ::aws_smithy_legacy_http_server::plugin::Plugin<
         218  +
                            RpcV2CborService<L>,
         219  +
                            crate::operation_shape::EmptyStructOperation,
         220  +
                            <
         221  +
                                ::aws_smithy_legacy_http_server::operation::UpgradePlugin::<UpgradeExtractors>
         222  +
                                as ::aws_smithy_legacy_http_server::plugin::Plugin<
         223  +
                                    RpcV2CborService<L>,
         224  +
                                    crate::operation_shape::EmptyStructOperation,
         225  +
                                    ModelPl::Output
         226  +
                                >
         227  +
                            >::Output
         228  +
                        >,
         229  +
         230  +
                        HttpPl::Output: ::tower::Service<::http::Request<Body>, Response = ::http::Response<::aws_smithy_legacy_http_server::body::BoxBody>, Error = ::std::convert::Infallible> + Clone + Send + 'static,
         231  +
                        <HttpPl::Output as ::tower::Service<::http::Request<Body>>>::Future: Send + 'static,
         232  +
         233  +
                    {
         234  +
        use ::aws_smithy_legacy_http_server::operation::OperationShapeExt;
         235  +
        use ::aws_smithy_legacy_http_server::plugin::Plugin;
         236  +
        let svc = crate::operation_shape::EmptyStructOperation::from_handler(handler);
         237  +
        let svc = self.model_plugin.apply(svc);
         238  +
        let svc =
         239  +
            ::aws_smithy_legacy_http_server::operation::UpgradePlugin::<UpgradeExtractors>::new()
         240  +
                .apply(svc);
         241  +
        let svc = self.http_plugin.apply(svc);
         242  +
        self.empty_struct_operation_custom(svc)
         243  +
    }
         244  +
         245  +
    /// Sets the [`EmptyStructOperation`](crate::operation_shape::EmptyStructOperation) operation.
         246  +
    ///
         247  +
    /// This should be an async function satisfying the [`Handler`](::aws_smithy_legacy_http_server::operation::Handler) trait.
         248  +
    /// See the [operation module documentation](::aws_smithy_legacy_http_server::operation) for more information.
         249  +
    ///
         250  +
    /// # Example
         251  +
    ///
         252  +
    /// ```no_run
         253  +
    /// use rpcv2cbor_extras_http0x::{RpcV2CborService, RpcV2CborServiceConfig};
         254  +
    ///
         255  +
    /// use rpcv2cbor_extras_http0x::{input, output, error};
         256  +
    ///
         257  +
    /// async fn handler(input: input::EmptyStructOperationInput) -> Result<output::EmptyStructOperationOutput, std::convert::Infallible> {
         258  +
    ///     todo!()
         259  +
    /// }
         260  +
    ///
         261  +
    /// let config = RpcV2CborServiceConfig::builder().build();
         262  +
    /// let svc = ::tower::util::service_fn(handler);
         263  +
    /// let app = RpcV2CborService::builder(config)
         264  +
    ///     .empty_struct_operation_service(svc)
         265  +
    ///     /* Set other handlers */
         266  +
    ///     .build()
         267  +
    ///     .unwrap();
         268  +
    /// # let app: RpcV2CborService<::aws_smithy_legacy_http_server::routing::RoutingService<::aws_smithy_legacy_http_server::protocol::rpc_v2_cbor::router::RpcV2CborRouter<::aws_smithy_legacy_http_server::routing::Route>, ::aws_smithy_legacy_http_server::protocol::rpc_v2_cbor::RpcV2Cbor>> = app;
         269  +
    /// ```
         270  +
    ///
         271  +
                    pub fn empty_struct_operation_service<S, ServiceExtractors, UpgradeExtractors>(self, service: S) -> Self
         272  +
                    where
         273  +
                        S: ::aws_smithy_legacy_http_server::operation::OperationService<crate::operation_shape::EmptyStructOperation, ServiceExtractors>,
         274  +
         275  +
                        ModelPl: ::aws_smithy_legacy_http_server::plugin::Plugin<
         276  +
                            RpcV2CborService<L>,
         277  +
                            crate::operation_shape::EmptyStructOperation,
         278  +
                            ::aws_smithy_legacy_http_server::operation::Normalize<crate::operation_shape::EmptyStructOperation, S>
         279  +
                        >,
         280  +
                        ::aws_smithy_legacy_http_server::operation::UpgradePlugin::<UpgradeExtractors>: ::aws_smithy_legacy_http_server::plugin::Plugin<
         281  +
                            RpcV2CborService<L>,
         282  +
                            crate::operation_shape::EmptyStructOperation,
         283  +
                            ModelPl::Output
         284  +
                        >,
         285  +
                        HttpPl: ::aws_smithy_legacy_http_server::plugin::Plugin<
         286  +
                            RpcV2CborService<L>,
         287  +
                            crate::operation_shape::EmptyStructOperation,
         288  +
                            <
         289  +
                                ::aws_smithy_legacy_http_server::operation::UpgradePlugin::<UpgradeExtractors>
         290  +
                                as ::aws_smithy_legacy_http_server::plugin::Plugin<
         291  +
                                    RpcV2CborService<L>,
         292  +
                                    crate::operation_shape::EmptyStructOperation,
         293  +
                                    ModelPl::Output
         294  +
                                >
         295  +
                            >::Output
         296  +
                        >,
         297  +
         298  +
                        HttpPl::Output: ::tower::Service<::http::Request<Body>, Response = ::http::Response<::aws_smithy_legacy_http_server::body::BoxBody>, Error = ::std::convert::Infallible> + Clone + Send + 'static,
         299  +
                        <HttpPl::Output as ::tower::Service<::http::Request<Body>>>::Future: Send + 'static,
         300  +
         301  +
                    {
         302  +
        use ::aws_smithy_legacy_http_server::operation::OperationShapeExt;
         303  +
        use ::aws_smithy_legacy_http_server::plugin::Plugin;
         304  +
        let svc = crate::operation_shape::EmptyStructOperation::from_service(service);
         305  +
        let svc = self.model_plugin.apply(svc);
         306  +
        let svc =
         307  +
            ::aws_smithy_legacy_http_server::operation::UpgradePlugin::<UpgradeExtractors>::new()
         308  +
                .apply(svc);
         309  +
        let svc = self.http_plugin.apply(svc);
         310  +
        self.empty_struct_operation_custom(svc)
         311  +
    }
         312  +
         313  +
    /// Sets the [`EmptyStructOperation`](crate::operation_shape::EmptyStructOperation) to a custom [`Service`](tower::Service).
         314  +
    /// not constrained by the Smithy contract.
         315  +
    fn empty_struct_operation_custom<S>(mut self, svc: S) -> Self
         316  +
    where
         317  +
        S: ::tower::Service<
         318  +
                ::http::Request<Body>,
         319  +
                Response = ::http::Response<::aws_smithy_legacy_http_server::body::BoxBody>,
         320  +
                Error = ::std::convert::Infallible,
         321  +
            > + Clone
         322  +
            + Send
         323  +
            + 'static,
         324  +
        S::Future: Send + 'static,
         325  +
    {
         326  +
        self.empty_struct_operation =
         327  +
            Some(::aws_smithy_legacy_http_server::routing::Route::new(svc));
         328  +
        self
         329  +
    }
         330  +
         331  +
    /// Sets the [`ErrorSerializationOperation`](crate::operation_shape::ErrorSerializationOperation) operation.
         332  +
    ///
         333  +
    /// This should be an async function satisfying the [`Handler`](::aws_smithy_legacy_http_server::operation::Handler) trait.
         334  +
    /// See the [operation module documentation](::aws_smithy_legacy_http_server::operation) for more information.
         335  +
    ///
         336  +
    /// # Example
         337  +
    ///
         338  +
    /// ```no_run
         339  +
    /// use rpcv2cbor_extras_http0x::{RpcV2CborService, RpcV2CborServiceConfig};
         340  +
    ///
         341  +
    /// use rpcv2cbor_extras_http0x::{input, output, error};
         342  +
    ///
         343  +
    /// async fn handler(input: input::ErrorSerializationOperationInput) -> Result<output::ErrorSerializationOperationOutput, error::ErrorSerializationOperationError> {
         344  +
    ///     todo!()
         345  +
    /// }
         346  +
    ///
         347  +
    /// let config = RpcV2CborServiceConfig::builder().build();
         348  +
    /// let app = RpcV2CborService::builder(config)
         349  +
    ///     .error_serialization_operation(handler)
         350  +
    ///     /* Set other handlers */
         351  +
    ///     .build()
         352  +
    ///     .unwrap();
         353  +
    /// # let app: RpcV2CborService<::aws_smithy_legacy_http_server::routing::RoutingService<::aws_smithy_legacy_http_server::protocol::rpc_v2_cbor::router::RpcV2CborRouter<::aws_smithy_legacy_http_server::routing::Route>, ::aws_smithy_legacy_http_server::protocol::rpc_v2_cbor::RpcV2Cbor>> = app;
         354  +
    /// ```
         355  +
    ///
         356  +
                    pub fn error_serialization_operation<HandlerType, HandlerExtractors, UpgradeExtractors>(self, handler: HandlerType) -> Self
         357  +
                    where
         358  +
                        HandlerType: ::aws_smithy_legacy_http_server::operation::Handler<crate::operation_shape::ErrorSerializationOperation, HandlerExtractors>,
         359  +
         360  +
                        ModelPl: ::aws_smithy_legacy_http_server::plugin::Plugin<
         361  +
                            RpcV2CborService<L>,
         362  +
                            crate::operation_shape::ErrorSerializationOperation,
         363  +
                            ::aws_smithy_legacy_http_server::operation::IntoService<crate::operation_shape::ErrorSerializationOperation, HandlerType>
         364  +
                        >,
         365  +
                        ::aws_smithy_legacy_http_server::operation::UpgradePlugin::<UpgradeExtractors>: ::aws_smithy_legacy_http_server::plugin::Plugin<
         366  +
                            RpcV2CborService<L>,
         367  +
                            crate::operation_shape::ErrorSerializationOperation,
         368  +
                            ModelPl::Output
         369  +
                        >,
         370  +
                        HttpPl: ::aws_smithy_legacy_http_server::plugin::Plugin<
         371  +
                            RpcV2CborService<L>,
         372  +
                            crate::operation_shape::ErrorSerializationOperation,
         373  +
                            <
         374  +
                                ::aws_smithy_legacy_http_server::operation::UpgradePlugin::<UpgradeExtractors>
         375  +
                                as ::aws_smithy_legacy_http_server::plugin::Plugin<
         376  +
                                    RpcV2CborService<L>,
         377  +
                                    crate::operation_shape::ErrorSerializationOperation,
         378  +
                                    ModelPl::Output
         379  +
                                >
         380  +
                            >::Output
         381  +
                        >,
         382  +
         383  +
                        HttpPl::Output: ::tower::Service<::http::Request<Body>, Response = ::http::Response<::aws_smithy_legacy_http_server::body::BoxBody>, Error = ::std::convert::Infallible> + Clone + Send + 'static,
         384  +
                        <HttpPl::Output as ::tower::Service<::http::Request<Body>>>::Future: Send + 'static,
         385  +
         386  +
                    {
         387  +
        use ::aws_smithy_legacy_http_server::operation::OperationShapeExt;
         388  +
        use ::aws_smithy_legacy_http_server::plugin::Plugin;
         389  +
        let svc = crate::operation_shape::ErrorSerializationOperation::from_handler(handler);
         390  +
        let svc = self.model_plugin.apply(svc);
         391  +
        let svc =
         392  +
            ::aws_smithy_legacy_http_server::operation::UpgradePlugin::<UpgradeExtractors>::new()
         393  +
                .apply(svc);
         394  +
        let svc = self.http_plugin.apply(svc);
         395  +
        self.error_serialization_operation_custom(svc)
         396  +
    }
         397  +
         398  +
    /// Sets the [`ErrorSerializationOperation`](crate::operation_shape::ErrorSerializationOperation) operation.
         399  +
    ///
         400  +
    /// This should be an async function satisfying the [`Handler`](::aws_smithy_legacy_http_server::operation::Handler) trait.
         401  +
    /// See the [operation module documentation](::aws_smithy_legacy_http_server::operation) for more information.
         402  +
    ///
         403  +
    /// # Example
         404  +
    ///
         405  +
    /// ```no_run
         406  +
    /// use rpcv2cbor_extras_http0x::{RpcV2CborService, RpcV2CborServiceConfig};
         407  +
    ///
         408  +
    /// use rpcv2cbor_extras_http0x::{input, output, error};
         409  +
    ///
         410  +
    /// async fn handler(input: input::ErrorSerializationOperationInput) -> Result<output::ErrorSerializationOperationOutput, error::ErrorSerializationOperationError> {
         411  +
    ///     todo!()
         412  +
    /// }
         413  +
    ///
         414  +
    /// let config = RpcV2CborServiceConfig::builder().build();
         415  +
    /// let svc = ::tower::util::service_fn(handler);
         416  +
    /// let app = RpcV2CborService::builder(config)
         417  +
    ///     .error_serialization_operation_service(svc)
         418  +
    ///     /* Set other handlers */
         419  +
    ///     .build()
         420  +
    ///     .unwrap();
         421  +
    /// # let app: RpcV2CborService<::aws_smithy_legacy_http_server::routing::RoutingService<::aws_smithy_legacy_http_server::protocol::rpc_v2_cbor::router::RpcV2CborRouter<::aws_smithy_legacy_http_server::routing::Route>, ::aws_smithy_legacy_http_server::protocol::rpc_v2_cbor::RpcV2Cbor>> = app;
         422  +
    /// ```
         423  +
    ///
         424  +
                    pub fn error_serialization_operation_service<S, ServiceExtractors, UpgradeExtractors>(self, service: S) -> Self
         425  +
                    where
         426  +
                        S: ::aws_smithy_legacy_http_server::operation::OperationService<crate::operation_shape::ErrorSerializationOperation, ServiceExtractors>,
         427  +
         428  +
                        ModelPl: ::aws_smithy_legacy_http_server::plugin::Plugin<
         429  +
                            RpcV2CborService<L>,
         430  +
                            crate::operation_shape::ErrorSerializationOperation,
         431  +
                            ::aws_smithy_legacy_http_server::operation::Normalize<crate::operation_shape::ErrorSerializationOperation, S>
         432  +
                        >,
         433  +
                        ::aws_smithy_legacy_http_server::operation::UpgradePlugin::<UpgradeExtractors>: ::aws_smithy_legacy_http_server::plugin::Plugin<
         434  +
                            RpcV2CborService<L>,
         435  +
                            crate::operation_shape::ErrorSerializationOperation,
         436  +
                            ModelPl::Output
         437  +
                        >,
         438  +
                        HttpPl: ::aws_smithy_legacy_http_server::plugin::Plugin<
         439  +
                            RpcV2CborService<L>,
         440  +
                            crate::operation_shape::ErrorSerializationOperation,
         441  +
                            <
         442  +
                                ::aws_smithy_legacy_http_server::operation::UpgradePlugin::<UpgradeExtractors>
         443  +
                                as ::aws_smithy_legacy_http_server::plugin::Plugin<
         444  +
                                    RpcV2CborService<L>,
         445  +
                                    crate::operation_shape::ErrorSerializationOperation,
         446  +
                                    ModelPl::Output
         447  +
                                >
         448  +
                            >::Output
         449  +
                        >,
         450  +
         451  +
                        HttpPl::Output: ::tower::Service<::http::Request<Body>, Response = ::http::Response<::aws_smithy_legacy_http_server::body::BoxBody>, Error = ::std::convert::Infallible> + Clone + Send + 'static,
         452  +
                        <HttpPl::Output as ::tower::Service<::http::Request<Body>>>::Future: Send + 'static,
         453  +
         454  +
                    {
         455  +
        use ::aws_smithy_legacy_http_server::operation::OperationShapeExt;
         456  +
        use ::aws_smithy_legacy_http_server::plugin::Plugin;
         457  +
        let svc = crate::operation_shape::ErrorSerializationOperation::from_service(service);
         458  +
        let svc = self.model_plugin.apply(svc);
         459  +
        let svc =
         460  +
            ::aws_smithy_legacy_http_server::operation::UpgradePlugin::<UpgradeExtractors>::new()
         461  +
                .apply(svc);
         462  +
        let svc = self.http_plugin.apply(svc);
         463  +
        self.error_serialization_operation_custom(svc)
         464  +
    }
         465  +
         466  +
    /// Sets the [`ErrorSerializationOperation`](crate::operation_shape::ErrorSerializationOperation) to a custom [`Service`](tower::Service).
         467  +
    /// not constrained by the Smithy contract.
         468  +
    fn error_serialization_operation_custom<S>(mut self, svc: S) -> Self
         469  +
    where
         470  +
        S: ::tower::Service<
         471  +
                ::http::Request<Body>,
         472  +
                Response = ::http::Response<::aws_smithy_legacy_http_server::body::BoxBody>,
         473  +
                Error = ::std::convert::Infallible,
         474  +
            > + Clone
         475  +
            + Send
         476  +
            + 'static,
         477  +
        S::Future: Send + 'static,
         478  +
    {
         479  +
        self.error_serialization_operation =
         480  +
            Some(::aws_smithy_legacy_http_server::routing::Route::new(svc));
         481  +
        self
         482  +
    }
         483  +
         484  +
    /// Sets the [`RecursiveUnionOperation`](crate::operation_shape::RecursiveUnionOperation) operation.
         485  +
    ///
         486  +
    /// This should be an async function satisfying the [`Handler`](::aws_smithy_legacy_http_server::operation::Handler) trait.
         487  +
    /// See the [operation module documentation](::aws_smithy_legacy_http_server::operation) for more information.
         488  +
    ///
         489  +
    /// # Example
         490  +
    ///
         491  +
    /// ```no_run
         492  +
    /// use rpcv2cbor_extras_http0x::{RpcV2CborService, RpcV2CborServiceConfig};
         493  +
    ///
         494  +
    /// use rpcv2cbor_extras_http0x::{input, output, error};
         495  +
    ///
         496  +
    /// async fn handler(input: input::RecursiveUnionOperationInput) -> output::RecursiveUnionOperationOutput {
         497  +
    ///     todo!()
         498  +
    /// }
         499  +
    ///
         500  +
    /// let config = RpcV2CborServiceConfig::builder().build();
         501  +
    /// let app = RpcV2CborService::builder(config)
         502  +
    ///     .recursive_union_operation(handler)
         503  +
    ///     /* Set other handlers */
         504  +
    ///     .build()
         505  +
    ///     .unwrap();
         506  +
    /// # let app: RpcV2CborService<::aws_smithy_legacy_http_server::routing::RoutingService<::aws_smithy_legacy_http_server::protocol::rpc_v2_cbor::router::RpcV2CborRouter<::aws_smithy_legacy_http_server::routing::Route>, ::aws_smithy_legacy_http_server::protocol::rpc_v2_cbor::RpcV2Cbor>> = app;
         507  +
    /// ```
         508  +
    ///
         509  +
                    pub fn recursive_union_operation<HandlerType, HandlerExtractors, UpgradeExtractors>(self, handler: HandlerType) -> Self
         510  +
                    where
         511  +
                        HandlerType: ::aws_smithy_legacy_http_server::operation::Handler<crate::operation_shape::RecursiveUnionOperation, HandlerExtractors>,
         512  +
         513  +
                        ModelPl: ::aws_smithy_legacy_http_server::plugin::Plugin<
         514  +
                            RpcV2CborService<L>,
         515  +
                            crate::operation_shape::RecursiveUnionOperation,
         516  +
                            ::aws_smithy_legacy_http_server::operation::IntoService<crate::operation_shape::RecursiveUnionOperation, HandlerType>
         517  +
                        >,
         518  +
                        ::aws_smithy_legacy_http_server::operation::UpgradePlugin::<UpgradeExtractors>: ::aws_smithy_legacy_http_server::plugin::Plugin<
         519  +
                            RpcV2CborService<L>,
         520  +
                            crate::operation_shape::RecursiveUnionOperation,
         521  +
                            ModelPl::Output
         522  +
                        >,
         523  +
                        HttpPl: ::aws_smithy_legacy_http_server::plugin::Plugin<
         524  +
                            RpcV2CborService<L>,
         525  +
                            crate::operation_shape::RecursiveUnionOperation,
         526  +
                            <
         527  +
                                ::aws_smithy_legacy_http_server::operation::UpgradePlugin::<UpgradeExtractors>
         528  +
                                as ::aws_smithy_legacy_http_server::plugin::Plugin<
         529  +
                                    RpcV2CborService<L>,
         530  +
                                    crate::operation_shape::RecursiveUnionOperation,
         531  +
                                    ModelPl::Output
         532  +
                                >
         533  +
                            >::Output
         534  +
                        >,
         535  +
         536  +
                        HttpPl::Output: ::tower::Service<::http::Request<Body>, Response = ::http::Response<::aws_smithy_legacy_http_server::body::BoxBody>, Error = ::std::convert::Infallible> + Clone + Send + 'static,
         537  +
                        <HttpPl::Output as ::tower::Service<::http::Request<Body>>>::Future: Send + 'static,
         538  +
         539  +
                    {
         540  +
        use ::aws_smithy_legacy_http_server::operation::OperationShapeExt;
         541  +
        use ::aws_smithy_legacy_http_server::plugin::Plugin;
         542  +
        let svc = crate::operation_shape::RecursiveUnionOperation::from_handler(handler);
         543  +
        let svc = self.model_plugin.apply(svc);
         544  +
        let svc =
         545  +
            ::aws_smithy_legacy_http_server::operation::UpgradePlugin::<UpgradeExtractors>::new()
         546  +
                .apply(svc);
         547  +
        let svc = self.http_plugin.apply(svc);
         548  +
        self.recursive_union_operation_custom(svc)
         549  +
    }
         550  +
         551  +
    /// Sets the [`RecursiveUnionOperation`](crate::operation_shape::RecursiveUnionOperation) operation.
         552  +
    ///
         553  +
    /// This should be an async function satisfying the [`Handler`](::aws_smithy_legacy_http_server::operation::Handler) trait.
         554  +
    /// See the [operation module documentation](::aws_smithy_legacy_http_server::operation) for more information.
         555  +
    ///
         556  +
    /// # Example
         557  +
    ///
         558  +
    /// ```no_run
         559  +
    /// use rpcv2cbor_extras_http0x::{RpcV2CborService, RpcV2CborServiceConfig};
         560  +
    ///
         561  +
    /// use rpcv2cbor_extras_http0x::{input, output, error};
         562  +
    ///
         563  +
    /// async fn handler(input: input::RecursiveUnionOperationInput) -> Result<output::RecursiveUnionOperationOutput, std::convert::Infallible> {
         564  +
    ///     todo!()
         565  +
    /// }
         566  +
    ///
         567  +
    /// let config = RpcV2CborServiceConfig::builder().build();
         568  +
    /// let svc = ::tower::util::service_fn(handler);
         569  +
    /// let app = RpcV2CborService::builder(config)
         570  +
    ///     .recursive_union_operation_service(svc)
         571  +
    ///     /* Set other handlers */
         572  +
    ///     .build()
         573  +
    ///     .unwrap();
         574  +
    /// # let app: RpcV2CborService<::aws_smithy_legacy_http_server::routing::RoutingService<::aws_smithy_legacy_http_server::protocol::rpc_v2_cbor::router::RpcV2CborRouter<::aws_smithy_legacy_http_server::routing::Route>, ::aws_smithy_legacy_http_server::protocol::rpc_v2_cbor::RpcV2Cbor>> = app;
         575  +
    /// ```
         576  +
    ///
         577  +
                    pub fn recursive_union_operation_service<S, ServiceExtractors, UpgradeExtractors>(self, service: S) -> Self
         578  +
                    where
         579  +
                        S: ::aws_smithy_legacy_http_server::operation::OperationService<crate::operation_shape::RecursiveUnionOperation, ServiceExtractors>,
         580  +
         581  +
                        ModelPl: ::aws_smithy_legacy_http_server::plugin::Plugin<
         582  +
                            RpcV2CborService<L>,
         583  +
                            crate::operation_shape::RecursiveUnionOperation,
         584  +
                            ::aws_smithy_legacy_http_server::operation::Normalize<crate::operation_shape::RecursiveUnionOperation, S>
         585  +
                        >,
         586  +
                        ::aws_smithy_legacy_http_server::operation::UpgradePlugin::<UpgradeExtractors>: ::aws_smithy_legacy_http_server::plugin::Plugin<
         587  +
                            RpcV2CborService<L>,
         588  +
                            crate::operation_shape::RecursiveUnionOperation,
         589  +
                            ModelPl::Output
         590  +
                        >,
         591  +
                        HttpPl: ::aws_smithy_legacy_http_server::plugin::Plugin<
         592  +
                            RpcV2CborService<L>,
         593  +
                            crate::operation_shape::RecursiveUnionOperation,
         594  +
                            <
         595  +
                                ::aws_smithy_legacy_http_server::operation::UpgradePlugin::<UpgradeExtractors>
         596  +
                                as ::aws_smithy_legacy_http_server::plugin::Plugin<
         597  +
                                    RpcV2CborService<L>,
         598  +
                                    crate::operation_shape::RecursiveUnionOperation,
         599  +
                                    ModelPl::Output
         600  +
                                >
         601  +
                            >::Output
         602  +
                        >,
         603  +
         604  +
                        HttpPl::Output: ::tower::Service<::http::Request<Body>, Response = ::http::Response<::aws_smithy_legacy_http_server::body::BoxBody>, Error = ::std::convert::Infallible> + Clone + Send + 'static,
         605  +
                        <HttpPl::Output as ::tower::Service<::http::Request<Body>>>::Future: Send + 'static,
         606  +
         607  +
                    {
         608  +
        use ::aws_smithy_legacy_http_server::operation::OperationShapeExt;
         609  +
        use ::aws_smithy_legacy_http_server::plugin::Plugin;
         610  +
        let svc = crate::operation_shape::RecursiveUnionOperation::from_service(service);
         611  +
        let svc = self.model_plugin.apply(svc);
         612  +
        let svc =
         613  +
            ::aws_smithy_legacy_http_server::operation::UpgradePlugin::<UpgradeExtractors>::new()
         614  +
                .apply(svc);
         615  +
        let svc = self.http_plugin.apply(svc);
         616  +
        self.recursive_union_operation_custom(svc)
         617  +
    }
         618  +
         619  +
    /// Sets the [`RecursiveUnionOperation`](crate::operation_shape::RecursiveUnionOperation) to a custom [`Service`](tower::Service).
         620  +
    /// not constrained by the Smithy contract.
         621  +
    fn recursive_union_operation_custom<S>(mut self, svc: S) -> Self
         622  +
    where
         623  +
        S: ::tower::Service<
         624  +
                ::http::Request<Body>,
         625  +
                Response = ::http::Response<::aws_smithy_legacy_http_server::body::BoxBody>,
         626  +
                Error = ::std::convert::Infallible,
         627  +
            > + Clone
         628  +
            + Send
         629  +
            + 'static,
         630  +
        S::Future: Send + 'static,
         631  +
    {
         632  +
        self.recursive_union_operation =
         633  +
            Some(::aws_smithy_legacy_http_server::routing::Route::new(svc));
         634  +
        self
         635  +
    }
         636  +
         637  +
    /// Sets the [`SimpleStructOperation`](crate::operation_shape::SimpleStructOperation) operation.
         638  +
    ///
         639  +
    /// This should be an async function satisfying the [`Handler`](::aws_smithy_legacy_http_server::operation::Handler) trait.
         640  +
    /// See the [operation module documentation](::aws_smithy_legacy_http_server::operation) for more information.
         641  +
    ///
         642  +
    /// # Example
         643  +
    ///
         644  +
    /// ```no_run
         645  +
    /// use rpcv2cbor_extras_http0x::{RpcV2CborService, RpcV2CborServiceConfig};
         646  +
    ///
         647  +
    /// use rpcv2cbor_extras_http0x::{input, output, error};
         648  +
    ///
         649  +
    /// async fn handler(input: input::SimpleStructOperationInput) -> Result<output::SimpleStructOperationOutput, error::SimpleStructOperationError> {
         650  +
    ///     todo!()
         651  +
    /// }
         652  +
    ///
         653  +
    /// let config = RpcV2CborServiceConfig::builder().build();
         654  +
    /// let app = RpcV2CborService::builder(config)
         655  +
    ///     .simple_struct_operation(handler)
         656  +
    ///     /* Set other handlers */
         657  +
    ///     .build()
         658  +
    ///     .unwrap();
         659  +
    /// # let app: RpcV2CborService<::aws_smithy_legacy_http_server::routing::RoutingService<::aws_smithy_legacy_http_server::protocol::rpc_v2_cbor::router::RpcV2CborRouter<::aws_smithy_legacy_http_server::routing::Route>, ::aws_smithy_legacy_http_server::protocol::rpc_v2_cbor::RpcV2Cbor>> = app;
         660  +
    /// ```
         661  +
    ///
         662  +
                    pub fn simple_struct_operation<HandlerType, HandlerExtractors, UpgradeExtractors>(self, handler: HandlerType) -> Self
         663  +
                    where
         664  +
                        HandlerType: ::aws_smithy_legacy_http_server::operation::Handler<crate::operation_shape::SimpleStructOperation, HandlerExtractors>,
         665  +
         666  +
                        ModelPl: ::aws_smithy_legacy_http_server::plugin::Plugin<
         667  +
                            RpcV2CborService<L>,
         668  +
                            crate::operation_shape::SimpleStructOperation,
         669  +
                            ::aws_smithy_legacy_http_server::operation::IntoService<crate::operation_shape::SimpleStructOperation, HandlerType>
         670  +
                        >,
         671  +
                        ::aws_smithy_legacy_http_server::operation::UpgradePlugin::<UpgradeExtractors>: ::aws_smithy_legacy_http_server::plugin::Plugin<
         672  +
                            RpcV2CborService<L>,
         673  +
                            crate::operation_shape::SimpleStructOperation,
         674  +
                            ModelPl::Output
         675  +
                        >,
         676  +
                        HttpPl: ::aws_smithy_legacy_http_server::plugin::Plugin<
         677  +
                            RpcV2CborService<L>,
         678  +
                            crate::operation_shape::SimpleStructOperation,
         679  +
                            <
         680  +
                                ::aws_smithy_legacy_http_server::operation::UpgradePlugin::<UpgradeExtractors>
         681  +
                                as ::aws_smithy_legacy_http_server::plugin::Plugin<
         682  +
                                    RpcV2CborService<L>,
         683  +
                                    crate::operation_shape::SimpleStructOperation,
         684  +
                                    ModelPl::Output
         685  +
                                >
         686  +
                            >::Output
         687  +
                        >,
         688  +
         689  +
                        HttpPl::Output: ::tower::Service<::http::Request<Body>, Response = ::http::Response<::aws_smithy_legacy_http_server::body::BoxBody>, Error = ::std::convert::Infallible> + Clone + Send + 'static,
         690  +
                        <HttpPl::Output as ::tower::Service<::http::Request<Body>>>::Future: Send + 'static,
         691  +
         692  +
                    {
         693  +
        use ::aws_smithy_legacy_http_server::operation::OperationShapeExt;
         694  +
        use ::aws_smithy_legacy_http_server::plugin::Plugin;
         695  +
        let svc = crate::operation_shape::SimpleStructOperation::from_handler(handler);
         696  +
        let svc = self.model_plugin.apply(svc);
         697  +
        let svc =
         698  +
            ::aws_smithy_legacy_http_server::operation::UpgradePlugin::<UpgradeExtractors>::new()
         699  +
                .apply(svc);
         700  +
        let svc = self.http_plugin.apply(svc);
         701  +
        self.simple_struct_operation_custom(svc)
         702  +
    }
         703  +
         704  +
    /// Sets the [`SimpleStructOperation`](crate::operation_shape::SimpleStructOperation) operation.
         705  +
    ///
         706  +
    /// This should be an async function satisfying the [`Handler`](::aws_smithy_legacy_http_server::operation::Handler) trait.
         707  +
    /// See the [operation module documentation](::aws_smithy_legacy_http_server::operation) for more information.
         708  +
    ///
         709  +
    /// # Example
         710  +
    ///
         711  +
    /// ```no_run
         712  +
    /// use rpcv2cbor_extras_http0x::{RpcV2CborService, RpcV2CborServiceConfig};
         713  +
    ///
         714  +
    /// use rpcv2cbor_extras_http0x::{input, output, error};
         715  +
    ///
         716  +
    /// async fn handler(input: input::SimpleStructOperationInput) -> Result<output::SimpleStructOperationOutput, error::SimpleStructOperationError> {
         717  +
    ///     todo!()
         718  +
    /// }
         719  +
    ///
         720  +
    /// let config = RpcV2CborServiceConfig::builder().build();
         721  +
    /// let svc = ::tower::util::service_fn(handler);
         722  +
    /// let app = RpcV2CborService::builder(config)
         723  +
    ///     .simple_struct_operation_service(svc)
         724  +
    ///     /* Set other handlers */
         725  +
    ///     .build()
         726  +
    ///     .unwrap();
         727  +
    /// # let app: RpcV2CborService<::aws_smithy_legacy_http_server::routing::RoutingService<::aws_smithy_legacy_http_server::protocol::rpc_v2_cbor::router::RpcV2CborRouter<::aws_smithy_legacy_http_server::routing::Route>, ::aws_smithy_legacy_http_server::protocol::rpc_v2_cbor::RpcV2Cbor>> = app;
         728  +
    /// ```
         729  +
    ///
         730  +
                    pub fn simple_struct_operation_service<S, ServiceExtractors, UpgradeExtractors>(self, service: S) -> Self
         731  +
                    where
         732  +
                        S: ::aws_smithy_legacy_http_server::operation::OperationService<crate::operation_shape::SimpleStructOperation, ServiceExtractors>,
         733  +
         734  +
                        ModelPl: ::aws_smithy_legacy_http_server::plugin::Plugin<
         735  +
                            RpcV2CborService<L>,
         736  +
                            crate::operation_shape::SimpleStructOperation,
         737  +
                            ::aws_smithy_legacy_http_server::operation::Normalize<crate::operation_shape::SimpleStructOperation, S>
         738  +
                        >,
         739  +
                        ::aws_smithy_legacy_http_server::operation::UpgradePlugin::<UpgradeExtractors>: ::aws_smithy_legacy_http_server::plugin::Plugin<
         740  +
                            RpcV2CborService<L>,
         741  +
                            crate::operation_shape::SimpleStructOperation,
         742  +
                            ModelPl::Output
         743  +
                        >,
         744  +
                        HttpPl: ::aws_smithy_legacy_http_server::plugin::Plugin<
         745  +
                            RpcV2CborService<L>,
         746  +
                            crate::operation_shape::SimpleStructOperation,
         747  +
                            <
         748  +
                                ::aws_smithy_legacy_http_server::operation::UpgradePlugin::<UpgradeExtractors>
         749  +
                                as ::aws_smithy_legacy_http_server::plugin::Plugin<
         750  +
                                    RpcV2CborService<L>,
         751  +
                                    crate::operation_shape::SimpleStructOperation,
         752  +
                                    ModelPl::Output
         753  +
                                >
         754  +
                            >::Output
         755  +
                        >,
         756  +
         757  +
                        HttpPl::Output: ::tower::Service<::http::Request<Body>, Response = ::http::Response<::aws_smithy_legacy_http_server::body::BoxBody>, Error = ::std::convert::Infallible> + Clone + Send + 'static,
         758  +
                        <HttpPl::Output as ::tower::Service<::http::Request<Body>>>::Future: Send + 'static,
         759  +
         760  +
                    {
         761  +
        use ::aws_smithy_legacy_http_server::operation::OperationShapeExt;
         762  +
        use ::aws_smithy_legacy_http_server::plugin::Plugin;
         763  +
        let svc = crate::operation_shape::SimpleStructOperation::from_service(service);
         764  +
        let svc = self.model_plugin.apply(svc);
         765  +
        let svc =
         766  +
            ::aws_smithy_legacy_http_server::operation::UpgradePlugin::<UpgradeExtractors>::new()
         767  +
                .apply(svc);
         768  +
        let svc = self.http_plugin.apply(svc);
         769  +
        self.simple_struct_operation_custom(svc)
         770  +
    }
         771  +
         772  +
    /// Sets the [`SimpleStructOperation`](crate::operation_shape::SimpleStructOperation) to a custom [`Service`](tower::Service).
         773  +
    /// not constrained by the Smithy contract.
         774  +
    fn simple_struct_operation_custom<S>(mut self, svc: S) -> Self
         775  +
    where
         776  +
        S: ::tower::Service<
         777  +
                ::http::Request<Body>,
         778  +
                Response = ::http::Response<::aws_smithy_legacy_http_server::body::BoxBody>,
         779  +
                Error = ::std::convert::Infallible,
         780  +
            > + Clone
         781  +
            + Send
         782  +
            + 'static,
         783  +
        S::Future: Send + 'static,
         784  +
    {
         785  +
        self.simple_struct_operation =
         786  +
            Some(::aws_smithy_legacy_http_server::routing::Route::new(svc));
         787  +
        self
         788  +
    }
         789  +
         790  +
    /// Sets the [`SingleMemberStructOperation`](crate::operation_shape::SingleMemberStructOperation) operation.
         791  +
    ///
         792  +
    /// This should be an async function satisfying the [`Handler`](::aws_smithy_legacy_http_server::operation::Handler) trait.
         793  +
    /// See the [operation module documentation](::aws_smithy_legacy_http_server::operation) for more information.
         794  +
    ///
         795  +
    /// # Example
         796  +
    ///
         797  +
    /// ```no_run
         798  +
    /// use rpcv2cbor_extras_http0x::{RpcV2CborService, RpcV2CborServiceConfig};
         799  +
    ///
         800  +
    /// use rpcv2cbor_extras_http0x::{input, output, error};
         801  +
    ///
         802  +
    /// async fn handler(input: input::SingleMemberStructOperationInput) -> output::SingleMemberStructOperationOutput {
         803  +
    ///     todo!()
         804  +
    /// }
         805  +
    ///
         806  +
    /// let config = RpcV2CborServiceConfig::builder().build();
         807  +
    /// let app = RpcV2CborService::builder(config)
         808  +
    ///     .single_member_struct_operation(handler)
         809  +
    ///     /* Set other handlers */
         810  +
    ///     .build()
         811  +
    ///     .unwrap();
         812  +
    /// # let app: RpcV2CborService<::aws_smithy_legacy_http_server::routing::RoutingService<::aws_smithy_legacy_http_server::protocol::rpc_v2_cbor::router::RpcV2CborRouter<::aws_smithy_legacy_http_server::routing::Route>, ::aws_smithy_legacy_http_server::protocol::rpc_v2_cbor::RpcV2Cbor>> = app;
         813  +
    /// ```
         814  +
    ///
         815  +
                    pub fn single_member_struct_operation<HandlerType, HandlerExtractors, UpgradeExtractors>(self, handler: HandlerType) -> Self
         816  +
                    where
         817  +
                        HandlerType: ::aws_smithy_legacy_http_server::operation::Handler<crate::operation_shape::SingleMemberStructOperation, HandlerExtractors>,
         818  +
         819  +
                        ModelPl: ::aws_smithy_legacy_http_server::plugin::Plugin<
         820  +
                            RpcV2CborService<L>,
         821  +
                            crate::operation_shape::SingleMemberStructOperation,
         822  +
                            ::aws_smithy_legacy_http_server::operation::IntoService<crate::operation_shape::SingleMemberStructOperation, HandlerType>
         823  +
                        >,
         824  +
                        ::aws_smithy_legacy_http_server::operation::UpgradePlugin::<UpgradeExtractors>: ::aws_smithy_legacy_http_server::plugin::Plugin<
         825  +
                            RpcV2CborService<L>,
         826  +
                            crate::operation_shape::SingleMemberStructOperation,
         827  +
                            ModelPl::Output
         828  +
                        >,
         829  +
                        HttpPl: ::aws_smithy_legacy_http_server::plugin::Plugin<
         830  +
                            RpcV2CborService<L>,
         831  +
                            crate::operation_shape::SingleMemberStructOperation,
         832  +
                            <
         833  +
                                ::aws_smithy_legacy_http_server::operation::UpgradePlugin::<UpgradeExtractors>
         834  +
                                as ::aws_smithy_legacy_http_server::plugin::Plugin<
         835  +
                                    RpcV2CborService<L>,
         836  +
                                    crate::operation_shape::SingleMemberStructOperation,
         837  +
                                    ModelPl::Output
         838  +
                                >
         839  +
                            >::Output
         840  +
                        >,
         841  +
         842  +
                        HttpPl::Output: ::tower::Service<::http::Request<Body>, Response = ::http::Response<::aws_smithy_legacy_http_server::body::BoxBody>, Error = ::std::convert::Infallible> + Clone + Send + 'static,
         843  +
                        <HttpPl::Output as ::tower::Service<::http::Request<Body>>>::Future: Send + 'static,
         844  +
         845  +
                    {
         846  +
        use ::aws_smithy_legacy_http_server::operation::OperationShapeExt;
         847  +
        use ::aws_smithy_legacy_http_server::plugin::Plugin;
         848  +
        let svc = crate::operation_shape::SingleMemberStructOperation::from_handler(handler);
         849  +
        let svc = self.model_plugin.apply(svc);
         850  +
        let svc =
         851  +
            ::aws_smithy_legacy_http_server::operation::UpgradePlugin::<UpgradeExtractors>::new()
         852  +
                .apply(svc);
         853  +
        let svc = self.http_plugin.apply(svc);
         854  +
        self.single_member_struct_operation_custom(svc)
         855  +
    }
         856  +
         857  +
    /// Sets the [`SingleMemberStructOperation`](crate::operation_shape::SingleMemberStructOperation) operation.
         858  +
    ///
         859  +
    /// This should be an async function satisfying the [`Handler`](::aws_smithy_legacy_http_server::operation::Handler) trait.
         860  +
    /// See the [operation module documentation](::aws_smithy_legacy_http_server::operation) for more information.
         861  +
    ///
         862  +
    /// # Example
         863  +
    ///
         864  +
    /// ```no_run
         865  +
    /// use rpcv2cbor_extras_http0x::{RpcV2CborService, RpcV2CborServiceConfig};
         866  +
    ///
         867  +
    /// use rpcv2cbor_extras_http0x::{input, output, error};
         868  +
    ///
         869  +
    /// async fn handler(input: input::SingleMemberStructOperationInput) -> Result<output::SingleMemberStructOperationOutput, std::convert::Infallible> {
         870  +
    ///     todo!()
         871  +
    /// }
         872  +
    ///
         873  +
    /// let config = RpcV2CborServiceConfig::builder().build();
         874  +
    /// let svc = ::tower::util::service_fn(handler);
         875  +
    /// let app = RpcV2CborService::builder(config)
         876  +
    ///     .single_member_struct_operation_service(svc)
         877  +
    ///     /* Set other handlers */
         878  +
    ///     .build()
         879  +
    ///     .unwrap();
         880  +
    /// # let app: RpcV2CborService<::aws_smithy_legacy_http_server::routing::RoutingService<::aws_smithy_legacy_http_server::protocol::rpc_v2_cbor::router::RpcV2CborRouter<::aws_smithy_legacy_http_server::routing::Route>, ::aws_smithy_legacy_http_server::protocol::rpc_v2_cbor::RpcV2Cbor>> = app;
         881  +
    /// ```
         882  +
    ///
         883  +
                    pub fn single_member_struct_operation_service<S, ServiceExtractors, UpgradeExtractors>(self, service: S) -> Self
         884  +
                    where
         885  +
                        S: ::aws_smithy_legacy_http_server::operation::OperationService<crate::operation_shape::SingleMemberStructOperation, ServiceExtractors>,
         886  +
         887  +
                        ModelPl: ::aws_smithy_legacy_http_server::plugin::Plugin<
         888  +
                            RpcV2CborService<L>,
         889  +
                            crate::operation_shape::SingleMemberStructOperation,
         890  +
                            ::aws_smithy_legacy_http_server::operation::Normalize<crate::operation_shape::SingleMemberStructOperation, S>
         891  +
                        >,
         892  +
                        ::aws_smithy_legacy_http_server::operation::UpgradePlugin::<UpgradeExtractors>: ::aws_smithy_legacy_http_server::plugin::Plugin<
         893  +
                            RpcV2CborService<L>,
         894  +
                            crate::operation_shape::SingleMemberStructOperation,
         895  +
                            ModelPl::Output
         896  +
                        >,
         897  +
                        HttpPl: ::aws_smithy_legacy_http_server::plugin::Plugin<
         898  +
                            RpcV2CborService<L>,
         899  +
                            crate::operation_shape::SingleMemberStructOperation,
         900  +
                            <
         901  +
                                ::aws_smithy_legacy_http_server::operation::UpgradePlugin::<UpgradeExtractors>
         902  +
                                as ::aws_smithy_legacy_http_server::plugin::Plugin<
         903  +
                                    RpcV2CborService<L>,
         904  +
                                    crate::operation_shape::SingleMemberStructOperation,
         905  +
                                    ModelPl::Output
         906  +
                                >
         907  +
                            >::Output
         908  +
                        >,
         909  +
         910  +
                        HttpPl::Output: ::tower::Service<::http::Request<Body>, Response = ::http::Response<::aws_smithy_legacy_http_server::body::BoxBody>, Error = ::std::convert::Infallible> + Clone + Send + 'static,
         911  +
                        <HttpPl::Output as ::tower::Service<::http::Request<Body>>>::Future: Send + 'static,
         912  +
         913  +
                    {
         914  +
        use ::aws_smithy_legacy_http_server::operation::OperationShapeExt;
         915  +
        use ::aws_smithy_legacy_http_server::plugin::Plugin;
         916  +
        let svc = crate::operation_shape::SingleMemberStructOperation::from_service(service);
         917  +
        let svc = self.model_plugin.apply(svc);
         918  +
        let svc =
         919  +
            ::aws_smithy_legacy_http_server::operation::UpgradePlugin::<UpgradeExtractors>::new()
         920  +
                .apply(svc);
         921  +
        let svc = self.http_plugin.apply(svc);
         922  +
        self.single_member_struct_operation_custom(svc)
         923  +
    }
         924  +
         925  +
    /// Sets the [`SingleMemberStructOperation`](crate::operation_shape::SingleMemberStructOperation) to a custom [`Service`](tower::Service).
         926  +
    /// not constrained by the Smithy contract.
         927  +
    fn single_member_struct_operation_custom<S>(mut self, svc: S) -> Self
         928  +
    where
         929  +
        S: ::tower::Service<
         930  +
                ::http::Request<Body>,
         931  +
                Response = ::http::Response<::aws_smithy_legacy_http_server::body::BoxBody>,
         932  +
                Error = ::std::convert::Infallible,
         933  +
            > + Clone
         934  +
            + Send
         935  +
            + 'static,
         936  +
        S::Future: Send + 'static,
         937  +
    {
         938  +
        self.single_member_struct_operation =
         939  +
            Some(::aws_smithy_legacy_http_server::routing::Route::new(svc));
         940  +
        self
         941  +
    }
         942  +
         943  +
    /// Sets the [`StreamingOperation`](crate::operation_shape::StreamingOperation) operation.
         944  +
    ///
         945  +
    /// This should be an async function satisfying the [`Handler`](::aws_smithy_legacy_http_server::operation::Handler) trait.
         946  +
    /// See the [operation module documentation](::aws_smithy_legacy_http_server::operation) for more information.
         947  +
    ///
         948  +
    /// # Example
         949  +
    ///
         950  +
    /// ```no_run
         951  +
    /// use rpcv2cbor_extras_http0x::{RpcV2CborService, RpcV2CborServiceConfig};
         952  +
    ///
         953  +
    /// use rpcv2cbor_extras_http0x::{input, output, error};
         954  +
    ///
         955  +
    /// async fn handler(input: input::StreamingOperationInput) -> Result<output::StreamingOperationOutput, error::StreamingOperationError> {
         956  +
    ///     todo!()
         957  +
    /// }
         958  +
    ///
         959  +
    /// let config = RpcV2CborServiceConfig::builder().build();
         960  +
    /// let app = RpcV2CborService::builder(config)
         961  +
    ///     .streaming_operation(handler)
         962  +
    ///     /* Set other handlers */
         963  +
    ///     .build()
         964  +
    ///     .unwrap();
         965  +
    /// # let app: RpcV2CborService<::aws_smithy_legacy_http_server::routing::RoutingService<::aws_smithy_legacy_http_server::protocol::rpc_v2_cbor::router::RpcV2CborRouter<::aws_smithy_legacy_http_server::routing::Route>, ::aws_smithy_legacy_http_server::protocol::rpc_v2_cbor::RpcV2Cbor>> = app;
         966  +
    /// ```
         967  +
    ///
         968  +
                    pub fn streaming_operation<HandlerType, HandlerExtractors, UpgradeExtractors>(self, handler: HandlerType) -> Self
         969  +
                    where
         970  +
                        HandlerType: ::aws_smithy_legacy_http_server::operation::Handler<crate::operation_shape::StreamingOperation, HandlerExtractors>,
         971  +
         972  +
                        ModelPl: ::aws_smithy_legacy_http_server::plugin::Plugin<
         973  +
                            RpcV2CborService<L>,
         974  +
                            crate::operation_shape::StreamingOperation,
         975  +
                            ::aws_smithy_legacy_http_server::operation::IntoService<crate::operation_shape::StreamingOperation, HandlerType>
         976  +
                        >,
         977  +
                        ::aws_smithy_legacy_http_server::operation::UpgradePlugin::<UpgradeExtractors>: ::aws_smithy_legacy_http_server::plugin::Plugin<
         978  +
                            RpcV2CborService<L>,
         979  +
                            crate::operation_shape::StreamingOperation,
         980  +
                            ModelPl::Output
         981  +
                        >,
         982  +
                        HttpPl: ::aws_smithy_legacy_http_server::plugin::Plugin<
         983  +
                            RpcV2CborService<L>,
         984  +
                            crate::operation_shape::StreamingOperation,
         985  +
                            <
         986  +
                                ::aws_smithy_legacy_http_server::operation::UpgradePlugin::<UpgradeExtractors>
         987  +
                                as ::aws_smithy_legacy_http_server::plugin::Plugin<
         988  +
                                    RpcV2CborService<L>,
         989  +
                                    crate::operation_shape::StreamingOperation,
         990  +
                                    ModelPl::Output
         991  +
                                >
         992  +
                            >::Output
         993  +
                        >,
         994  +
         995  +
                        HttpPl::Output: ::tower::Service<::http::Request<Body>, Response = ::http::Response<::aws_smithy_legacy_http_server::body::BoxBody>, Error = ::std::convert::Infallible> + Clone + Send + 'static,
         996  +
                        <HttpPl::Output as ::tower::Service<::http::Request<Body>>>::Future: Send + 'static,
         997  +
         998  +
                    {
         999  +
        use ::aws_smithy_legacy_http_server::operation::OperationShapeExt;
        1000  +
        use ::aws_smithy_legacy_http_server::plugin::Plugin;
        1001  +
        let svc = crate::operation_shape::StreamingOperation::from_handler(handler);
        1002  +
        let svc = self.model_plugin.apply(svc);
        1003  +
        let svc =
        1004  +
            ::aws_smithy_legacy_http_server::operation::UpgradePlugin::<UpgradeExtractors>::new()
        1005  +
                .apply(svc);
        1006  +
        let svc = self.http_plugin.apply(svc);
        1007  +
        self.streaming_operation_custom(svc)
        1008  +
    }
        1009  +
        1010  +
    /// Sets the [`StreamingOperation`](crate::operation_shape::StreamingOperation) operation.
        1011  +
    ///
        1012  +
    /// This should be an async function satisfying the [`Handler`](::aws_smithy_legacy_http_server::operation::Handler) trait.
        1013  +
    /// See the [operation module documentation](::aws_smithy_legacy_http_server::operation) for more information.
        1014  +
    ///
        1015  +
    /// # Example
        1016  +
    ///
        1017  +
    /// ```no_run
        1018  +
    /// use rpcv2cbor_extras_http0x::{RpcV2CborService, RpcV2CborServiceConfig};
        1019  +
    ///
        1020  +
    /// use rpcv2cbor_extras_http0x::{input, output, error};
        1021  +
    ///
        1022  +
    /// async fn handler(input: input::StreamingOperationInput) -> Result<output::StreamingOperationOutput, error::StreamingOperationError> {
        1023  +
    ///     todo!()
        1024  +
    /// }
        1025  +
    ///
        1026  +
    /// let config = RpcV2CborServiceConfig::builder().build();
        1027  +
    /// let svc = ::tower::util::service_fn(handler);
        1028  +
    /// let app = RpcV2CborService::builder(config)
        1029  +
    ///     .streaming_operation_service(svc)
        1030  +
    ///     /* Set other handlers */
        1031  +
    ///     .build()
        1032  +
    ///     .unwrap();
        1033  +
    /// # let app: RpcV2CborService<::aws_smithy_legacy_http_server::routing::RoutingService<::aws_smithy_legacy_http_server::protocol::rpc_v2_cbor::router::RpcV2CborRouter<::aws_smithy_legacy_http_server::routing::Route>, ::aws_smithy_legacy_http_server::protocol::rpc_v2_cbor::RpcV2Cbor>> = app;
        1034  +
    /// ```
        1035  +
    ///
        1036  +
                    pub fn streaming_operation_service<S, ServiceExtractors, UpgradeExtractors>(self, service: S) -> Self
        1037  +
                    where
        1038  +
                        S: ::aws_smithy_legacy_http_server::operation::OperationService<crate::operation_shape::StreamingOperation, ServiceExtractors>,
        1039  +
        1040  +
                        ModelPl: ::aws_smithy_legacy_http_server::plugin::Plugin<
        1041  +
                            RpcV2CborService<L>,
        1042  +
                            crate::operation_shape::StreamingOperation,
        1043  +
                            ::aws_smithy_legacy_http_server::operation::Normalize<crate::operation_shape::StreamingOperation, S>
        1044  +
                        >,
        1045  +
                        ::aws_smithy_legacy_http_server::operation::UpgradePlugin::<UpgradeExtractors>: ::aws_smithy_legacy_http_server::plugin::Plugin<
        1046  +
                            RpcV2CborService<L>,
        1047  +
                            crate::operation_shape::StreamingOperation,
        1048  +
                            ModelPl::Output
        1049  +
                        >,
        1050  +
                        HttpPl: ::aws_smithy_legacy_http_server::plugin::Plugin<
        1051  +
                            RpcV2CborService<L>,
        1052  +
                            crate::operation_shape::StreamingOperation,
        1053  +
                            <
        1054  +
                                ::aws_smithy_legacy_http_server::operation::UpgradePlugin::<UpgradeExtractors>
        1055  +
                                as ::aws_smithy_legacy_http_server::plugin::Plugin<
        1056  +
                                    RpcV2CborService<L>,
        1057  +
                                    crate::operation_shape::StreamingOperation,
        1058  +
                                    ModelPl::Output
        1059  +
                                >
        1060  +
                            >::Output
        1061  +
                        >,
        1062  +
        1063  +
                        HttpPl::Output: ::tower::Service<::http::Request<Body>, Response = ::http::Response<::aws_smithy_legacy_http_server::body::BoxBody>, Error = ::std::convert::Infallible> + Clone + Send + 'static,
        1064  +
                        <HttpPl::Output as ::tower::Service<::http::Request<Body>>>::Future: Send + 'static,
        1065  +
        1066  +
                    {
        1067  +
        use ::aws_smithy_legacy_http_server::operation::OperationShapeExt;
        1068  +
        use ::aws_smithy_legacy_http_server::plugin::Plugin;
        1069  +
        let svc = crate::operation_shape::StreamingOperation::from_service(service);
        1070  +
        let svc = self.model_plugin.apply(svc);
        1071  +
        let svc =
        1072  +
            ::aws_smithy_legacy_http_server::operation::UpgradePlugin::<UpgradeExtractors>::new()
        1073  +
                .apply(svc);
        1074  +
        let svc = self.http_plugin.apply(svc);
        1075  +
        self.streaming_operation_custom(svc)
        1076  +
    }
        1077  +
        1078  +
    /// Sets the [`StreamingOperation`](crate::operation_shape::StreamingOperation) to a custom [`Service`](tower::Service).
        1079  +
    /// not constrained by the Smithy contract.
        1080  +
    fn streaming_operation_custom<S>(mut self, svc: S) -> Self
        1081  +
    where
        1082  +
        S: ::tower::Service<
        1083  +
                ::http::Request<Body>,
        1084  +
                Response = ::http::Response<::aws_smithy_legacy_http_server::body::BoxBody>,
        1085  +
                Error = ::std::convert::Infallible,
        1086  +
            > + Clone
        1087  +
            + Send
        1088  +
            + 'static,
        1089  +
        S::Future: Send + 'static,
        1090  +
    {
        1091  +
        self.streaming_operation = Some(::aws_smithy_legacy_http_server::routing::Route::new(svc));
        1092  +
        self
        1093  +
    }
        1094  +
        1095  +
    /// Sets the [`StreamingOperationWithInitialData`](crate::operation_shape::StreamingOperationWithInitialData) operation.
        1096  +
    ///
        1097  +
    /// This should be an async function satisfying the [`Handler`](::aws_smithy_legacy_http_server::operation::Handler) trait.
        1098  +
    /// See the [operation module documentation](::aws_smithy_legacy_http_server::operation) for more information.
        1099  +
    ///
        1100  +
    /// # Example
        1101  +
    ///
        1102  +
    /// ```no_run
        1103  +
    /// use rpcv2cbor_extras_http0x::{RpcV2CborService, RpcV2CborServiceConfig};
        1104  +
    ///
        1105  +
    /// use rpcv2cbor_extras_http0x::{input, output, error};
        1106  +
    ///
        1107  +
    /// async fn handler(input: input::StreamingOperationWithInitialDataInput) -> Result<output::StreamingOperationWithInitialDataOutput, error::StreamingOperationWithInitialDataError> {
        1108  +
    ///     todo!()
        1109  +
    /// }
        1110  +
    ///
        1111  +
    /// let config = RpcV2CborServiceConfig::builder().build();
        1112  +
    /// let app = RpcV2CborService::builder(config)
        1113  +
    ///     .streaming_operation_with_initial_data(handler)
        1114  +
    ///     /* Set other handlers */
        1115  +
    ///     .build()
        1116  +
    ///     .unwrap();
        1117  +
    /// # let app: RpcV2CborService<::aws_smithy_legacy_http_server::routing::RoutingService<::aws_smithy_legacy_http_server::protocol::rpc_v2_cbor::router::RpcV2CborRouter<::aws_smithy_legacy_http_server::routing::Route>, ::aws_smithy_legacy_http_server::protocol::rpc_v2_cbor::RpcV2Cbor>> = app;
        1118  +
    /// ```
        1119  +
    ///
        1120  +
                    pub fn streaming_operation_with_initial_data<HandlerType, HandlerExtractors, UpgradeExtractors>(self, handler: HandlerType) -> Self
        1121  +
                    where
        1122  +
                        HandlerType: ::aws_smithy_legacy_http_server::operation::Handler<crate::operation_shape::StreamingOperationWithInitialData, HandlerExtractors>,
        1123  +
        1124  +
                        ModelPl: ::aws_smithy_legacy_http_server::plugin::Plugin<
        1125  +
                            RpcV2CborService<L>,
        1126  +
                            crate::operation_shape::StreamingOperationWithInitialData,
        1127  +
                            ::aws_smithy_legacy_http_server::operation::IntoService<crate::operation_shape::StreamingOperationWithInitialData, HandlerType>
        1128  +
                        >,
        1129  +
                        ::aws_smithy_legacy_http_server::operation::UpgradePlugin::<UpgradeExtractors>: ::aws_smithy_legacy_http_server::plugin::Plugin<
        1130  +
                            RpcV2CborService<L>,
        1131  +
                            crate::operation_shape::StreamingOperationWithInitialData,
        1132  +
                            ModelPl::Output
        1133  +
                        >,
        1134  +
                        HttpPl: ::aws_smithy_legacy_http_server::plugin::Plugin<
        1135  +
                            RpcV2CborService<L>,
        1136  +
                            crate::operation_shape::StreamingOperationWithInitialData,
        1137  +
                            <
        1138  +
                                ::aws_smithy_legacy_http_server::operation::UpgradePlugin::<UpgradeExtractors>
        1139  +
                                as ::aws_smithy_legacy_http_server::plugin::Plugin<
        1140  +
                                    RpcV2CborService<L>,
        1141  +
                                    crate::operation_shape::StreamingOperationWithInitialData,
        1142  +
                                    ModelPl::Output
        1143  +
                                >
        1144  +
                            >::Output
        1145  +
                        >,
        1146  +
        1147  +
                        HttpPl::Output: ::tower::Service<::http::Request<Body>, Response = ::http::Response<::aws_smithy_legacy_http_server::body::BoxBody>, Error = ::std::convert::Infallible> + Clone + Send + 'static,
        1148  +
                        <HttpPl::Output as ::tower::Service<::http::Request<Body>>>::Future: Send + 'static,
        1149  +
        1150  +
                    {
        1151  +
        use ::aws_smithy_legacy_http_server::operation::OperationShapeExt;
        1152  +
        use ::aws_smithy_legacy_http_server::plugin::Plugin;
        1153  +
        let svc = crate::operation_shape::StreamingOperationWithInitialData::from_handler(handler);
        1154  +
        let svc = self.model_plugin.apply(svc);
        1155  +
        let svc =
        1156  +
            ::aws_smithy_legacy_http_server::operation::UpgradePlugin::<UpgradeExtractors>::new()
        1157  +
                .apply(svc);
        1158  +
        let svc = self.http_plugin.apply(svc);
        1159  +
        self.streaming_operation_with_initial_data_custom(svc)
        1160  +
    }
        1161  +
        1162  +
    /// Sets the [`StreamingOperationWithInitialData`](crate::operation_shape::StreamingOperationWithInitialData) operation.
        1163  +
    ///
        1164  +
    /// This should be an async function satisfying the [`Handler`](::aws_smithy_legacy_http_server::operation::Handler) trait.
        1165  +
    /// See the [operation module documentation](::aws_smithy_legacy_http_server::operation) for more information.
        1166  +
    ///
        1167  +
    /// # Example
        1168  +
    ///
        1169  +
    /// ```no_run
        1170  +
    /// use rpcv2cbor_extras_http0x::{RpcV2CborService, RpcV2CborServiceConfig};
        1171  +
    ///
        1172  +
    /// use rpcv2cbor_extras_http0x::{input, output, error};
        1173  +
    ///
        1174  +
    /// async fn handler(input: input::StreamingOperationWithInitialDataInput) -> Result<output::StreamingOperationWithInitialDataOutput, error::StreamingOperationWithInitialDataError> {
        1175  +
    ///     todo!()
        1176  +
    /// }
        1177  +
    ///
        1178  +
    /// let config = RpcV2CborServiceConfig::builder().build();
        1179  +
    /// let svc = ::tower::util::service_fn(handler);
        1180  +
    /// let app = RpcV2CborService::builder(config)
        1181  +
    ///     .streaming_operation_with_initial_data_service(svc)
        1182  +
    ///     /* Set other handlers */
        1183  +
    ///     .build()
        1184  +
    ///     .unwrap();
        1185  +
    /// # let app: RpcV2CborService<::aws_smithy_legacy_http_server::routing::RoutingService<::aws_smithy_legacy_http_server::protocol::rpc_v2_cbor::router::RpcV2CborRouter<::aws_smithy_legacy_http_server::routing::Route>, ::aws_smithy_legacy_http_server::protocol::rpc_v2_cbor::RpcV2Cbor>> = app;
        1186  +
    /// ```
        1187  +
    ///
        1188  +
                    pub fn streaming_operation_with_initial_data_service<S, ServiceExtractors, UpgradeExtractors>(self, service: S) -> Self
        1189  +
                    where
        1190  +
                        S: ::aws_smithy_legacy_http_server::operation::OperationService<crate::operation_shape::StreamingOperationWithInitialData, ServiceExtractors>,
        1191  +
        1192  +
                        ModelPl: ::aws_smithy_legacy_http_server::plugin::Plugin<
        1193  +
                            RpcV2CborService<L>,
        1194  +
                            crate::operation_shape::StreamingOperationWithInitialData,
        1195  +
                            ::aws_smithy_legacy_http_server::operation::Normalize<crate::operation_shape::StreamingOperationWithInitialData, S>
        1196  +
                        >,
        1197  +
                        ::aws_smithy_legacy_http_server::operation::UpgradePlugin::<UpgradeExtractors>: ::aws_smithy_legacy_http_server::plugin::Plugin<
        1198  +
                            RpcV2CborService<L>,
        1199  +
                            crate::operation_shape::StreamingOperationWithInitialData,
        1200  +
                            ModelPl::Output
        1201  +
                        >,
        1202  +
                        HttpPl: ::aws_smithy_legacy_http_server::plugin::Plugin<
        1203  +
                            RpcV2CborService<L>,
        1204  +
                            crate::operation_shape::StreamingOperationWithInitialData,
        1205  +
                            <
        1206  +
                                ::aws_smithy_legacy_http_server::operation::UpgradePlugin::<UpgradeExtractors>
        1207  +
                                as ::aws_smithy_legacy_http_server::plugin::Plugin<
        1208  +
                                    RpcV2CborService<L>,
        1209  +
                                    crate::operation_shape::StreamingOperationWithInitialData,
        1210  +
                                    ModelPl::Output
        1211  +
                                >
        1212  +
                            >::Output
        1213  +
                        >,
        1214  +
        1215  +
                        HttpPl::Output: ::tower::Service<::http::Request<Body>, Response = ::http::Response<::aws_smithy_legacy_http_server::body::BoxBody>, Error = ::std::convert::Infallible> + Clone + Send + 'static,
        1216  +
                        <HttpPl::Output as ::tower::Service<::http::Request<Body>>>::Future: Send + 'static,
        1217  +
        1218  +
                    {
        1219  +
        use ::aws_smithy_legacy_http_server::operation::OperationShapeExt;
        1220  +
        use ::aws_smithy_legacy_http_server::plugin::Plugin;
        1221  +
        let svc = crate::operation_shape::StreamingOperationWithInitialData::from_service(service);
        1222  +
        let svc = self.model_plugin.apply(svc);
        1223  +
        let svc =
        1224  +
            ::aws_smithy_legacy_http_server::operation::UpgradePlugin::<UpgradeExtractors>::new()
        1225  +
                .apply(svc);
        1226  +
        let svc = self.http_plugin.apply(svc);
        1227  +
        self.streaming_operation_with_initial_data_custom(svc)
        1228  +
    }
        1229  +
        1230  +
    /// Sets the [`StreamingOperationWithInitialData`](crate::operation_shape::StreamingOperationWithInitialData) to a custom [`Service`](tower::Service).
        1231  +
    /// not constrained by the Smithy contract.
        1232  +
    fn streaming_operation_with_initial_data_custom<S>(mut self, svc: S) -> Self
        1233  +
    where
        1234  +
        S: ::tower::Service<
        1235  +
                ::http::Request<Body>,
        1236  +
                Response = ::http::Response<::aws_smithy_legacy_http_server::body::BoxBody>,
        1237  +
                Error = ::std::convert::Infallible,
        1238  +
            > + Clone
        1239  +
            + Send
        1240  +
            + 'static,
        1241  +
        S::Future: Send + 'static,
        1242  +
    {
        1243  +
        self.streaming_operation_with_initial_data =
        1244  +
            Some(::aws_smithy_legacy_http_server::routing::Route::new(svc));
        1245  +
        self
        1246  +
    }
        1247  +
        1248  +
    /// Sets the [`StreamingOperationWithInitialResponse`](crate::operation_shape::StreamingOperationWithInitialResponse) operation.
        1249  +
    ///
        1250  +
    /// This should be an async function satisfying the [`Handler`](::aws_smithy_legacy_http_server::operation::Handler) trait.
        1251  +
    /// See the [operation module documentation](::aws_smithy_legacy_http_server::operation) for more information.
        1252  +
    ///
        1253  +
    /// # Example
        1254  +
    ///
        1255  +
    /// ```no_run
        1256  +
    /// use rpcv2cbor_extras_http0x::{RpcV2CborService, RpcV2CborServiceConfig};
        1257  +
    ///
        1258  +
    /// use rpcv2cbor_extras_http0x::{input, output, error};
        1259  +
    ///
        1260  +
    /// async fn handler(input: input::StreamingOperationWithInitialResponseInput) -> Result<output::StreamingOperationWithInitialResponseOutput, error::StreamingOperationWithInitialResponseError> {
        1261  +
    ///     todo!()
        1262  +
    /// }
        1263  +
    ///
        1264  +
    /// let config = RpcV2CborServiceConfig::builder().build();
        1265  +
    /// let app = RpcV2CborService::builder(config)
        1266  +
    ///     .streaming_operation_with_initial_response(handler)
        1267  +
    ///     /* Set other handlers */
        1268  +
    ///     .build()
        1269  +
    ///     .unwrap();
        1270  +
    /// # let app: RpcV2CborService<::aws_smithy_legacy_http_server::routing::RoutingService<::aws_smithy_legacy_http_server::protocol::rpc_v2_cbor::router::RpcV2CborRouter<::aws_smithy_legacy_http_server::routing::Route>, ::aws_smithy_legacy_http_server::protocol::rpc_v2_cbor::RpcV2Cbor>> = app;
        1271  +
    /// ```
        1272  +
    ///
        1273  +
                    pub fn streaming_operation_with_initial_response<HandlerType, HandlerExtractors, UpgradeExtractors>(self, handler: HandlerType) -> Self
        1274  +
                    where
        1275  +
                        HandlerType: ::aws_smithy_legacy_http_server::operation::Handler<crate::operation_shape::StreamingOperationWithInitialResponse, HandlerExtractors>,
        1276  +
        1277  +
                        ModelPl: ::aws_smithy_legacy_http_server::plugin::Plugin<
        1278  +
                            RpcV2CborService<L>,
        1279  +
                            crate::operation_shape::StreamingOperationWithInitialResponse,
        1280  +
                            ::aws_smithy_legacy_http_server::operation::IntoService<crate::operation_shape::StreamingOperationWithInitialResponse, HandlerType>
        1281  +
                        >,
        1282  +
                        ::aws_smithy_legacy_http_server::operation::UpgradePlugin::<UpgradeExtractors>: ::aws_smithy_legacy_http_server::plugin::Plugin<
        1283  +
                            RpcV2CborService<L>,
        1284  +
                            crate::operation_shape::StreamingOperationWithInitialResponse,
        1285  +
                            ModelPl::Output
        1286  +
                        >,
        1287  +
                        HttpPl: ::aws_smithy_legacy_http_server::plugin::Plugin<
        1288  +
                            RpcV2CborService<L>,
        1289  +
                            crate::operation_shape::StreamingOperationWithInitialResponse,
        1290  +
                            <
        1291  +
                                ::aws_smithy_legacy_http_server::operation::UpgradePlugin::<UpgradeExtractors>
        1292  +
                                as ::aws_smithy_legacy_http_server::plugin::Plugin<
        1293  +
                                    RpcV2CborService<L>,
        1294  +
                                    crate::operation_shape::StreamingOperationWithInitialResponse,
        1295  +
                                    ModelPl::Output
        1296  +
                                >
        1297  +
                            >::Output
        1298  +
                        >,
        1299  +
        1300  +
                        HttpPl::Output: ::tower::Service<::http::Request<Body>, Response = ::http::Response<::aws_smithy_legacy_http_server::body::BoxBody>, Error = ::std::convert::Infallible> + Clone + Send + 'static,
        1301  +
                        <HttpPl::Output as ::tower::Service<::http::Request<Body>>>::Future: Send + 'static,
        1302  +
        1303  +
                    {
        1304  +
        use ::aws_smithy_legacy_http_server::operation::OperationShapeExt;
        1305  +
        use ::aws_smithy_legacy_http_server::plugin::Plugin;
        1306  +
        let svc =
        1307  +
            crate::operation_shape::StreamingOperationWithInitialResponse::from_handler(handler);
        1308  +
        let svc = self.model_plugin.apply(svc);
        1309  +
        let svc =
        1310  +
            ::aws_smithy_legacy_http_server::operation::UpgradePlugin::<UpgradeExtractors>::new()
        1311  +
                .apply(svc);
        1312  +
        let svc = self.http_plugin.apply(svc);
        1313  +
        self.streaming_operation_with_initial_response_custom(svc)
        1314  +
    }
        1315  +
        1316  +
    /// Sets the [`StreamingOperationWithInitialResponse`](crate::operation_shape::StreamingOperationWithInitialResponse) operation.
        1317  +
    ///
        1318  +
    /// This should be an async function satisfying the [`Handler`](::aws_smithy_legacy_http_server::operation::Handler) trait.
        1319  +
    /// See the [operation module documentation](::aws_smithy_legacy_http_server::operation) for more information.
        1320  +
    ///
        1321  +
    /// # Example
        1322  +
    ///
        1323  +
    /// ```no_run
        1324  +
    /// use rpcv2cbor_extras_http0x::{RpcV2CborService, RpcV2CborServiceConfig};
        1325  +
    ///
        1326  +
    /// use rpcv2cbor_extras_http0x::{input, output, error};
        1327  +
    ///
        1328  +
    /// async fn handler(input: input::StreamingOperationWithInitialResponseInput) -> Result<output::StreamingOperationWithInitialResponseOutput, error::StreamingOperationWithInitialResponseError> {
        1329  +
    ///     todo!()
        1330  +
    /// }
        1331  +
    ///
        1332  +
    /// let config = RpcV2CborServiceConfig::builder().build();
        1333  +
    /// let svc = ::tower::util::service_fn(handler);
        1334  +
    /// let app = RpcV2CborService::builder(config)
        1335  +
    ///     .streaming_operation_with_initial_response_service(svc)
        1336  +
    ///     /* Set other handlers */
        1337  +
    ///     .build()
        1338  +
    ///     .unwrap();
        1339  +
    /// # let app: RpcV2CborService<::aws_smithy_legacy_http_server::routing::RoutingService<::aws_smithy_legacy_http_server::protocol::rpc_v2_cbor::router::RpcV2CborRouter<::aws_smithy_legacy_http_server::routing::Route>, ::aws_smithy_legacy_http_server::protocol::rpc_v2_cbor::RpcV2Cbor>> = app;
        1340  +
    /// ```
        1341  +
    ///
        1342  +
                    pub fn streaming_operation_with_initial_response_service<S, ServiceExtractors, UpgradeExtractors>(self, service: S) -> Self
        1343  +
                    where
        1344  +
                        S: ::aws_smithy_legacy_http_server::operation::OperationService<crate::operation_shape::StreamingOperationWithInitialResponse, ServiceExtractors>,
        1345  +
        1346  +
                        ModelPl: ::aws_smithy_legacy_http_server::plugin::Plugin<
        1347  +
                            RpcV2CborService<L>,
        1348  +
                            crate::operation_shape::StreamingOperationWithInitialResponse,
        1349  +
                            ::aws_smithy_legacy_http_server::operation::Normalize<crate::operation_shape::StreamingOperationWithInitialResponse, S>
        1350  +
                        >,
        1351  +
                        ::aws_smithy_legacy_http_server::operation::UpgradePlugin::<UpgradeExtractors>: ::aws_smithy_legacy_http_server::plugin::Plugin<
        1352  +
                            RpcV2CborService<L>,
        1353  +
                            crate::operation_shape::StreamingOperationWithInitialResponse,
        1354  +
                            ModelPl::Output
        1355  +
                        >,
        1356  +
                        HttpPl: ::aws_smithy_legacy_http_server::plugin::Plugin<
        1357  +
                            RpcV2CborService<L>,
        1358  +
                            crate::operation_shape::StreamingOperationWithInitialResponse,
        1359  +
                            <
        1360  +
                                ::aws_smithy_legacy_http_server::operation::UpgradePlugin::<UpgradeExtractors>
        1361  +
                                as ::aws_smithy_legacy_http_server::plugin::Plugin<
        1362  +
                                    RpcV2CborService<L>,
        1363  +
                                    crate::operation_shape::StreamingOperationWithInitialResponse,
        1364  +
                                    ModelPl::Output
        1365  +
                                >
        1366  +
                            >::Output
        1367  +
                        >,
        1368  +
        1369  +
                        HttpPl::Output: ::tower::Service<::http::Request<Body>, Response = ::http::Response<::aws_smithy_legacy_http_server::body::BoxBody>, Error = ::std::convert::Infallible> + Clone + Send + 'static,
        1370  +
                        <HttpPl::Output as ::tower::Service<::http::Request<Body>>>::Future: Send + 'static,
        1371  +
        1372  +
                    {
        1373  +
        use ::aws_smithy_legacy_http_server::operation::OperationShapeExt;
        1374  +
        use ::aws_smithy_legacy_http_server::plugin::Plugin;
        1375  +
        let svc =
        1376  +
            crate::operation_shape::StreamingOperationWithInitialResponse::from_service(service);
        1377  +
        let svc = self.model_plugin.apply(svc);
        1378  +
        let svc =
        1379  +
            ::aws_smithy_legacy_http_server::operation::UpgradePlugin::<UpgradeExtractors>::new()
        1380  +
                .apply(svc);
        1381  +
        let svc = self.http_plugin.apply(svc);
        1382  +
        self.streaming_operation_with_initial_response_custom(svc)
        1383  +
    }
        1384  +
        1385  +
    /// Sets the [`StreamingOperationWithInitialResponse`](crate::operation_shape::StreamingOperationWithInitialResponse) to a custom [`Service`](tower::Service).
        1386  +
    /// not constrained by the Smithy contract.
        1387  +
    fn streaming_operation_with_initial_response_custom<S>(mut self, svc: S) -> Self
        1388  +
    where
        1389  +
        S: ::tower::Service<
        1390  +
                ::http::Request<Body>,
        1391  +
                Response = ::http::Response<::aws_smithy_legacy_http_server::body::BoxBody>,
        1392  +
                Error = ::std::convert::Infallible,
        1393  +
            > + Clone
        1394  +
            + Send
        1395  +
            + 'static,
        1396  +
        S::Future: Send + 'static,
        1397  +
    {
        1398  +
        self.streaming_operation_with_initial_response =
        1399  +
            Some(::aws_smithy_legacy_http_server::routing::Route::new(svc));
        1400  +
        self
        1401  +
    }
        1402  +
        1403  +
    /// Sets the [`StreamingOperationWithOptionalData`](crate::operation_shape::StreamingOperationWithOptionalData) operation.
        1404  +
    ///
        1405  +
    /// This should be an async function satisfying the [`Handler`](::aws_smithy_legacy_http_server::operation::Handler) trait.
        1406  +
    /// See the [operation module documentation](::aws_smithy_legacy_http_server::operation) for more information.
        1407  +
    ///
        1408  +
    /// # Example
        1409  +
    ///
        1410  +
    /// ```no_run
        1411  +
    /// use rpcv2cbor_extras_http0x::{RpcV2CborService, RpcV2CborServiceConfig};
        1412  +
    ///
        1413  +
    /// use rpcv2cbor_extras_http0x::{input, output, error};
        1414  +
    ///
        1415  +
    /// async fn handler(input: input::StreamingOperationWithOptionalDataInput) -> Result<output::StreamingOperationWithOptionalDataOutput, error::StreamingOperationWithOptionalDataError> {
        1416  +
    ///     todo!()
        1417  +
    /// }
        1418  +
    ///
        1419  +
    /// let config = RpcV2CborServiceConfig::builder().build();
        1420  +
    /// let app = RpcV2CborService::builder(config)
        1421  +
    ///     .streaming_operation_with_optional_data(handler)
        1422  +
    ///     /* Set other handlers */
        1423  +
    ///     .build()
        1424  +
    ///     .unwrap();
        1425  +
    /// # let app: RpcV2CborService<::aws_smithy_legacy_http_server::routing::RoutingService<::aws_smithy_legacy_http_server::protocol::rpc_v2_cbor::router::RpcV2CborRouter<::aws_smithy_legacy_http_server::routing::Route>, ::aws_smithy_legacy_http_server::protocol::rpc_v2_cbor::RpcV2Cbor>> = app;
        1426  +
    /// ```
        1427  +
    ///
        1428  +
                    pub fn streaming_operation_with_optional_data<HandlerType, HandlerExtractors, UpgradeExtractors>(self, handler: HandlerType) -> Self
        1429  +
                    where
        1430  +
                        HandlerType: ::aws_smithy_legacy_http_server::operation::Handler<crate::operation_shape::StreamingOperationWithOptionalData, HandlerExtractors>,
        1431  +
        1432  +
                        ModelPl: ::aws_smithy_legacy_http_server::plugin::Plugin<
        1433  +
                            RpcV2CborService<L>,
        1434  +
                            crate::operation_shape::StreamingOperationWithOptionalData,
        1435  +
                            ::aws_smithy_legacy_http_server::operation::IntoService<crate::operation_shape::StreamingOperationWithOptionalData, HandlerType>
        1436  +
                        >,
        1437  +
                        ::aws_smithy_legacy_http_server::operation::UpgradePlugin::<UpgradeExtractors>: ::aws_smithy_legacy_http_server::plugin::Plugin<
        1438  +
                            RpcV2CborService<L>,
        1439  +
                            crate::operation_shape::StreamingOperationWithOptionalData,
        1440  +
                            ModelPl::Output
        1441  +
                        >,
        1442  +
                        HttpPl: ::aws_smithy_legacy_http_server::plugin::Plugin<
        1443  +
                            RpcV2CborService<L>,
        1444  +
                            crate::operation_shape::StreamingOperationWithOptionalData,
        1445  +
                            <
        1446  +
                                ::aws_smithy_legacy_http_server::operation::UpgradePlugin::<UpgradeExtractors>
        1447  +
                                as ::aws_smithy_legacy_http_server::plugin::Plugin<
        1448  +
                                    RpcV2CborService<L>,
        1449  +
                                    crate::operation_shape::StreamingOperationWithOptionalData,
        1450  +
                                    ModelPl::Output
        1451  +
                                >
        1452  +
                            >::Output
        1453  +
                        >,
        1454  +
        1455  +
                        HttpPl::Output: ::tower::Service<::http::Request<Body>, Response = ::http::Response<::aws_smithy_legacy_http_server::body::BoxBody>, Error = ::std::convert::Infallible> + Clone + Send + 'static,
        1456  +
                        <HttpPl::Output as ::tower::Service<::http::Request<Body>>>::Future: Send + 'static,
        1457  +
        1458  +
                    {
        1459  +
        use ::aws_smithy_legacy_http_server::operation::OperationShapeExt;
        1460  +
        use ::aws_smithy_legacy_http_server::plugin::Plugin;
        1461  +
        let svc = crate::operation_shape::StreamingOperationWithOptionalData::from_handler(handler);
        1462  +
        let svc = self.model_plugin.apply(svc);
        1463  +
        let svc =
        1464  +
            ::aws_smithy_legacy_http_server::operation::UpgradePlugin::<UpgradeExtractors>::new()
        1465  +
                .apply(svc);
        1466  +
        let svc = self.http_plugin.apply(svc);
        1467  +
        self.streaming_operation_with_optional_data_custom(svc)
        1468  +
    }
        1469  +
        1470  +
    /// Sets the [`StreamingOperationWithOptionalData`](crate::operation_shape::StreamingOperationWithOptionalData) operation.
        1471  +
    ///
        1472  +
    /// This should be an async function satisfying the [`Handler`](::aws_smithy_legacy_http_server::operation::Handler) trait.
        1473  +
    /// See the [operation module documentation](::aws_smithy_legacy_http_server::operation) for more information.
        1474  +
    ///
        1475  +
    /// # Example
        1476  +
    ///
        1477  +
    /// ```no_run
        1478  +
    /// use rpcv2cbor_extras_http0x::{RpcV2CborService, RpcV2CborServiceConfig};
        1479  +
    ///
        1480  +
    /// use rpcv2cbor_extras_http0x::{input, output, error};
        1481  +
    ///
        1482  +
    /// async fn handler(input: input::StreamingOperationWithOptionalDataInput) -> Result<output::StreamingOperationWithOptionalDataOutput, error::StreamingOperationWithOptionalDataError> {
        1483  +
    ///     todo!()
        1484  +
    /// }
        1485  +
    ///
        1486  +
    /// let config = RpcV2CborServiceConfig::builder().build();
        1487  +
    /// let svc = ::tower::util::service_fn(handler);
        1488  +
    /// let app = RpcV2CborService::builder(config)
        1489  +
    ///     .streaming_operation_with_optional_data_service(svc)
        1490  +
    ///     /* Set other handlers */
        1491  +
    ///     .build()
        1492  +
    ///     .unwrap();
        1493  +
    /// # let app: RpcV2CborService<::aws_smithy_legacy_http_server::routing::RoutingService<::aws_smithy_legacy_http_server::protocol::rpc_v2_cbor::router::RpcV2CborRouter<::aws_smithy_legacy_http_server::routing::Route>, ::aws_smithy_legacy_http_server::protocol::rpc_v2_cbor::RpcV2Cbor>> = app;
        1494  +
    /// ```
        1495  +
    ///
        1496  +
                    pub fn streaming_operation_with_optional_data_service<S, ServiceExtractors, UpgradeExtractors>(self, service: S) -> Self
        1497  +
                    where
        1498  +
                        S: ::aws_smithy_legacy_http_server::operation::OperationService<crate::operation_shape::StreamingOperationWithOptionalData, ServiceExtractors>,
        1499  +
        1500  +
                        ModelPl: ::aws_smithy_legacy_http_server::plugin::Plugin<
        1501  +
                            RpcV2CborService<L>,
        1502  +
                            crate::operation_shape::StreamingOperationWithOptionalData,
        1503  +
                            ::aws_smithy_legacy_http_server::operation::Normalize<crate::operation_shape::StreamingOperationWithOptionalData, S>
        1504  +
                        >,
        1505  +
                        ::aws_smithy_legacy_http_server::operation::UpgradePlugin::<UpgradeExtractors>: ::aws_smithy_legacy_http_server::plugin::Plugin<
        1506  +
                            RpcV2CborService<L>,
        1507  +
                            crate::operation_shape::StreamingOperationWithOptionalData,
        1508  +
                            ModelPl::Output
        1509  +
                        >,
        1510  +
                        HttpPl: ::aws_smithy_legacy_http_server::plugin::Plugin<
        1511  +
                            RpcV2CborService<L>,
        1512  +
                            crate::operation_shape::StreamingOperationWithOptionalData,
        1513  +
                            <
        1514  +
                                ::aws_smithy_legacy_http_server::operation::UpgradePlugin::<UpgradeExtractors>
        1515  +
                                as ::aws_smithy_legacy_http_server::plugin::Plugin<
        1516  +
                                    RpcV2CborService<L>,
        1517  +
                                    crate::operation_shape::StreamingOperationWithOptionalData,
        1518  +
                                    ModelPl::Output
        1519  +
                                >
        1520  +
                            >::Output
        1521  +
                        >,
        1522  +
        1523  +
                        HttpPl::Output: ::tower::Service<::http::Request<Body>, Response = ::http::Response<::aws_smithy_legacy_http_server::body::BoxBody>, Error = ::std::convert::Infallible> + Clone + Send + 'static,
        1524  +
                        <HttpPl::Output as ::tower::Service<::http::Request<Body>>>::Future: Send + 'static,
        1525  +
        1526  +
                    {
        1527  +
        use ::aws_smithy_legacy_http_server::operation::OperationShapeExt;
        1528  +
        use ::aws_smithy_legacy_http_server::plugin::Plugin;
        1529  +
        let svc = crate::operation_shape::StreamingOperationWithOptionalData::from_service(service);
        1530  +
        let svc = self.model_plugin.apply(svc);
        1531  +
        let svc =
        1532  +
            ::aws_smithy_legacy_http_server::operation::UpgradePlugin::<UpgradeExtractors>::new()
        1533  +
                .apply(svc);
        1534  +
        let svc = self.http_plugin.apply(svc);
        1535  +
        self.streaming_operation_with_optional_data_custom(svc)
        1536  +
    }
        1537  +
        1538  +
    /// Sets the [`StreamingOperationWithOptionalData`](crate::operation_shape::StreamingOperationWithOptionalData) to a custom [`Service`](tower::Service).
        1539  +
    /// not constrained by the Smithy contract.
        1540  +
    fn streaming_operation_with_optional_data_custom<S>(mut self, svc: S) -> Self
        1541  +
    where
        1542  +
        S: ::tower::Service<
        1543  +
                ::http::Request<Body>,
        1544  +
                Response = ::http::Response<::aws_smithy_legacy_http_server::body::BoxBody>,
        1545  +
                Error = ::std::convert::Infallible,
        1546  +
            > + Clone
        1547  +
            + Send
        1548  +
            + 'static,
        1549  +
        S::Future: Send + 'static,
        1550  +
    {
        1551  +
        self.streaming_operation_with_optional_data =
        1552  +
            Some(::aws_smithy_legacy_http_server::routing::Route::new(svc));
        1553  +
        self
        1554  +
    }
        1555  +
}
        1556  +
        1557  +
impl<Body, L, HttpPl, ModelPl> RpcV2CborServiceBuilder<Body, L, HttpPl, ModelPl> {
        1558  +
    /// Constructs a [`RpcV2CborService`] from the arguments provided to the builder.
        1559  +
    ///
        1560  +
    /// Forgetting to register a handler for one or more operations will result in an error.
        1561  +
    ///
        1562  +
    /// Check out [`RpcV2CborServiceBuilder::build_unchecked`] if you'd prefer the service to return status code 500 when an
        1563  +
    /// unspecified route is requested.
        1564  +
    pub fn build(
        1565  +
        self,
        1566  +
    ) -> ::std::result::Result<
        1567  +
        RpcV2CborService<
        1568  +
            ::aws_smithy_legacy_http_server::routing::RoutingService<
        1569  +
                ::aws_smithy_legacy_http_server::protocol::rpc_v2_cbor::router::RpcV2CborRouter<
        1570  +
                    L::Service,
        1571  +
                >,
        1572  +
                ::aws_smithy_legacy_http_server::protocol::rpc_v2_cbor::RpcV2Cbor,
        1573  +
            >,
        1574  +
        >,
        1575  +
        MissingOperationsError,
        1576  +
    >
        1577  +
    where
        1578  +
        L: ::tower::Layer<::aws_smithy_legacy_http_server::routing::Route<Body>>,
        1579  +
    {
        1580  +
        let router = {
        1581  +
            use ::aws_smithy_legacy_http_server::operation::OperationShape;
        1582  +
            let mut missing_operation_names = std::collections::HashMap::new();
        1583  +
            if self.complex_struct_operation.is_none() {
        1584  +
                missing_operation_names.insert(
        1585  +
                    crate::operation_shape::ComplexStructOperation::ID,
        1586  +
                    ".complex_struct_operation()",
        1587  +
                );
        1588  +
            }
        1589  +
            if self.empty_struct_operation.is_none() {
        1590  +
                missing_operation_names.insert(
        1591  +
                    crate::operation_shape::EmptyStructOperation::ID,
        1592  +
                    ".empty_struct_operation()",
        1593  +
                );
        1594  +
            }
        1595  +
            if self.error_serialization_operation.is_none() {
        1596  +
                missing_operation_names.insert(
        1597  +
                    crate::operation_shape::ErrorSerializationOperation::ID,
        1598  +
                    ".error_serialization_operation()",
        1599  +
                );
        1600  +
            }
        1601  +
            if self.recursive_union_operation.is_none() {
        1602  +
                missing_operation_names.insert(
        1603  +
                    crate::operation_shape::RecursiveUnionOperation::ID,
        1604  +
                    ".recursive_union_operation()",
        1605  +
                );
        1606  +
            }
        1607  +
            if self.simple_struct_operation.is_none() {
        1608  +
                missing_operation_names.insert(
        1609  +
                    crate::operation_shape::SimpleStructOperation::ID,
        1610  +
                    ".simple_struct_operation()",
        1611  +
                );
        1612  +
            }
        1613  +
            if self.single_member_struct_operation.is_none() {
        1614  +
                missing_operation_names.insert(
        1615  +
                    crate::operation_shape::SingleMemberStructOperation::ID,
        1616  +
                    ".single_member_struct_operation()",
        1617  +
                );
        1618  +
            }
        1619  +
            if self.streaming_operation.is_none() {
        1620  +
                missing_operation_names.insert(
        1621  +
                    crate::operation_shape::StreamingOperation::ID,
        1622  +
                    ".streaming_operation()",
        1623  +
                );
        1624  +
            }
        1625  +
            if self.streaming_operation_with_initial_data.is_none() {
        1626  +
                missing_operation_names.insert(
        1627  +
                    crate::operation_shape::StreamingOperationWithInitialData::ID,
        1628  +
                    ".streaming_operation_with_initial_data()",
        1629  +
                );
        1630  +
            }
        1631  +
            if self.streaming_operation_with_initial_response.is_none() {
        1632  +
                missing_operation_names.insert(
        1633  +
                    crate::operation_shape::StreamingOperationWithInitialResponse::ID,
        1634  +
                    ".streaming_operation_with_initial_response()",
        1635  +
                );
        1636  +
            }
        1637  +
            if self.streaming_operation_with_optional_data.is_none() {
        1638  +
                missing_operation_names.insert(
        1639  +
                    crate::operation_shape::StreamingOperationWithOptionalData::ID,
        1640  +
                    ".streaming_operation_with_optional_data()",
        1641  +
                );
        1642  +
            }
        1643  +
            if !missing_operation_names.is_empty() {
        1644  +
                return Err(MissingOperationsError {
        1645  +
                    operation_names2setter_methods: missing_operation_names,
        1646  +
                });
        1647  +
            }
        1648  +
            let unexpected_error_msg = "this should never panic since we are supposed to check beforehand that a handler has been registered for this operation; please file a bug report under https://github.com/smithy-lang/smithy-rs/issues";
        1649  +
        1650  +
            ::aws_smithy_legacy_http_server::protocol::rpc_v2_cbor::router::RpcV2CborRouter::from_iter([(request_specs::complex_struct_operation(), self.complex_struct_operation.expect(unexpected_error_msg)),
        1651  +
(request_specs::empty_struct_operation(), self.empty_struct_operation.expect(unexpected_error_msg)),
        1652  +
(request_specs::error_serialization_operation(), self.error_serialization_operation.expect(unexpected_error_msg)),
        1653  +
(request_specs::recursive_union_operation(), self.recursive_union_operation.expect(unexpected_error_msg)),
        1654  +
(request_specs::simple_struct_operation(), self.simple_struct_operation.expect(unexpected_error_msg)),
        1655  +
(request_specs::single_member_struct_operation(), self.single_member_struct_operation.expect(unexpected_error_msg)),
        1656  +
(request_specs::streaming_operation(), self.streaming_operation.expect(unexpected_error_msg)),
        1657  +
(request_specs::streaming_operation_with_initial_data(), self.streaming_operation_with_initial_data.expect(unexpected_error_msg)),
        1658  +
(request_specs::streaming_operation_with_initial_response(), self.streaming_operation_with_initial_response.expect(unexpected_error_msg)),
        1659  +
(request_specs::streaming_operation_with_optional_data(), self.streaming_operation_with_optional_data.expect(unexpected_error_msg)),])
        1660  +
        };
        1661  +
        let svc = ::aws_smithy_legacy_http_server::routing::RoutingService::new(router);
        1662  +
        let svc = svc.map(|s| s.layer(self.layer));
        1663  +
        Ok(RpcV2CborService { svc })
        1664  +
    }
        1665  +
        1666  +
    /// Constructs a [`RpcV2CborService`] from the arguments provided to the builder.
        1667  +
    /// Operations without a handler default to returning 500 Internal Server Error to the caller.
        1668  +
    ///
        1669  +
    /// Check out [`RpcV2CborServiceBuilder::build`] if you'd prefer the builder to fail if one or more operations do
        1670  +
    /// not have a registered handler.
        1671  +
    pub fn build_unchecked(self) -> RpcV2CborService<L::Service>
        1672  +
    where
        1673  +
        Body: Send + 'static,
        1674  +
        L: ::tower::Layer<
        1675  +
            ::aws_smithy_legacy_http_server::routing::RoutingService<
        1676  +
                ::aws_smithy_legacy_http_server::protocol::rpc_v2_cbor::router::RpcV2CborRouter<
        1677  +
                    ::aws_smithy_legacy_http_server::routing::Route<Body>,
        1678  +
                >,
        1679  +
                ::aws_smithy_legacy_http_server::protocol::rpc_v2_cbor::RpcV2Cbor,
        1680  +
            >,
        1681  +
        >,
        1682  +
    {
        1683  +
        let router = ::aws_smithy_legacy_http_server::protocol::rpc_v2_cbor::router::RpcV2CborRouter::from_iter([(
        1684  +
                                request_specs::complex_struct_operation(),
        1685  +
                                self.complex_struct_operation.unwrap_or_else(|| {
        1686  +
                                    let svc = ::aws_smithy_legacy_http_server::operation::MissingFailure::<::aws_smithy_legacy_http_server::protocol::rpc_v2_cbor::RpcV2Cbor>::default();
        1687  +
                                    ::aws_smithy_legacy_http_server::routing::Route::new(svc)
        1688  +
                                })
        1689  +
                            ),
        1690  +
(
        1691  +
                                request_specs::empty_struct_operation(),
        1692  +
                                self.empty_struct_operation.unwrap_or_else(|| {
        1693  +
                                    let svc = ::aws_smithy_legacy_http_server::operation::MissingFailure::<::aws_smithy_legacy_http_server::protocol::rpc_v2_cbor::RpcV2Cbor>::default();
        1694  +
                                    ::aws_smithy_legacy_http_server::routing::Route::new(svc)
        1695  +
                                })
        1696  +
                            ),
        1697  +
(
        1698  +
                                request_specs::error_serialization_operation(),
        1699  +
                                self.error_serialization_operation.unwrap_or_else(|| {
        1700  +
                                    let svc = ::aws_smithy_legacy_http_server::operation::MissingFailure::<::aws_smithy_legacy_http_server::protocol::rpc_v2_cbor::RpcV2Cbor>::default();
        1701  +
                                    ::aws_smithy_legacy_http_server::routing::Route::new(svc)
        1702  +
                                })
        1703  +
                            ),
        1704  +
(
        1705  +
                                request_specs::recursive_union_operation(),
        1706  +
                                self.recursive_union_operation.unwrap_or_else(|| {
        1707  +
                                    let svc = ::aws_smithy_legacy_http_server::operation::MissingFailure::<::aws_smithy_legacy_http_server::protocol::rpc_v2_cbor::RpcV2Cbor>::default();
        1708  +
                                    ::aws_smithy_legacy_http_server::routing::Route::new(svc)
        1709  +
                                })
        1710  +
                            ),
        1711  +
(
        1712  +
                                request_specs::simple_struct_operation(),
        1713  +
                                self.simple_struct_operation.unwrap_or_else(|| {
        1714  +
                                    let svc = ::aws_smithy_legacy_http_server::operation::MissingFailure::<::aws_smithy_legacy_http_server::protocol::rpc_v2_cbor::RpcV2Cbor>::default();
        1715  +
                                    ::aws_smithy_legacy_http_server::routing::Route::new(svc)
        1716  +
                                })
        1717  +
                            ),
        1718  +
(
        1719  +
                                request_specs::single_member_struct_operation(),
        1720  +
                                self.single_member_struct_operation.unwrap_or_else(|| {
        1721  +
                                    let svc = ::aws_smithy_legacy_http_server::operation::MissingFailure::<::aws_smithy_legacy_http_server::protocol::rpc_v2_cbor::RpcV2Cbor>::default();
        1722  +
                                    ::aws_smithy_legacy_http_server::routing::Route::new(svc)
        1723  +
                                })
        1724  +
                            ),
        1725  +
(
        1726  +
                                request_specs::streaming_operation(),
        1727  +
                                self.streaming_operation.unwrap_or_else(|| {
        1728  +
                                    let svc = ::aws_smithy_legacy_http_server::operation::MissingFailure::<::aws_smithy_legacy_http_server::protocol::rpc_v2_cbor::RpcV2Cbor>::default();
        1729  +
                                    ::aws_smithy_legacy_http_server::routing::Route::new(svc)
        1730  +
                                })
        1731  +
                            ),
        1732  +
(
        1733  +
                                request_specs::streaming_operation_with_initial_data(),
        1734  +
                                self.streaming_operation_with_initial_data.unwrap_or_else(|| {
        1735  +
                                    let svc = ::aws_smithy_legacy_http_server::operation::MissingFailure::<::aws_smithy_legacy_http_server::protocol::rpc_v2_cbor::RpcV2Cbor>::default();
        1736  +
                                    ::aws_smithy_legacy_http_server::routing::Route::new(svc)
        1737  +
                                })
        1738  +
                            ),
        1739  +
(
        1740  +
                                request_specs::streaming_operation_with_initial_response(),
        1741  +
                                self.streaming_operation_with_initial_response.unwrap_or_else(|| {
        1742  +
                                    let svc = ::aws_smithy_legacy_http_server::operation::MissingFailure::<::aws_smithy_legacy_http_server::protocol::rpc_v2_cbor::RpcV2Cbor>::default();
        1743  +
                                    ::aws_smithy_legacy_http_server::routing::Route::new(svc)
        1744  +
                                })
        1745  +
                            ),
        1746  +
(
        1747  +
                                request_specs::streaming_operation_with_optional_data(),
        1748  +
                                self.streaming_operation_with_optional_data.unwrap_or_else(|| {
        1749  +
                                    let svc = ::aws_smithy_legacy_http_server::operation::MissingFailure::<::aws_smithy_legacy_http_server::protocol::rpc_v2_cbor::RpcV2Cbor>::default();
        1750  +
                                    ::aws_smithy_legacy_http_server::routing::Route::new(svc)
        1751  +
                                })
        1752  +
                            ),]);
        1753  +
        let svc = self
        1754  +
            .layer
        1755  +
            .layer(::aws_smithy_legacy_http_server::routing::RoutingService::new(router));
        1756  +
        RpcV2CborService { svc }
        1757  +
    }
        1758  +
}
        1759  +
        1760  +
/// The error encountered when calling the [`RpcV2CborServiceBuilder::build`] method if one or more operation handlers are not
        1761  +
/// specified.
        1762  +
#[derive(Debug)]
        1763  +
pub struct MissingOperationsError {
        1764  +
    operation_names2setter_methods:
        1765  +
        std::collections::HashMap<::aws_smithy_legacy_http_server::shape_id::ShapeId, &'static str>,
        1766  +
}
        1767  +
        1768  +
impl std::fmt::Display for MissingOperationsError {
        1769  +
    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
        1770  +
        write!(
        1771  +
            f,
        1772  +
            "You must specify a handler for all operations attached to `RpcV2CborService`.\n\
        1773  +
                            We are missing handlers for the following operations:\n",
        1774  +
        )?;
        1775  +
        for operation_name in self.operation_names2setter_methods.keys() {
        1776  +
            writeln!(f, "- {}", operation_name.absolute())?;
        1777  +
        }
        1778  +
        1779  +
        writeln!(f, "\nUse the dedicated methods on `RpcV2CborServiceBuilder` to register the missing handlers:")?;
        1780  +
        for setter_name in self.operation_names2setter_methods.values() {
        1781  +
            writeln!(f, "- {}", setter_name)?;
        1782  +
        }
        1783  +
        Ok(())
        1784  +
    }
        1785  +
}
        1786  +
        1787  +
impl std::error::Error for MissingOperationsError {}
        1788  +
        1789  +
mod request_specs {
        1790  +
    pub(super) fn complex_struct_operation() -> &'static str {
        1791  +
        "RpcV2CborService.ComplexStructOperation"
        1792  +
    }
        1793  +
    pub(super) fn empty_struct_operation() -> &'static str {
        1794  +
        "RpcV2CborService.EmptyStructOperation"
        1795  +
    }
        1796  +
    pub(super) fn error_serialization_operation() -> &'static str {
        1797  +
        "RpcV2CborService.ErrorSerializationOperation"
        1798  +
    }
        1799  +
    pub(super) fn recursive_union_operation() -> &'static str {
        1800  +
        "RpcV2CborService.RecursiveUnionOperation"
        1801  +
    }
        1802  +
    pub(super) fn simple_struct_operation() -> &'static str {
        1803  +
        "RpcV2CborService.SimpleStructOperation"
        1804  +
    }
        1805  +
    pub(super) fn single_member_struct_operation() -> &'static str {
        1806  +
        "RpcV2CborService.SingleMemberStructOperation"
        1807  +
    }
        1808  +
    pub(super) fn streaming_operation() -> &'static str {
        1809  +
        "RpcV2CborService.StreamingOperation"
        1810  +
    }
        1811  +
    pub(super) fn streaming_operation_with_initial_data() -> &'static str {
        1812  +
        "RpcV2CborService.StreamingOperationWithInitialData"
        1813  +
    }
        1814  +
    pub(super) fn streaming_operation_with_initial_response() -> &'static str {
        1815  +
        "RpcV2CborService.StreamingOperationWithInitialResponse"
        1816  +
    }
        1817  +
    pub(super) fn streaming_operation_with_optional_data() -> &'static str {
        1818  +
        "RpcV2CborService.StreamingOperationWithOptionalData"
        1819  +
    }
        1820  +
}
        1821  +
        1822  +
#[allow(missing_docs)] // documentation missing in model
        1823  +
///
        1824  +
/// See the [root](crate) documentation for more information.
        1825  +
#[derive(Clone)]
        1826  +
pub struct RpcV2CborService<
        1827  +
    S = ::aws_smithy_legacy_http_server::routing::RoutingService<
        1828  +
        ::aws_smithy_legacy_http_server::protocol::rpc_v2_cbor::router::RpcV2CborRouter<
        1829  +
            ::aws_smithy_legacy_http_server::routing::Route<
        1830  +
                ::aws_smithy_legacy_http_server::body::BoxBody,
        1831  +
            >,
        1832  +
        >,
        1833  +
        ::aws_smithy_legacy_http_server::protocol::rpc_v2_cbor::RpcV2Cbor,
        1834  +
    >,
        1835  +
> {
        1836  +
    // This is the router wrapped by layers.
        1837  +
    svc: S,
        1838  +
}
        1839  +
        1840  +
impl RpcV2CborService<()> {
        1841  +
    /// Constructs a builder for [`RpcV2CborService`].
        1842  +
    /// You must specify a configuration object holding any plugins and layers that should be applied
        1843  +
    /// to the operations in this service.
        1844  +
    pub fn builder<
        1845  +
        Body,
        1846  +
        L,
        1847  +
        HttpPl: ::aws_smithy_legacy_http_server::plugin::HttpMarker,
        1848  +
        ModelPl: ::aws_smithy_legacy_http_server::plugin::ModelMarker,
        1849  +
    >(
        1850  +
        config: RpcV2CborServiceConfig<L, HttpPl, ModelPl>,
        1851  +
    ) -> RpcV2CborServiceBuilder<Body, L, HttpPl, ModelPl> {
        1852  +
        RpcV2CborServiceBuilder {
        1853  +
            complex_struct_operation: None,
        1854  +
            empty_struct_operation: None,
        1855  +
            error_serialization_operation: None,
        1856  +
            recursive_union_operation: None,
        1857  +
            simple_struct_operation: None,
        1858  +
            single_member_struct_operation: None,
        1859  +
            streaming_operation: None,
        1860  +
            streaming_operation_with_initial_data: None,
        1861  +
            streaming_operation_with_initial_response: None,
        1862  +
            streaming_operation_with_optional_data: None,
        1863  +
            layer: config.layers,
        1864  +
            http_plugin: config.http_plugins,
        1865  +
            model_plugin: config.model_plugins,
        1866  +
        }
        1867  +
    }
        1868  +
        1869  +
    /// Constructs a builder for [`RpcV2CborService`].
        1870  +
    /// You must specify what plugins should be applied to the operations in this service.
        1871  +
    ///
        1872  +
    /// Use [`RpcV2CborService::builder_without_plugins`] if you don't need to apply plugins.
        1873  +
    ///
        1874  +
    /// Check out [`HttpPlugins`](::aws_smithy_legacy_http_server::plugin::HttpPlugins) and
        1875  +
    /// [`ModelPlugins`](::aws_smithy_legacy_http_server::plugin::ModelPlugins) if you need to apply
        1876  +
    /// multiple plugins.
        1877  +
    #[deprecated(
        1878  +
        since = "0.57.0",
        1879  +
        note = "please use the `builder` constructor and register plugins on the `RpcV2CborServiceConfig` object instead; see https://github.com/smithy-lang/smithy-rs/discussions/3096"
        1880  +
    )]
        1881  +
    pub fn builder_with_plugins<
        1882  +
        Body,
        1883  +
        HttpPl: ::aws_smithy_legacy_http_server::plugin::HttpMarker,
        1884  +
        ModelPl: ::aws_smithy_legacy_http_server::plugin::ModelMarker,
        1885  +
    >(
        1886  +
        http_plugin: HttpPl,
        1887  +
        model_plugin: ModelPl,
        1888  +
    ) -> RpcV2CborServiceBuilder<Body, ::tower::layer::util::Identity, HttpPl, ModelPl> {
        1889  +
        RpcV2CborServiceBuilder {
        1890  +
            complex_struct_operation: None,
        1891  +
            empty_struct_operation: None,
        1892  +
            error_serialization_operation: None,
        1893  +
            recursive_union_operation: None,
        1894  +
            simple_struct_operation: None,
        1895  +
            single_member_struct_operation: None,
        1896  +
            streaming_operation: None,
        1897  +
            streaming_operation_with_initial_data: None,
        1898  +
            streaming_operation_with_initial_response: None,
        1899  +
            streaming_operation_with_optional_data: None,
        1900  +
            layer: ::tower::layer::util::Identity::new(),
        1901  +
            http_plugin,
        1902  +
            model_plugin,
        1903  +
        }
        1904  +
    }
        1905  +
        1906  +
    /// Constructs a builder for [`RpcV2CborService`].
        1907  +
    ///
        1908  +
    /// Use [`RpcV2CborService::builder_with_plugins`] if you need to specify plugins.
        1909  +
    #[deprecated(
        1910  +
        since = "0.57.0",
        1911  +
        note = "please use the `builder` constructor instead; see https://github.com/smithy-lang/smithy-rs/discussions/3096"
        1912  +
    )]
        1913  +
    pub fn builder_without_plugins<Body>() -> RpcV2CborServiceBuilder<
        1914  +
        Body,
        1915  +
        ::tower::layer::util::Identity,
        1916  +
        ::aws_smithy_legacy_http_server::plugin::IdentityPlugin,
        1917  +
        ::aws_smithy_legacy_http_server::plugin::IdentityPlugin,
        1918  +
    > {
        1919  +
        Self::builder_with_plugins(
        1920  +
            ::aws_smithy_legacy_http_server::plugin::IdentityPlugin,
        1921  +
            ::aws_smithy_legacy_http_server::plugin::IdentityPlugin,
        1922  +
        )
        1923  +
    }
        1924  +
}
        1925  +
        1926  +
impl<S> RpcV2CborService<S> {
        1927  +
    /// Converts [`RpcV2CborService`] into a [`MakeService`](tower::make::MakeService).
        1928  +
    pub fn into_make_service(
        1929  +
        self,
        1930  +
    ) -> ::aws_smithy_legacy_http_server::routing::IntoMakeService<Self> {
        1931  +
        ::aws_smithy_legacy_http_server::routing::IntoMakeService::new(self)
        1932  +
    }
        1933  +
        1934  +
    /// Converts [`RpcV2CborService`] into a [`MakeService`](tower::make::MakeService) with [`ConnectInfo`](::aws_smithy_legacy_http_server::request::connect_info::ConnectInfo).
        1935  +
    pub fn into_make_service_with_connect_info<C>(
        1936  +
        self,
        1937  +
    ) -> ::aws_smithy_legacy_http_server::routing::IntoMakeServiceWithConnectInfo<Self, C> {
        1938  +
        ::aws_smithy_legacy_http_server::routing::IntoMakeServiceWithConnectInfo::new(self)
        1939  +
    }
        1940  +
}
        1941  +
        1942  +
impl<S>
        1943  +
    RpcV2CborService<
        1944  +
        ::aws_smithy_legacy_http_server::routing::RoutingService<
        1945  +
            ::aws_smithy_legacy_http_server::protocol::rpc_v2_cbor::router::RpcV2CborRouter<S>,
        1946  +
            ::aws_smithy_legacy_http_server::protocol::rpc_v2_cbor::RpcV2Cbor,
        1947  +
        >,
        1948  +
    >
        1949  +
{
        1950  +
    /// Applies a [`Layer`](::tower::Layer) uniformly to all routes.
        1951  +
    #[deprecated(
        1952  +
        since = "0.57.0",
        1953  +
        note = "please add layers to the `RpcV2CborServiceConfig` object instead; see https://github.com/smithy-lang/smithy-rs/discussions/3096"
        1954  +
    )]
        1955  +
    pub fn layer<L>(
        1956  +
        self,
        1957  +
        layer: &L,
        1958  +
    ) -> RpcV2CborService<
        1959  +
        ::aws_smithy_legacy_http_server::routing::RoutingService<
        1960  +
            ::aws_smithy_legacy_http_server::protocol::rpc_v2_cbor::router::RpcV2CborRouter<
        1961  +
                L::Service,
        1962  +
            >,
        1963  +
            ::aws_smithy_legacy_http_server::protocol::rpc_v2_cbor::RpcV2Cbor,
        1964  +
        >,
        1965  +
    >
        1966  +
    where
        1967  +
        L: ::tower::Layer<S>,
        1968  +
    {
        1969  +
        RpcV2CborService {
        1970  +
            svc: self.svc.map(|s| s.layer(layer)),
        1971  +
        }
        1972  +
    }
        1973  +
        1974  +
    /// Applies [`Route::new`](::aws_smithy_legacy_http_server::routing::Route::new) to all routes.
        1975  +
    ///
        1976  +
    /// This has the effect of erasing all types accumulated via layers.
        1977  +
    pub fn boxed<B>(
        1978  +
        self,
        1979  +
    ) -> RpcV2CborService<
        1980  +
        ::aws_smithy_legacy_http_server::routing::RoutingService<
        1981  +
            ::aws_smithy_legacy_http_server::protocol::rpc_v2_cbor::router::RpcV2CborRouter<
        1982  +
                ::aws_smithy_legacy_http_server::routing::Route<B>,
        1983  +
            >,
        1984  +
            ::aws_smithy_legacy_http_server::protocol::rpc_v2_cbor::RpcV2Cbor,
        1985  +
        >,
        1986  +
    >
        1987  +
    where
        1988  +
        S: ::tower::Service<
        1989  +
            ::http::Request<B>,
        1990  +
            Response = ::http::Response<::aws_smithy_legacy_http_server::body::BoxBody>,
        1991  +
            Error = std::convert::Infallible,
        1992  +
        >,
        1993  +
        S: Clone + Send + 'static,
        1994  +
        S::Future: Send + 'static,
        1995  +
    {
        1996  +
        self.layer(&::tower::layer::layer_fn(
        1997  +
            ::aws_smithy_legacy_http_server::routing::Route::new,
        1998  +
        ))
        1999  +
    }
        2000  +
}
        2001  +
        2002  +
impl<S, R> ::tower::Service<R> for RpcV2CborService<S>
        2003  +
where
        2004  +
    S: ::tower::Service<R>,
        2005  +
{
        2006  +
    type Response = S::Response;
        2007  +
    type Error = S::Error;
        2008  +
    type Future = S::Future;
        2009  +
        2010  +
    fn poll_ready(
        2011  +
        &mut self,
        2012  +
        cx: &mut std::task::Context,
        2013  +
    ) -> std::task::Poll<::std::result::Result<(), Self::Error>> {
        2014  +
        self.svc.poll_ready(cx)
        2015  +
    }
        2016  +
        2017  +
    fn call(&mut self, request: R) -> Self::Future {
        2018  +
        self.svc.call(request)
        2019  +
    }
        2020  +
}
        2021  +
        2022  +
/// An enumeration of all [operations](https://smithy.io/2.0/spec/service-types.html#operation) in RpcV2CborService.
        2023  +
#[allow(clippy::enum_variant_names)]
        2024  +
#[derive(Debug, PartialEq, Eq, Clone, Copy)]
        2025  +
pub enum Operation {
        2026  +
    ComplexStructOperation,
        2027  +
    EmptyStructOperation,
        2028  +
    ErrorSerializationOperation,
        2029  +
    RecursiveUnionOperation,
        2030  +
    SimpleStructOperation,
        2031  +
    SingleMemberStructOperation,
        2032  +
    StreamingOperation,
        2033  +
    StreamingOperationWithInitialData,
        2034  +
    StreamingOperationWithInitialResponse,
        2035  +
    StreamingOperationWithOptionalData,
        2036  +
}
        2037  +
        2038  +
impl Operation {
        2039  +
    /// Returns the [operations](https://smithy.io/2.0/spec/service-types.html#operation) [`ShapeId`](::aws_smithy_legacy_http_server::shape_id::ShapeId).
        2040  +
    pub fn shape_id(&self) -> ::aws_smithy_legacy_http_server::shape_id::ShapeId {
        2041  +
        match self {
        2042  +
            Operation::ComplexStructOperation => {
        2043  +
                ::aws_smithy_legacy_http_server::shape_id::ShapeId::new(
        2044  +
                    "smithy.protocoltests.rpcv2Cbor#ComplexStructOperation",
        2045  +
                    "smithy.protocoltests.rpcv2Cbor",
        2046  +
                    "ComplexStructOperation",
        2047  +
                )
        2048  +
            }
        2049  +
            Operation::EmptyStructOperation => {
        2050  +
                ::aws_smithy_legacy_http_server::shape_id::ShapeId::new(
        2051  +
                    "smithy.protocoltests.rpcv2Cbor#EmptyStructOperation",
        2052  +
                    "smithy.protocoltests.rpcv2Cbor",
        2053  +
                    "EmptyStructOperation",
        2054  +
                )
        2055  +
            }
        2056  +
            Operation::ErrorSerializationOperation => {
        2057  +
                ::aws_smithy_legacy_http_server::shape_id::ShapeId::new(
        2058  +
                    "smithy.protocoltests.rpcv2Cbor#ErrorSerializationOperation",
        2059  +
                    "smithy.protocoltests.rpcv2Cbor",
        2060  +
                    "ErrorSerializationOperation",
        2061  +
                )
        2062  +
            }
        2063  +
            Operation::RecursiveUnionOperation => {
        2064  +
                ::aws_smithy_legacy_http_server::shape_id::ShapeId::new(
        2065  +
                    "smithy.protocoltests.rpcv2Cbor#RecursiveUnionOperation",
        2066  +
                    "smithy.protocoltests.rpcv2Cbor",
        2067  +
                    "RecursiveUnionOperation",
        2068  +
                )
        2069  +
            }
        2070  +
            Operation::SimpleStructOperation => {
        2071  +
                ::aws_smithy_legacy_http_server::shape_id::ShapeId::new(
        2072  +
                    "smithy.protocoltests.rpcv2Cbor#SimpleStructOperation",
        2073  +
                    "smithy.protocoltests.rpcv2Cbor",
        2074  +
                    "SimpleStructOperation",
        2075  +
                )
        2076  +
            }
        2077  +
            Operation::SingleMemberStructOperation => {
        2078  +
                ::aws_smithy_legacy_http_server::shape_id::ShapeId::new(
        2079  +
                    "smithy.protocoltests.rpcv2Cbor#SingleMemberStructOperation",
        2080  +
                    "smithy.protocoltests.rpcv2Cbor",
        2081  +
                    "SingleMemberStructOperation",
        2082  +
                )
        2083  +
            }
        2084  +
            Operation::StreamingOperation => {
        2085  +
                ::aws_smithy_legacy_http_server::shape_id::ShapeId::new(
        2086  +
                    "smithy.protocoltests.rpcv2Cbor#StreamingOperation",
        2087  +
                    "smithy.protocoltests.rpcv2Cbor",
        2088  +
                    "StreamingOperation",
        2089  +
                )
        2090  +
            }
        2091  +
            Operation::StreamingOperationWithInitialData => {
        2092  +
                ::aws_smithy_legacy_http_server::shape_id::ShapeId::new(
        2093  +
                    "smithy.protocoltests.rpcv2Cbor#StreamingOperationWithInitialData",
        2094  +
                    "smithy.protocoltests.rpcv2Cbor",
        2095  +
                    "StreamingOperationWithInitialData",
        2096  +
                )
        2097  +
            }
        2098  +
            Operation::StreamingOperationWithInitialResponse => {
        2099  +
                ::aws_smithy_legacy_http_server::shape_id::ShapeId::new(
        2100  +
                    "smithy.protocoltests.rpcv2Cbor#StreamingOperationWithInitialResponse",
        2101  +
                    "smithy.protocoltests.rpcv2Cbor",
        2102  +
                    "StreamingOperationWithInitialResponse",
        2103  +
                )
        2104  +
            }
        2105  +
            Operation::StreamingOperationWithOptionalData => {
        2106  +
                ::aws_smithy_legacy_http_server::shape_id::ShapeId::new(
        2107  +
                    "smithy.protocoltests.rpcv2Cbor#StreamingOperationWithOptionalData",
        2108  +
                    "smithy.protocoltests.rpcv2Cbor",
        2109  +
                    "StreamingOperationWithOptionalData",
        2110  +
                )
        2111  +
            }
        2112  +
        }
        2113  +
    }
        2114  +
}
        2115  +
impl<L>
        2116  +
    ::aws_smithy_legacy_http_server::service::ContainsOperation<
        2117  +
        crate::operation_shape::ComplexStructOperation,
        2118  +
    > for RpcV2CborService<L>
        2119  +
{
        2120  +
    const VALUE: Operation = Operation::ComplexStructOperation;
        2121  +
}
        2122  +
impl<L>
        2123  +
    ::aws_smithy_legacy_http_server::service::ContainsOperation<
        2124  +
        crate::operation_shape::EmptyStructOperation,
        2125  +
    > for RpcV2CborService<L>
        2126  +
{
        2127  +
    const VALUE: Operation = Operation::EmptyStructOperation;
        2128  +
}
        2129  +
impl<L>
        2130  +
    ::aws_smithy_legacy_http_server::service::ContainsOperation<
        2131  +
        crate::operation_shape::ErrorSerializationOperation,
        2132  +
    > for RpcV2CborService<L>
        2133  +
{
        2134  +
    const VALUE: Operation = Operation::ErrorSerializationOperation;
        2135  +
}
        2136  +
impl<L>
        2137  +
    ::aws_smithy_legacy_http_server::service::ContainsOperation<
        2138  +
        crate::operation_shape::RecursiveUnionOperation,
        2139  +
    > for RpcV2CborService<L>
        2140  +
{
        2141  +
    const VALUE: Operation = Operation::RecursiveUnionOperation;
        2142  +
}
        2143  +
impl<L>
        2144  +
    ::aws_smithy_legacy_http_server::service::ContainsOperation<
        2145  +
        crate::operation_shape::SimpleStructOperation,
        2146  +
    > for RpcV2CborService<L>
        2147  +
{
        2148  +
    const VALUE: Operation = Operation::SimpleStructOperation;
        2149  +
}
        2150  +
impl<L>
        2151  +
    ::aws_smithy_legacy_http_server::service::ContainsOperation<
        2152  +
        crate::operation_shape::SingleMemberStructOperation,
        2153  +
    > for RpcV2CborService<L>
        2154  +
{
        2155  +
    const VALUE: Operation = Operation::SingleMemberStructOperation;
        2156  +
}
        2157  +
impl<L>
        2158  +
    ::aws_smithy_legacy_http_server::service::ContainsOperation<
        2159  +
        crate::operation_shape::StreamingOperation,
        2160  +
    > for RpcV2CborService<L>
        2161  +
{
        2162  +
    const VALUE: Operation = Operation::StreamingOperation;
        2163  +
}
        2164  +
impl<L>
        2165  +
    ::aws_smithy_legacy_http_server::service::ContainsOperation<
        2166  +
        crate::operation_shape::StreamingOperationWithInitialData,
        2167  +
    > for RpcV2CborService<L>
        2168  +
{
        2169  +
    const VALUE: Operation = Operation::StreamingOperationWithInitialData;
        2170  +
}
        2171  +
impl<L>
        2172  +
    ::aws_smithy_legacy_http_server::service::ContainsOperation<
        2173  +
        crate::operation_shape::StreamingOperationWithInitialResponse,
        2174  +
    > for RpcV2CborService<L>
        2175  +
{
        2176  +
    const VALUE: Operation = Operation::StreamingOperationWithInitialResponse;
        2177  +
}
        2178  +
impl<L>
        2179  +
    ::aws_smithy_legacy_http_server::service::ContainsOperation<
        2180  +
        crate::operation_shape::StreamingOperationWithOptionalData,
        2181  +
    > for RpcV2CborService<L>
        2182  +
{
        2183  +
    const VALUE: Operation = Operation::StreamingOperationWithOptionalData;
        2184  +
}
        2185  +
        2186  +
impl<S> ::aws_smithy_legacy_http_server::service::ServiceShape for RpcV2CborService<S> {
        2187  +
    const ID: ::aws_smithy_legacy_http_server::shape_id::ShapeId =
        2188  +
        ::aws_smithy_legacy_http_server::shape_id::ShapeId::new(
        2189  +
            "smithy.protocoltests.rpcv2Cbor#RpcV2CborService",
        2190  +
            "smithy.protocoltests.rpcv2Cbor",
        2191  +
            "RpcV2CborService",
        2192  +
        );
        2193  +
        2194  +
    const VERSION: Option<&'static str> = Some("");
        2195  +
        2196  +
    type Protocol = ::aws_smithy_legacy_http_server::protocol::rpc_v2_cbor::RpcV2Cbor;
        2197  +
        2198  +
    type Operations = Operation;
        2199  +
}
        2200  +
/// Configuration for the [`RpcV2CborService`]. This is the central place where to register and
        2201  +
/// configure [`::tower::Layer`]s, HTTP plugins, and model plugins.
        2202  +
///
        2203  +
/// ```rust,no_run
        2204  +
/// # use rpcv2cbor_extras_http0x::RpcV2CborServiceConfig;
        2205  +
/// # use ::aws_smithy_legacy_http_server::plugin::IdentityPlugin;
        2206  +
/// # use ::tower::layer::util::Identity;
        2207  +
/// # let authentication_plugin = IdentityPlugin;
        2208  +
/// # let authorization_plugin = IdentityPlugin;
        2209  +
/// # let server_request_id_provider_layer = Identity::new();
        2210  +
/// let config = RpcV2CborServiceConfig::builder()
        2211  +
///     // Layers get executed first...
        2212  +
///     .layer(server_request_id_provider_layer)
        2213  +
///     // ...then HTTP plugins...
        2214  +
///     .http_plugin(authentication_plugin)
        2215  +
///     // ...and right after deserialization, model plugins.
        2216  +
///     .model_plugin(authorization_plugin)
        2217  +
///     .build();
        2218  +
/// ```
        2219  +
///
        2220  +
/// See the [`plugin`] system for details.
        2221  +
///
        2222  +
/// [`plugin`]: ::aws_smithy_legacy_http_server::plugin
        2223  +
#[derive(::std::fmt::Debug)]
        2224  +
pub struct RpcV2CborServiceConfig<L, H, M> {
        2225  +
    layers: L,
        2226  +
    http_plugins: H,
        2227  +
    model_plugins: M,
        2228  +
}
        2229  +
        2230  +
impl RpcV2CborServiceConfig<(), (), ()> {
        2231  +
    /// Returns a builder to construct the configuration.
        2232  +
    pub fn builder() -> RpcV2CborServiceConfigBuilder<
        2233  +
        ::tower::layer::util::Identity,
        2234  +
        ::aws_smithy_legacy_http_server::plugin::IdentityPlugin,
        2235  +
        ::aws_smithy_legacy_http_server::plugin::IdentityPlugin,
        2236  +
    > {
        2237  +
        RpcV2CborServiceConfigBuilder {
        2238  +
            layers: ::tower::layer::util::Identity::new(),
        2239  +
            http_plugins: ::aws_smithy_legacy_http_server::plugin::IdentityPlugin,
        2240  +
            model_plugins: ::aws_smithy_legacy_http_server::plugin::IdentityPlugin,
        2241  +
        }
        2242  +
    }
        2243  +
}
        2244  +
        2245  +
/// Builder returned by [`RpcV2CborServiceConfig::builder()`].
        2246  +
#[derive(::std::fmt::Debug)]
        2247  +
pub struct RpcV2CborServiceConfigBuilder<L, H, M> {
        2248  +
    pub(crate) layers: L,
        2249  +
    pub(crate) http_plugins: H,
        2250  +
    pub(crate) model_plugins: M,
        2251  +
}
        2252  +
        2253  +
impl<L, H, M> RpcV2CborServiceConfigBuilder<L, H, M> {
        2254  +
    /// Add a [`::tower::Layer`] to the service.
        2255  +
    pub fn layer<NewLayer>(
        2256  +
        self,
        2257  +
        layer: NewLayer,
        2258  +
    ) -> RpcV2CborServiceConfigBuilder<::tower::layer::util::Stack<NewLayer, L>, H, M> {
        2259  +
        RpcV2CborServiceConfigBuilder {
        2260  +
            layers: ::tower::layer::util::Stack::new(layer, self.layers),
        2261  +
            http_plugins: self.http_plugins,
        2262  +
            model_plugins: self.model_plugins,
        2263  +
        }
        2264  +
    }
        2265  +
        2266  +
    /// Add a HTTP [plugin] to the service.
        2267  +
    ///
        2268  +
    /// [plugin]: ::aws_smithy_legacy_http_server::plugin
        2269  +
    // We eagerly require `NewPlugin: HttpMarker`, despite not really needing it, because compiler
        2270  +
    // errors get _substantially_ better if the user makes a mistake.
        2271  +
    pub fn http_plugin<NewPlugin: ::aws_smithy_legacy_http_server::plugin::HttpMarker>(
        2272  +
        self,
        2273  +
        http_plugin: NewPlugin,
        2274  +
    ) -> RpcV2CborServiceConfigBuilder<
        2275  +
        L,
        2276  +
        ::aws_smithy_legacy_http_server::plugin::PluginStack<NewPlugin, H>,
        2277  +
        M,
        2278  +
    > {
        2279  +
        RpcV2CborServiceConfigBuilder {
        2280  +
            layers: self.layers,
        2281  +
            http_plugins: ::aws_smithy_legacy_http_server::plugin::PluginStack::new(
        2282  +
                http_plugin,
        2283  +
                self.http_plugins,
        2284  +
            ),
        2285  +
            model_plugins: self.model_plugins,
        2286  +
        }
        2287  +
    }
        2288  +
        2289  +
    /// Add a model [plugin] to the service.
        2290  +
    ///
        2291  +
    /// [plugin]: ::aws_smithy_legacy_http_server::plugin
        2292  +
    // We eagerly require `NewPlugin: ModelMarker`, despite not really needing it, because compiler
        2293  +
    // errors get _substantially_ better if the user makes a mistake.
        2294  +
    pub fn model_plugin<NewPlugin: ::aws_smithy_legacy_http_server::plugin::ModelMarker>(
        2295  +
        self,
        2296  +
        model_plugin: NewPlugin,
        2297  +
    ) -> RpcV2CborServiceConfigBuilder<
        2298  +
        L,
        2299  +
        H,
        2300  +
        ::aws_smithy_legacy_http_server::plugin::PluginStack<NewPlugin, M>,
        2301  +
    > {
        2302  +
        RpcV2CborServiceConfigBuilder {
        2303  +
            layers: self.layers,
        2304  +
            http_plugins: self.http_plugins,
        2305  +
            model_plugins: ::aws_smithy_legacy_http_server::plugin::PluginStack::new(
        2306  +
                model_plugin,
        2307  +
                self.model_plugins,
        2308  +
            ),
        2309  +
        }
        2310  +
    }
        2311  +
        2312  +
    /// Build the configuration.
        2313  +
    pub fn build(self) -> super::RpcV2CborServiceConfig<L, H, M> {
        2314  +
        super::RpcV2CborServiceConfig {
        2315  +
            layers: self.layers,
        2316  +
            http_plugins: self.http_plugins,
        2317  +
            model_plugins: self.model_plugins,
        2318  +
        }
        2319  +
    }
        2320  +
}
        2321  +
/// A macro to help with scoping [plugins](crate::server::plugin) to a subset of all operations.
        2322  +
///
        2323  +
/// In contrast to [`crate::server::scope`](crate::server::scope), this macro has knowledge
        2324  +
/// of the service and any operations _not_ specified will be placed in the opposing group.
        2325  +
///
        2326  +
/// # Example
        2327  +
///
        2328  +
/// ```rust
        2329  +
/// scope! {
        2330  +
///     /// Includes [`ComplexStructOperation`], excluding all other operations.
        2331  +
///     struct ScopeA {
        2332  +
///         includes: [ComplexStructOperation]
        2333  +
///     }
        2334  +
/// }
        2335  +
///
        2336  +
/// scope! {
        2337  +
///     /// Excludes [`ComplexStructOperation`], excluding all other operations.
        2338  +
///     struct ScopeB {
        2339  +
///         excludes: [ComplexStructOperation]
        2340  +
///     }
        2341  +
/// }
        2342  +
///
        2343  +
/// # use rpcv2cbor_extras_http0x::server::plugin::{Plugin, Scoped};
        2344  +
/// # use rpcv2cbor_extras_http0x::scope;
        2345  +
/// # struct MockPlugin;
        2346  +
/// # impl<S, Op, T> Plugin<S, Op, T> for MockPlugin { type Output = u32; fn apply(&self, input: T) -> u32 { 3 } }
        2347  +
/// # let scoped_a = Scoped::new::<ScopeA>(MockPlugin);
        2348  +
/// # let scoped_b = Scoped::new::<ScopeB>(MockPlugin);
        2349  +
/// # let a = Plugin::<(), rpcv2cbor_extras_http0x::operation_shape::ComplexStructOperation, u64>::apply(&scoped_a, 6);
        2350  +
/// # let b = Plugin::<(), rpcv2cbor_extras_http0x::operation_shape::ComplexStructOperation, u64>::apply(&scoped_b, 6);
        2351  +
/// # assert_eq!(a, 3_u32);
        2352  +
/// # assert_eq!(b, 6_u64);
        2353  +
/// ```
        2354  +
#[macro_export]
        2355  +
macro_rules! scope {
        2356  +
                    // Completed, render impls
        2357  +
                    (@ $ name: ident, $ contains: ident () ($($ temp: ident)*) ($($ not_member: ident)*)) => {
        2358  +
                        $(
        2359  +
                            impl $ crate::server::plugin::scoped::Membership<$ temp> for $ name {
        2360  +
                                type Contains = $ crate::server::plugin::scoped::$ contains;
        2361  +
                            }
        2362  +
                        )*
        2363  +
                        $(
        2364  +
                            impl $ crate::server::plugin::scoped::Membership<$ not_member> for $ name {
        2365  +
                                type Contains = $ crate::server::plugin::scoped::$ contains;
        2366  +
                            }
        2367  +
                        )*
        2368  +
                    };
        2369  +
                    // All `not_member`s exhausted, move `temp` into `not_member`
        2370  +
                    (@ $ name: ident, $ contains: ident ($($ member: ident)*) ($($ temp: ident)*) ()) => {
        2371  +
                        scope! { @ $ name, $ contains ($($ member)*) () ($($ temp)*) }
        2372  +
                    };
        2373  +
        2374  +
                        // ComplexStructOperation match found, pop from both `member` and `not_member`
        2375  +
                        (@ $ name: ident, $ contains: ident (ComplexStructOperation $($ member: ident)*) ($($ temp: ident)*) (ComplexStructOperation $($ not_member: ident)*)) => {
        2376  +
                            scope! { @ $ name, $ contains ($($ member)*) ($($ temp)*) ($($ not_member)*) }
        2377  +
                        };
        2378  +
                        // ComplexStructOperation match not found, pop from `not_member` into `temp` stack
        2379  +
                        (@ $ name: ident, $ contains: ident (ComplexStructOperation $($ member: ident)*) ($($ temp: ident)*) ($ other: ident $($ not_member: ident)*)) => {
        2380  +
                            scope! { @ $ name, $ contains (ComplexStructOperation $($ member)*) ($ other $($ temp)*) ($($ not_member)*) }
        2381  +
                        };
        2382  +
        2383  +
                        // EmptyStructOperation match found, pop from both `member` and `not_member`
        2384  +
                        (@ $ name: ident, $ contains: ident (EmptyStructOperation $($ member: ident)*) ($($ temp: ident)*) (EmptyStructOperation $($ not_member: ident)*)) => {
        2385  +
                            scope! { @ $ name, $ contains ($($ member)*) ($($ temp)*) ($($ not_member)*) }
        2386  +
                        };
        2387  +
                        // EmptyStructOperation match not found, pop from `not_member` into `temp` stack
        2388  +
                        (@ $ name: ident, $ contains: ident (EmptyStructOperation $($ member: ident)*) ($($ temp: ident)*) ($ other: ident $($ not_member: ident)*)) => {
        2389  +
                            scope! { @ $ name, $ contains (EmptyStructOperation $($ member)*) ($ other $($ temp)*) ($($ not_member)*) }
        2390  +
                        };
        2391  +
        2392  +
                        // ErrorSerializationOperation match found, pop from both `member` and `not_member`
        2393  +
                        (@ $ name: ident, $ contains: ident (ErrorSerializationOperation $($ member: ident)*) ($($ temp: ident)*) (ErrorSerializationOperation $($ not_member: ident)*)) => {
        2394  +
                            scope! { @ $ name, $ contains ($($ member)*) ($($ temp)*) ($($ not_member)*) }
        2395  +
                        };
        2396  +
                        // ErrorSerializationOperation match not found, pop from `not_member` into `temp` stack
        2397  +
                        (@ $ name: ident, $ contains: ident (ErrorSerializationOperation $($ member: ident)*) ($($ temp: ident)*) ($ other: ident $($ not_member: ident)*)) => {
        2398  +
                            scope! { @ $ name, $ contains (ErrorSerializationOperation $($ member)*) ($ other $($ temp)*) ($($ not_member)*) }
        2399  +
                        };
        2400  +
        2401  +
                        // RecursiveUnionOperation match found, pop from both `member` and `not_member`
        2402  +
                        (@ $ name: ident, $ contains: ident (RecursiveUnionOperation $($ member: ident)*) ($($ temp: ident)*) (RecursiveUnionOperation $($ not_member: ident)*)) => {
        2403  +
                            scope! { @ $ name, $ contains ($($ member)*) ($($ temp)*) ($($ not_member)*) }
        2404  +
                        };
        2405  +
                        // RecursiveUnionOperation match not found, pop from `not_member` into `temp` stack
        2406  +
                        (@ $ name: ident, $ contains: ident (RecursiveUnionOperation $($ member: ident)*) ($($ temp: ident)*) ($ other: ident $($ not_member: ident)*)) => {
        2407  +
                            scope! { @ $ name, $ contains (RecursiveUnionOperation $($ member)*) ($ other $($ temp)*) ($($ not_member)*) }
        2408  +
                        };
        2409  +
        2410  +
                        // SimpleStructOperation match found, pop from both `member` and `not_member`
        2411  +
                        (@ $ name: ident, $ contains: ident (SimpleStructOperation $($ member: ident)*) ($($ temp: ident)*) (SimpleStructOperation $($ not_member: ident)*)) => {
        2412  +
                            scope! { @ $ name, $ contains ($($ member)*) ($($ temp)*) ($($ not_member)*) }
        2413  +
                        };
        2414  +
                        // SimpleStructOperation match not found, pop from `not_member` into `temp` stack
        2415  +
                        (@ $ name: ident, $ contains: ident (SimpleStructOperation $($ member: ident)*) ($($ temp: ident)*) ($ other: ident $($ not_member: ident)*)) => {
        2416  +
                            scope! { @ $ name, $ contains (SimpleStructOperation $($ member)*) ($ other $($ temp)*) ($($ not_member)*) }
        2417  +
                        };
        2418  +
        2419  +
                        // SingleMemberStructOperation match found, pop from both `member` and `not_member`
        2420  +
                        (@ $ name: ident, $ contains: ident (SingleMemberStructOperation $($ member: ident)*) ($($ temp: ident)*) (SingleMemberStructOperation $($ not_member: ident)*)) => {
        2421  +
                            scope! { @ $ name, $ contains ($($ member)*) ($($ temp)*) ($($ not_member)*) }
        2422  +
                        };
        2423  +
                        // SingleMemberStructOperation match not found, pop from `not_member` into `temp` stack
        2424  +
                        (@ $ name: ident, $ contains: ident (SingleMemberStructOperation $($ member: ident)*) ($($ temp: ident)*) ($ other: ident $($ not_member: ident)*)) => {
        2425  +
                            scope! { @ $ name, $ contains (SingleMemberStructOperation $($ member)*) ($ other $($ temp)*) ($($ not_member)*) }
        2426  +
                        };
        2427  +
        2428  +
                        // StreamingOperation match found, pop from both `member` and `not_member`
        2429  +
                        (@ $ name: ident, $ contains: ident (StreamingOperation $($ member: ident)*) ($($ temp: ident)*) (StreamingOperation $($ not_member: ident)*)) => {
        2430  +
                            scope! { @ $ name, $ contains ($($ member)*) ($($ temp)*) ($($ not_member)*) }
        2431  +
                        };
        2432  +
                        // StreamingOperation match not found, pop from `not_member` into `temp` stack
        2433  +
                        (@ $ name: ident, $ contains: ident (StreamingOperation $($ member: ident)*) ($($ temp: ident)*) ($ other: ident $($ not_member: ident)*)) => {
        2434  +
                            scope! { @ $ name, $ contains (StreamingOperation $($ member)*) ($ other $($ temp)*) ($($ not_member)*) }
        2435  +
                        };
        2436  +
        2437  +
                        // StreamingOperationWithInitialData match found, pop from both `member` and `not_member`
        2438  +
                        (@ $ name: ident, $ contains: ident (StreamingOperationWithInitialData $($ member: ident)*) ($($ temp: ident)*) (StreamingOperationWithInitialData $($ not_member: ident)*)) => {
        2439  +
                            scope! { @ $ name, $ contains ($($ member)*) ($($ temp)*) ($($ not_member)*) }
        2440  +
                        };
        2441  +
                        // StreamingOperationWithInitialData match not found, pop from `not_member` into `temp` stack
        2442  +
                        (@ $ name: ident, $ contains: ident (StreamingOperationWithInitialData $($ member: ident)*) ($($ temp: ident)*) ($ other: ident $($ not_member: ident)*)) => {
        2443  +
                            scope! { @ $ name, $ contains (StreamingOperationWithInitialData $($ member)*) ($ other $($ temp)*) ($($ not_member)*) }
        2444  +
                        };
        2445  +
        2446  +
                        // StreamingOperationWithInitialResponse match found, pop from both `member` and `not_member`
        2447  +
                        (@ $ name: ident, $ contains: ident (StreamingOperationWithInitialResponse $($ member: ident)*) ($($ temp: ident)*) (StreamingOperationWithInitialResponse $($ not_member: ident)*)) => {
        2448  +
                            scope! { @ $ name, $ contains ($($ member)*) ($($ temp)*) ($($ not_member)*) }
        2449  +
                        };
        2450  +
                        // StreamingOperationWithInitialResponse match not found, pop from `not_member` into `temp` stack
        2451  +
                        (@ $ name: ident, $ contains: ident (StreamingOperationWithInitialResponse $($ member: ident)*) ($($ temp: ident)*) ($ other: ident $($ not_member: ident)*)) => {
        2452  +
                            scope! { @ $ name, $ contains (StreamingOperationWithInitialResponse $($ member)*) ($ other $($ temp)*) ($($ not_member)*) }
        2453  +
                        };
        2454  +
        2455  +
                        // StreamingOperationWithOptionalData match found, pop from both `member` and `not_member`
        2456  +
                        (@ $ name: ident, $ contains: ident (StreamingOperationWithOptionalData $($ member: ident)*) ($($ temp: ident)*) (StreamingOperationWithOptionalData $($ not_member: ident)*)) => {
        2457  +
                            scope! { @ $ name, $ contains ($($ member)*) ($($ temp)*) ($($ not_member)*) }
        2458  +
                        };
        2459  +
                        // StreamingOperationWithOptionalData match not found, pop from `not_member` into `temp` stack
        2460  +
                        (@ $ name: ident, $ contains: ident (StreamingOperationWithOptionalData $($ member: ident)*) ($($ temp: ident)*) ($ other: ident $($ not_member: ident)*)) => {
        2461  +
                            scope! { @ $ name, $ contains (StreamingOperationWithOptionalData $($ member)*) ($ other $($ temp)*) ($($ not_member)*) }
        2462  +
                        };
        2463  +
        2464  +
                    (
        2465  +
                        $(#[$ attrs:meta])*
        2466  +
                        $ vis:vis struct $ name:ident {
        2467  +
                            includes: [$($ include:ident),*]
        2468  +
                        }
        2469  +
                    ) => {
        2470  +
                        use $ crate::operation_shape::*;
        2471  +
                        $ crate::server::scope! {
        2472  +
                            $(#[$ attrs])*
        2473  +
                            $ vis struct $ name {
        2474  +
                                includes: [$($ include),*],
        2475  +
                                excludes: []
        2476  +
                            }
        2477  +
                        }
        2478  +
                        scope! { @ $ name, False ($($ include)*) () (ComplexStructOperation EmptyStructOperation ErrorSerializationOperation RecursiveUnionOperation SimpleStructOperation SingleMemberStructOperation StreamingOperation StreamingOperationWithInitialData StreamingOperationWithInitialResponse StreamingOperationWithOptionalData) }
        2479  +
                    };
        2480  +
                    (
        2481  +
                        $(#[$ attrs:meta])*
        2482  +
                        $ vis:vis struct $ name:ident {
        2483  +
                            excludes: [$($ exclude:ident),*]
        2484  +
                        }
        2485  +
                    ) => {
        2486  +
                        use $ crate::operation_shape::*;
        2487  +
        2488  +
                        $ crate::server::scope! {
        2489  +
                            $(#[$ attrs])*
        2490  +
                            $ vis struct $ name {
        2491  +
                                includes: [],
        2492  +
                                excludes: [$($ exclude),*]
        2493  +
                            }
        2494  +
                        }
        2495  +
                        scope! { @ $ name, True ($($ exclude)*) () (ComplexStructOperation EmptyStructOperation ErrorSerializationOperation RecursiveUnionOperation SimpleStructOperation SingleMemberStructOperation StreamingOperation StreamingOperationWithInitialData StreamingOperationWithInitialResponse StreamingOperationWithOptionalData) }
        2496  +
                    };
        2497  +
                }