aws_sdk_s3/
event_stream_serde.rs
1#[non_exhaustive]
3#[derive(Debug)]
4pub struct SelectObjectContentEventStreamUnmarshaller;
5
6impl SelectObjectContentEventStreamUnmarshaller {
7 pub fn new() -> Self {
8 SelectObjectContentEventStreamUnmarshaller
9 }
10}
11impl ::aws_smithy_eventstream::frame::UnmarshallMessage for SelectObjectContentEventStreamUnmarshaller {
12 type Output = crate::types::SelectObjectContentEventStream;
13 type Error = crate::types::error::SelectObjectContentEventStreamError;
14 fn unmarshall(
15 &self,
16 message: &::aws_smithy_types::event_stream::Message,
17 ) -> std::result::Result<::aws_smithy_eventstream::frame::UnmarshalledMessage<Self::Output, Self::Error>, ::aws_smithy_eventstream::error::Error>
18 {
19 let response_headers = ::aws_smithy_eventstream::smithy::parse_response_headers(message)?;
20 match response_headers.message_type.as_str() {
21 "event" => match response_headers.smithy_type.as_str() {
22 "Records" => {
23 let mut builder = crate::types::builders::RecordsEventBuilder::default();
24 let content_type = response_headers.content_type().unwrap_or_default();
25 if content_type != "application/octet-stream" {
26 return Err(::aws_smithy_eventstream::error::Error::unmarshalling(format!(
27 "expected :content-type to be 'application/octet-stream', but was '{}'",
28 content_type
29 )));
30 }
31 builder = builder.set_payload(Some(::aws_smithy_types::Blob::new(message.payload().as_ref())));
32 Ok(::aws_smithy_eventstream::frame::UnmarshalledMessage::Event(
33 crate::types::SelectObjectContentEventStream::Records(builder.build()),
34 ))
35 }
36 "Stats" => {
37 let mut builder = crate::types::builders::StatsEventBuilder::default();
38 builder = builder.set_details(Some(
39 crate::protocol_serde::shape_stats_event::de_details(&message.payload()[..])
40 .map_err(|err| ::aws_smithy_eventstream::error::Error::unmarshalling(format!("failed to unmarshall details: {}", err)))?,
41 ));
42 Ok(::aws_smithy_eventstream::frame::UnmarshalledMessage::Event(
43 crate::types::SelectObjectContentEventStream::Stats(builder.build()),
44 ))
45 }
46 "Progress" => {
47 let mut builder = crate::types::builders::ProgressEventBuilder::default();
48 builder = builder.set_details(Some(
49 crate::protocol_serde::shape_progress_event::de_details(&message.payload()[..])
50 .map_err(|err| ::aws_smithy_eventstream::error::Error::unmarshalling(format!("failed to unmarshall details: {}", err)))?,
51 ));
52 Ok(::aws_smithy_eventstream::frame::UnmarshalledMessage::Event(
53 crate::types::SelectObjectContentEventStream::Progress(builder.build()),
54 ))
55 }
56 "Cont" => Ok(::aws_smithy_eventstream::frame::UnmarshalledMessage::Event(
57 crate::types::SelectObjectContentEventStream::Cont(crate::types::ContinuationEvent::builder().build()),
58 )),
59 "End" => Ok(::aws_smithy_eventstream::frame::UnmarshalledMessage::Event(
60 crate::types::SelectObjectContentEventStream::End(crate::types::EndEvent::builder().build()),
61 )),
62 _unknown_variant => Ok(::aws_smithy_eventstream::frame::UnmarshalledMessage::Event(
63 crate::types::SelectObjectContentEventStream::Unknown,
64 )),
65 },
66 "exception" => {
67 let generic = match crate::protocol_serde::parse_event_stream_error_metadata(message.payload()) {
68 Ok(builder) => builder.build(),
69 Err(err) => {
70 return Ok(::aws_smithy_eventstream::frame::UnmarshalledMessage::Error(
71 crate::types::error::SelectObjectContentEventStreamError::unhandled(err),
72 ))
73 }
74 };
75 Ok(::aws_smithy_eventstream::frame::UnmarshalledMessage::Error(
76 crate::types::error::SelectObjectContentEventStreamError::generic(generic),
77 ))
78 }
79 value => {
80 return Err(::aws_smithy_eventstream::error::Error::unmarshalling(format!(
81 "unrecognized :message-type: {}",
82 value
83 )));
84 }
85 }
86 }
87}