Server Test

Server Test

rev. 24b01eb5db276bb003a50c3217d5e7030eff55ff (ignoring whitespace)

Files changed:

tmp-codegen-diff/codegen-server-test/rpcv2Cbor_extras_no_initial_response/rust-server-codegen/src/protocol_serde/shape_streaming_operation_input.rs

@@ -1,1 +15,20 @@
    1      1   
// Code generated by software.amazon.smithy.rust.codegen.smithy-rs. DO NOT EDIT.
    2      2   
pub fn de_events_payload(
    3      3   
    body: &mut ::aws_smithy_types::body::SdkBody,
    4      4   
) -> std::result::Result<
    5         -
    crate::sigv4_event_stream::SigV4Receiver<
    6         -
        crate::model::Events,
           5  +
    ::aws_smithy_http::event_stream::Receiver<
           6  +
        crate::sigv4_event_stream::SignedEvent<crate::model::Events>,
           7  +
        crate::sigv4_event_stream::SignedEventError<
    7      8   
            ::aws_smithy_http::event_stream::MessageStreamError,
    8      9   
        >,
          10  +
    >,
    9     11   
    ::aws_smithy_cbor::decode::DeserializeError,
   10     12   
> {
   11     13   
    let unmarshaller = crate::event_stream_serde::EventsUnmarshaller::new();
          14  +
    let unmarshaller = crate::sigv4_event_stream::SigV4Unmarshaller::new(unmarshaller);
   12     15   
    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)
          16  +
    Ok(::aws_smithy_http::event_stream::Receiver::new(
          17  +
        unmarshaller,
          18  +
        body,
          19  +
    ))
   15     20   
}

tmp-codegen-diff/codegen-server-test/rpcv2Cbor_extras_no_initial_response/rust-server-codegen/src/protocol_serde/shape_streaming_operation_with_initial_data_input.rs

@@ -1,1 +15,20 @@
    1      1   
// Code generated by software.amazon.smithy.rust.codegen.smithy-rs. DO NOT EDIT.
    2      2   
pub fn de_events_payload(
    3      3   
    body: &mut ::aws_smithy_types::body::SdkBody,
    4      4   
) -> std::result::Result<
    5         -
    crate::sigv4_event_stream::SigV4Receiver<
    6         -
        crate::model::Events,
           5  +
    ::aws_smithy_http::event_stream::Receiver<
           6  +
        crate::sigv4_event_stream::SignedEvent<crate::model::Events>,
           7  +
        crate::sigv4_event_stream::SignedEventError<
    7      8   
            ::aws_smithy_http::event_stream::MessageStreamError,
    8      9   
        >,
          10  +
    >,
    9     11   
    ::aws_smithy_cbor::decode::DeserializeError,
   10     12   
> {
   11     13   
    let unmarshaller = crate::event_stream_serde::EventsUnmarshaller::new();
          14  +
    let unmarshaller = crate::sigv4_event_stream::SigV4Unmarshaller::new(unmarshaller);
   12     15   
    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)
          16  +
    Ok(::aws_smithy_http::event_stream::Receiver::new(
          17  +
        unmarshaller,
          18  +
        body,
          19  +
    ))
   15     20   
}

tmp-codegen-diff/codegen-server-test/rpcv2Cbor_extras_no_initial_response/rust-server-codegen/src/protocol_serde/shape_streaming_operation_with_initial_response_input.rs

@@ -1,1 +15,20 @@
    1      1   
// Code generated by software.amazon.smithy.rust.codegen.smithy-rs. DO NOT EDIT.
    2      2   
pub fn de_events_payload(
    3      3   
    body: &mut ::aws_smithy_types::body::SdkBody,
    4      4   
) -> std::result::Result<
    5         -
    crate::sigv4_event_stream::SigV4Receiver<
    6         -
        crate::model::Events,
           5  +
    ::aws_smithy_http::event_stream::Receiver<
           6  +
        crate::sigv4_event_stream::SignedEvent<crate::model::Events>,
           7  +
        crate::sigv4_event_stream::SignedEventError<
    7      8   
            ::aws_smithy_http::event_stream::MessageStreamError,
    8      9   
        >,
          10  +
    >,
    9     11   
    ::aws_smithy_cbor::decode::DeserializeError,
   10     12   
> {
   11     13   
    let unmarshaller = crate::event_stream_serde::EventsUnmarshaller::new();
          14  +
    let unmarshaller = crate::sigv4_event_stream::SigV4Unmarshaller::new(unmarshaller);
   12     15   
    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)
          16  +
    Ok(::aws_smithy_http::event_stream::Receiver::new(
          17  +
        unmarshaller,
          18  +
        body,
          19  +
    ))
   15     20   
}

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

@@ -1,1 +15,20 @@
    1      1   
// Code generated by software.amazon.smithy.rust.codegen.smithy-rs. DO NOT EDIT.
    2      2   
pub fn de_events_payload(
    3      3   
    body: &mut ::aws_smithy_types::body::SdkBody,
    4      4   
) -> std::result::Result<
    5         -
    crate::sigv4_event_stream::SigV4Receiver<
    6         -
        crate::model::Events,
           5  +
    ::aws_smithy_http::event_stream::Receiver<
           6  +
        crate::sigv4_event_stream::SignedEvent<crate::model::Events>,
           7  +
        crate::sigv4_event_stream::SignedEventError<
    7      8   
            ::aws_smithy_http::event_stream::MessageStreamError,
    8      9   
        >,
          10  +
    >,
    9     11   
    ::aws_smithy_cbor::decode::DeserializeError,
   10     12   
> {
   11     13   
    let unmarshaller = crate::event_stream_serde::EventsUnmarshaller::new();
          14  +
    let unmarshaller = crate::sigv4_event_stream::SigV4Unmarshaller::new(unmarshaller);
   12     15   
    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)
          16  +
    Ok(::aws_smithy_http::event_stream::Receiver::new(
          17  +
        unmarshaller,
          18  +
        body,
          19  +
    ))
   15     20   
}

tmp-codegen-diff/codegen-server-test/rpcv2Cbor_extras_no_initial_response/rust-server-codegen/src/sigv4_event_stream.rs

@@ -1,1 +249,155 @@
    1      1   
// Code generated by software.amazon.smithy.rust.codegen.smithy-rs. DO NOT EDIT.
    2         -
/// Receiver wrapper that handles SigV4 signed event stream messages
    3         -
#[derive(Debug)]
    4         -
pub struct SigV4Receiver<T, E> {
    5         -
    inner: ::aws_smithy_http::event_stream::Receiver<
    6         -
        crate::sigv4_event_stream::SignedEvent<T>,
    7         -
        crate::sigv4_event_stream::SignedEventError<E>,
    8         -
    >,
    9         -
    initial_signature: ::std::option::Option<crate::sigv4_event_stream::SignatureInfo>,
   10         -
}
   11         -
   12         -
impl<T, E> SigV4Receiver<T, E> {
   13         -
    pub fn new(
   14         -
        unmarshaller: impl ::aws_smithy_eventstream::frame::UnmarshallMessage<Output = T, Error = E>
   15         -
            + ::std::marker::Send
   16         -
            + ::std::marker::Sync
   17         -
            + 'static,
   18         -
        body: ::aws_smithy_types::body::SdkBody,
   19         -
    ) -> Self {
   20         -
        let sigv4_unmarshaller = crate::sigv4_event_stream::SigV4Unmarshaller::new(unmarshaller);
   21         -
        Self {
   22         -
            inner: ::aws_smithy_http::event_stream::Receiver::new(sigv4_unmarshaller, body),
   23         -
            initial_signature: ::std::option::Option::None,
   24         -
        }
   25         -
    }
   26         -
   27         -
    /// Get the signature from the initial message, if it was signed
   28         -
    pub fn initial_signature(
   29         -
        &self,
   30         -
    ) -> ::std::option::Option<&crate::sigv4_event_stream::SignatureInfo> {
   31         -
        self.initial_signature.as_ref()
   32         -
    }
   33         -
   34         -
    /// Try to receive an initial message of the given type.
   35         -
    /// Handles SigV4-wrapped messages by extracting the inner message first.
   36         -
    pub async fn try_recv_initial(
   37         -
        &mut self,
   38         -
        message_type: ::aws_smithy_http::event_stream::InitialMessageType,
   39         -
    ) -> ::std::result::Result<
   40         -
        ::std::option::Option<::aws_smithy_types::event_stream::Message>,
   41         -
        ::aws_smithy_runtime_api::client::result::SdkError<
   42         -
            crate::sigv4_event_stream::SignedEventError<E>,
   43         -
            ::aws_smithy_types::event_stream::RawMessage,
   44         -
        >,
   45         -
    >
   46         -
    where
   47         -
        E: std::error::Error + 'static,
   48         -
    {
   49         -
        let result = self
   50         -
            .inner
   51         -
            .try_recv_initial_with_preprocessor(message_type, |message| {
   52         -
                match crate::sigv4_event_stream::extract_signed_message(&message) {
   53         -
                    ::std::result::Result::Ok(MaybeSignedMessage::Signed {
   54         -
                        message: inner,
   55         -
                        signature,
   56         -
                    }) => {
   57         -
                        ::std::result::Result::Ok((inner, ::std::option::Option::Some(signature)))
   58         -
                    }
   59         -
                    ::std::result::Result::Ok(MaybeSignedMessage::Unsigned) => {
   60         -
                        ::std::result::Result::Ok((message, ::std::option::Option::None))
   61         -
                    }
   62         -
                    ::std::result::Result::Err(err) => ::std::result::Result::Err(
   63         -
                        ::aws_smithy_runtime_api::client::result::ResponseError::builder()
   64         -
                            .raw(::aws_smithy_types::event_stream::RawMessage::Decoded(
   65         -
                                message,
   66         -
                            ))
   67         -
                            .source(err)
   68         -
                            .build(),
   69         -
                    ),
   70         -
                }
   71         -
            })
   72         -
            .await?;
   73         -
        match result {
   74         -
            ::std::option::Option::Some((message, signature)) => {
   75         -
                self.initial_signature = signature;
   76         -
                ::std::result::Result::Ok(::std::option::Option::Some(message))
   77         -
            }
   78         -
            ::std::option::Option::None => ::std::result::Result::Ok(::std::option::Option::None),
   79         -
        }
   80         -
    }
   81         -
   82         -
    /// Receive the next event from the stream
   83         -
    /// The SigV4Unmarshaller handles unwrapping, so we just pass through
   84         -
    pub async fn recv(
   85         -
        &mut self,
   86         -
    ) -> ::std::result::Result<
   87         -
        ::std::option::Option<crate::sigv4_event_stream::SignedEvent<T>>,
   88         -
        ::aws_smithy_runtime_api::client::result::SdkError<
   89         -
            crate::sigv4_event_stream::SignedEventError<E>,
   90         -
            ::aws_smithy_types::event_stream::RawMessage,
   91         -
        >,
   92         -
    >
   93         -
    where
   94         -
        E: std::error::Error + 'static,
   95         -
    {
   96         -
        self.inner.recv().await
   97         -
    }
   98         -
}
   99         -
  100      2   
/// Wrapper for event stream messages that may be signed
  101         -
#[derive(Debug, Clone)]
           3  +
#[derive(Debug)]
  102      4   
pub struct SignedEvent<T> {
  103      5   
    /// The actual event message
  104      6   
    pub message: T,
  105      7   
    /// Signature information if the message was signed
  106      8   
    pub signature: ::std::option::Option<crate::sigv4_event_stream::SignatureInfo>,
  107      9   
}
  108     10   
  109     11   
/// Error wrapper for signed event stream errors
  110     12   
#[derive(Debug)]
  111     13   
pub enum SignedEventError<E> {
  112     14   
    /// Error from the underlying event stream
  113     15   
    Event(E),
  114     16   
    /// Error extracting signed message
  115     17   
    InvalidSignedEvent(crate::sigv4_event_stream::ExtractionError),
  116     18   
}
  117     19   
  118     20   
impl<E> From<E> for SignedEventError<E> {
  119     21   
    fn from(err: E) -> Self {
  120     22   
        SignedEventError::Event(err)
  121     23   
    }
  122     24   
}
  123     25   
  124     26   
/// Information extracted from a signed event stream message
  125     27   
#[non_exhaustive]
  126         -
#[derive(Debug, Clone, PartialEq)]
          28  +
#[derive(Debug, Clone)]
  127     29   
pub struct SignatureInfo {
  128     30   
    /// The chunk signature bytes from the `:chunk-signature` header
  129     31   
    pub chunk_signature: Vec<u8>,
  130     32   
    /// The timestamp from the `:date` header
  131     33   
    pub timestamp: ::std::time::SystemTime,
  132     34   
}
  133     35   
          36  +
/// Error type for signed message extraction operations
          37  +
#[non_exhaustive]
          38  +
#[derive(Debug)]
          39  +
pub enum ExtractionError {
          40  +
    /// The payload could not be decoded as a valid message
          41  +
    #[non_exhaustive]
          42  +
    InvalidPayload {
          43  +
        error: ::aws_smithy_eventstream::error::Error,
          44  +
    },
          45  +
    /// The timestamp header is missing or has an invalid format
          46  +
    #[non_exhaustive]
          47  +
    InvalidTimestamp,
          48  +
}
          49  +
  134     50   
/// Unmarshaller wrapper that handles SigV4 signed event stream messages
  135     51   
#[derive(Debug)]
  136     52   
pub struct SigV4Unmarshaller<T> {
  137     53   
    inner: T,
  138     54   
}
  139     55   
  140     56   
impl<T> SigV4Unmarshaller<T> {
  141     57   
    pub fn new(inner: T) -> Self {
  142     58   
        Self { inner }
  143     59   
    }
  144     60   
}
  145     61   
  146     62   
impl<T> ::aws_smithy_eventstream::frame::UnmarshallMessage for SigV4Unmarshaller<T>
  147     63   
where
  148     64   
    T: ::aws_smithy_eventstream::frame::UnmarshallMessage,
  149     65   
{
  150     66   
    type Output = crate::sigv4_event_stream::SignedEvent<T::Output>;
  151     67   
    type Error = crate::sigv4_event_stream::SignedEventError<T::Error>;
  152     68   
  153     69   
    fn unmarshall(
  154     70   
        &self,
  155     71   
        message: &::aws_smithy_types::event_stream::Message,
  156     72   
    ) -> ::std::result::Result<
  157     73   
        ::aws_smithy_eventstream::frame::UnmarshalledMessage<Self::Output, Self::Error>,
  158     74   
        ::aws_smithy_eventstream::error::Error,
  159     75   
    > {
  160     76   
        // First, try to extract the signed message
  161     77   
        match crate::sigv4_event_stream::extract_signed_message(message) {
  162         -
            ::std::result::Result::Ok(MaybeSignedMessage::Signed {
          78  +
            Ok(MaybeSignedMessage::Signed {
  163     79   
                message: inner_message,
  164     80   
                signature,
  165     81   
            }) => {
  166     82   
                // Process the inner message with the base unmarshaller
  167     83   
                match self.inner.unmarshall(&inner_message) {
  168         -
                    ::std::result::Result::Ok(unmarshalled) => match unmarshalled {
          84  +
                    Ok(unmarshalled) => match unmarshalled {
  169     85   
                        ::aws_smithy_eventstream::frame::UnmarshalledMessage::Event(event) => {
  170         -
                            ::std::result::Result::Ok(
  171         -
                                ::aws_smithy_eventstream::frame::UnmarshalledMessage::Event(
          86  +
                            Ok(::aws_smithy_eventstream::frame::UnmarshalledMessage::Event(
  172     87   
                                crate::sigv4_event_stream::SignedEvent {
  173     88   
                                    message: event,
  174         -
                                        signature: ::std::option::Option::Some(signature),
          89  +
                                    signature: Some(signature),
  175     90   
                                },
  176         -
                                ),
  177         -
                            )
          91  +
                            ))
  178     92   
                        }
  179     93   
                        ::aws_smithy_eventstream::frame::UnmarshalledMessage::Error(err) => {
  180         -
                            ::std::result::Result::Ok(
  181         -
                                ::aws_smithy_eventstream::frame::UnmarshalledMessage::Error(
          94  +
                            Ok(::aws_smithy_eventstream::frame::UnmarshalledMessage::Error(
  182     95   
                                crate::sigv4_event_stream::SignedEventError::Event(err),
  183         -
                                ),
  184         -
                            )
          96  +
                            ))
  185     97   
                        }
  186     98   
                    },
  187         -
                    ::std::result::Result::Err(err) => ::std::result::Result::Err(err),
          99  +
                    Err(err) => Err(err),
  188    100   
                }
  189    101   
            }
  190         -
            ::std::result::Result::Ok(MaybeSignedMessage::Unsigned) => {
         102  +
            Ok(MaybeSignedMessage::Unsigned) => {
  191    103   
                // Process unsigned message directly
  192    104   
                match self.inner.unmarshall(message) {
  193         -
                    ::std::result::Result::Ok(unmarshalled) => match unmarshalled {
         105  +
                    Ok(unmarshalled) => match unmarshalled {
  194    106   
                        ::aws_smithy_eventstream::frame::UnmarshalledMessage::Event(event) => {
  195         -
                            ::std::result::Result::Ok(
  196         -
                                ::aws_smithy_eventstream::frame::UnmarshalledMessage::Event(
         107  +
                            Ok(::aws_smithy_eventstream::frame::UnmarshalledMessage::Event(
  197    108   
                                crate::sigv4_event_stream::SignedEvent {
  198    109   
                                    message: event,
  199         -
                                        signature: ::std::option::Option::None,
         110  +
                                    signature: None,
  200    111   
                                },
  201         -
                                ),
  202         -
                            )
         112  +
                            ))
  203    113   
                        }
  204    114   
                        ::aws_smithy_eventstream::frame::UnmarshalledMessage::Error(err) => {
  205         -
                            ::std::result::Result::Ok(
  206         -
                                ::aws_smithy_eventstream::frame::UnmarshalledMessage::Error(
         115  +
                            Ok(::aws_smithy_eventstream::frame::UnmarshalledMessage::Error(
  207    116   
                                crate::sigv4_event_stream::SignedEventError::Event(err),
  208         -
                                ),
  209         -
                            )
         117  +
                            ))
  210    118   
                        }
  211    119   
                    },
  212         -
                    ::std::result::Result::Err(err) => ::std::result::Result::Err(err),
         120  +
                    Err(err) => Err(err),
  213    121   
                }
  214    122   
            }
  215         -
            ::std::result::Result::Err(extraction_err) => ::std::result::Result::Ok(
  216         -
                ::aws_smithy_eventstream::frame::UnmarshalledMessage::Error(
         123  +
            Err(extraction_err) => Ok(::aws_smithy_eventstream::frame::UnmarshalledMessage::Error(
  217    124   
                crate::sigv4_event_stream::SignedEventError::InvalidSignedEvent(extraction_err),
  218         -
                ),
  219         -
            ),
         125  +
            )),
  220    126   
        }
  221    127   
    }
  222    128   
}
  223    129   
  224    130   
/// Result of extracting a potentially signed message
  225    131   
#[derive(Debug)]
  226    132   
pub enum MaybeSignedMessage {
  227    133   
    /// Message was signed and has been extracted
  228    134   
    Signed {
  229    135   
        /// The inner message that was signed
@@ -260,166 +325,0 @@
  280    186   
        .map_err(|err| crate::sigv4_event_stream::ExtractionError::InvalidPayload { error: err })?;
  281    187   
  282    188   
    Ok(MaybeSignedMessage::Signed {
  283    189   
        message: inner_message,
  284    190   
        signature: crate::sigv4_event_stream::SignatureInfo {
  285    191   
            chunk_signature,
  286    192   
            timestamp,
  287    193   
        },
  288    194   
    })
  289    195   
}
  290         -
  291         -
/// Error type for signed message extraction operations
  292         -
#[non_exhaustive]
  293         -
#[derive(Debug)]
  294         -
pub enum ExtractionError {
  295         -
    /// The payload could not be decoded as a valid message
  296         -
    #[non_exhaustive]
  297         -
    InvalidPayload {
  298         -
        error: ::aws_smithy_eventstream::error::Error,
  299         -
    },
  300         -
    /// The timestamp header is missing or has an invalid format
  301         -
    #[non_exhaustive]
  302         -
    InvalidTimestamp,
  303         -
}
  304         -
  305         -
impl ::std::fmt::Display for ExtractionError {
  306         -
    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
  307         -
        match self {
  308         -
            ExtractionError::InvalidPayload { error } => {
  309         -
                write!(f, "invalid payload: {}", error)
  310         -
            }
  311         -
            ExtractionError::InvalidTimestamp => {
  312         -
                write!(f, "invalid or missing timestamp header")
  313         -
            }
  314         -
        }
  315         -
    }
  316         -
}
  317         -
  318         -
impl ::std::error::Error for ExtractionError {
  319         -
    fn source(&self) -> ::std::option::Option<&(dyn ::std::error::Error + 'static)> {
  320         -
        match self {
  321         -
            ExtractionError::InvalidPayload { error } => ::std::option::Option::Some(error),
  322         -
            ExtractionError::InvalidTimestamp => ::std::option::Option::None,
  323         -
        }
  324         -
    }
  325         -
}