aws_sdk_s3/
event_stream_serde.rs

1// Code generated by software.amazon.smithy.rust.codegen.smithy-rs. DO NOT EDIT.
2#[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}