aws_sdk_mediapackagev2/operation/
put_channel_policy.rs

1// Code generated by software.amazon.smithy.rust.codegen.smithy-rs. DO NOT EDIT.
2/// Orchestration and serialization glue logic for `PutChannelPolicy`.
3#[derive(::std::clone::Clone, ::std::default::Default, ::std::fmt::Debug)]
4#[non_exhaustive]
5pub struct PutChannelPolicy;
6impl PutChannelPolicy {
7    /// Creates a new `PutChannelPolicy`
8    pub fn new() -> Self {
9        Self
10    }
11    pub(crate) async fn orchestrate(
12        runtime_plugins: &::aws_smithy_runtime_api::client::runtime_plugin::RuntimePlugins,
13        input: crate::operation::put_channel_policy::PutChannelPolicyInput,
14    ) -> ::std::result::Result<
15        crate::operation::put_channel_policy::PutChannelPolicyOutput,
16        ::aws_smithy_runtime_api::client::result::SdkError<
17            crate::operation::put_channel_policy::PutChannelPolicyError,
18            ::aws_smithy_runtime_api::client::orchestrator::HttpResponse,
19        >,
20    > {
21        let map_err = |err: ::aws_smithy_runtime_api::client::result::SdkError<
22            ::aws_smithy_runtime_api::client::interceptors::context::Error,
23            ::aws_smithy_runtime_api::client::orchestrator::HttpResponse,
24        >| {
25            err.map_service_error(|err| {
26                err.downcast::<crate::operation::put_channel_policy::PutChannelPolicyError>()
27                    .expect("correct error type")
28            })
29        };
30        let context = Self::orchestrate_with_stop_point(runtime_plugins, input, ::aws_smithy_runtime::client::orchestrator::StopPoint::None)
31            .await
32            .map_err(map_err)?;
33        let output = context.finalize().map_err(map_err)?;
34        ::std::result::Result::Ok(
35            output
36                .downcast::<crate::operation::put_channel_policy::PutChannelPolicyOutput>()
37                .expect("correct output type"),
38        )
39    }
40
41    pub(crate) async fn orchestrate_with_stop_point(
42        runtime_plugins: &::aws_smithy_runtime_api::client::runtime_plugin::RuntimePlugins,
43        input: crate::operation::put_channel_policy::PutChannelPolicyInput,
44        stop_point: ::aws_smithy_runtime::client::orchestrator::StopPoint,
45    ) -> ::std::result::Result<
46        ::aws_smithy_runtime_api::client::interceptors::context::InterceptorContext,
47        ::aws_smithy_runtime_api::client::result::SdkError<
48            ::aws_smithy_runtime_api::client::interceptors::context::Error,
49            ::aws_smithy_runtime_api::client::orchestrator::HttpResponse,
50        >,
51    > {
52        let input = ::aws_smithy_runtime_api::client::interceptors::context::Input::erase(input);
53        use ::tracing::Instrument;
54        ::aws_smithy_runtime::client::orchestrator::invoke_with_stop_point("MediaPackageV2", "PutChannelPolicy", input, runtime_plugins, stop_point)
55            // Create a parent span for the entire operation. Includes a random, internal-only,
56            // seven-digit ID for the operation orchestration so that it can be correlated in the logs.
57            .instrument(::tracing::debug_span!(
58                "MediaPackageV2.PutChannelPolicy",
59                "rpc.service" = "MediaPackageV2",
60                "rpc.method" = "PutChannelPolicy",
61                "sdk_invocation_id" = ::fastrand::u32(1_000_000..10_000_000),
62                "rpc.system" = "aws-api",
63            ))
64            .await
65    }
66
67    pub(crate) fn operation_runtime_plugins(
68        client_runtime_plugins: ::aws_smithy_runtime_api::client::runtime_plugin::RuntimePlugins,
69        client_config: &crate::config::Config,
70        config_override: ::std::option::Option<crate::config::Builder>,
71    ) -> ::aws_smithy_runtime_api::client::runtime_plugin::RuntimePlugins {
72        let mut runtime_plugins = client_runtime_plugins.with_operation_plugin(Self::new());
73
74        if let ::std::option::Option::Some(config_override) = config_override {
75            for plugin in config_override.runtime_plugins.iter().cloned() {
76                runtime_plugins = runtime_plugins.with_operation_plugin(plugin);
77            }
78            runtime_plugins = runtime_plugins.with_operation_plugin(crate::config::ConfigOverrideRuntimePlugin::new(
79                config_override,
80                client_config.config.clone(),
81                &client_config.runtime_components,
82            ));
83        }
84        runtime_plugins
85    }
86}
87impl ::aws_smithy_runtime_api::client::runtime_plugin::RuntimePlugin for PutChannelPolicy {
88    fn config(&self) -> ::std::option::Option<::aws_smithy_types::config_bag::FrozenLayer> {
89        let mut cfg = ::aws_smithy_types::config_bag::Layer::new("PutChannelPolicy");
90
91        cfg.store_put(::aws_smithy_runtime_api::client::ser_de::SharedRequestSerializer::new(
92            PutChannelPolicyRequestSerializer,
93        ));
94        cfg.store_put(::aws_smithy_runtime_api::client::ser_de::SharedResponseDeserializer::new(
95            PutChannelPolicyResponseDeserializer,
96        ));
97
98        cfg.store_put(::aws_smithy_runtime_api::client::auth::AuthSchemeOptionResolverParams::new(
99            crate::config::auth::Params::builder()
100                .operation_name("PutChannelPolicy")
101                .build()
102                .expect("required fields set"),
103        ));
104
105        cfg.store_put(::aws_smithy_runtime_api::client::orchestrator::Metadata::new(
106            "PutChannelPolicy",
107            "MediaPackageV2",
108        ));
109        let mut signing_options = ::aws_runtime::auth::SigningOptions::default();
110        signing_options.double_uri_encode = true;
111        signing_options.content_sha256_header = false;
112        signing_options.normalize_uri_path = true;
113        signing_options.payload_override = None;
114
115        cfg.store_put(::aws_runtime::auth::SigV4OperationSigningConfig {
116            signing_options,
117            ..::std::default::Default::default()
118        });
119
120        ::std::option::Option::Some(cfg.freeze())
121    }
122
123    fn runtime_components(
124        &self,
125        _: &::aws_smithy_runtime_api::client::runtime_components::RuntimeComponentsBuilder,
126    ) -> ::std::borrow::Cow<'_, ::aws_smithy_runtime_api::client::runtime_components::RuntimeComponentsBuilder> {
127        #[allow(unused_mut)]
128        let mut rcb = ::aws_smithy_runtime_api::client::runtime_components::RuntimeComponentsBuilder::new("PutChannelPolicy")
129            .with_interceptor(::aws_smithy_runtime::client::stalled_stream_protection::StalledStreamProtectionInterceptor::default())
130            .with_interceptor(PutChannelPolicyEndpointParamsInterceptor)
131            .with_retry_classifier(::aws_smithy_runtime::client::retries::classifiers::TransientErrorClassifier::<
132                crate::operation::put_channel_policy::PutChannelPolicyError,
133            >::new())
134            .with_retry_classifier(::aws_smithy_runtime::client::retries::classifiers::ModeledAsRetryableClassifier::<
135                crate::operation::put_channel_policy::PutChannelPolicyError,
136            >::new())
137            .with_retry_classifier(::aws_runtime::retries::classifiers::AwsErrorCodeClassifier::<
138                crate::operation::put_channel_policy::PutChannelPolicyError,
139            >::new());
140
141        ::std::borrow::Cow::Owned(rcb)
142    }
143}
144
145#[derive(Debug)]
146struct PutChannelPolicyResponseDeserializer;
147impl ::aws_smithy_runtime_api::client::ser_de::DeserializeResponse for PutChannelPolicyResponseDeserializer {
148    fn deserialize_nonstreaming(
149        &self,
150        response: &::aws_smithy_runtime_api::client::orchestrator::HttpResponse,
151    ) -> ::aws_smithy_runtime_api::client::interceptors::context::OutputOrError {
152        let (success, status) = (response.status().is_success(), response.status().as_u16());
153        let headers = response.headers();
154        let body = response.body().bytes().expect("body loaded");
155        #[allow(unused_mut)]
156        let mut force_error = false;
157        ::tracing::debug!(request_id = ?::aws_types::request_id::RequestId::request_id(response));
158        let parse_result = if !success && status != 200 || force_error {
159            crate::protocol_serde::shape_put_channel_policy::de_put_channel_policy_http_error(status, headers, body)
160        } else {
161            crate::protocol_serde::shape_put_channel_policy::de_put_channel_policy_http_response(status, headers, body)
162        };
163        crate::protocol_serde::type_erase_result(parse_result)
164    }
165}
166#[derive(Debug)]
167struct PutChannelPolicyRequestSerializer;
168impl ::aws_smithy_runtime_api::client::ser_de::SerializeRequest for PutChannelPolicyRequestSerializer {
169    #[allow(unused_mut, clippy::let_and_return, clippy::needless_borrow, clippy::useless_conversion)]
170    fn serialize_input(
171        &self,
172        input: ::aws_smithy_runtime_api::client::interceptors::context::Input,
173        _cfg: &mut ::aws_smithy_types::config_bag::ConfigBag,
174    ) -> ::std::result::Result<::aws_smithy_runtime_api::client::orchestrator::HttpRequest, ::aws_smithy_runtime_api::box_error::BoxError> {
175        let input = input
176            .downcast::<crate::operation::put_channel_policy::PutChannelPolicyInput>()
177            .expect("correct type");
178        let _header_serialization_settings = _cfg
179            .load::<crate::serialization_settings::HeaderSerializationSettings>()
180            .cloned()
181            .unwrap_or_default();
182        let mut request_builder = {
183            fn uri_base(
184                _input: &crate::operation::put_channel_policy::PutChannelPolicyInput,
185                output: &mut ::std::string::String,
186            ) -> ::std::result::Result<(), ::aws_smithy_types::error::operation::BuildError> {
187                use ::std::fmt::Write as _;
188                let input_1 = &_input.channel_group_name;
189                let input_1 = input_1.as_ref().ok_or_else(|| {
190                    ::aws_smithy_types::error::operation::BuildError::missing_field("channel_group_name", "cannot be empty or unset")
191                })?;
192                let channel_group_name = ::aws_smithy_http::label::fmt_string(input_1, ::aws_smithy_http::label::EncodingStrategy::Default);
193                if channel_group_name.is_empty() {
194                    return ::std::result::Result::Err(::aws_smithy_types::error::operation::BuildError::missing_field(
195                        "channel_group_name",
196                        "cannot be empty or unset",
197                    ));
198                }
199                let input_2 = &_input.channel_name;
200                let input_2 = input_2
201                    .as_ref()
202                    .ok_or_else(|| ::aws_smithy_types::error::operation::BuildError::missing_field("channel_name", "cannot be empty or unset"))?;
203                let channel_name = ::aws_smithy_http::label::fmt_string(input_2, ::aws_smithy_http::label::EncodingStrategy::Default);
204                if channel_name.is_empty() {
205                    return ::std::result::Result::Err(::aws_smithy_types::error::operation::BuildError::missing_field(
206                        "channel_name",
207                        "cannot be empty or unset",
208                    ));
209                }
210                ::std::write!(
211                    output,
212                    "/channelGroup/{ChannelGroupName}/channel/{ChannelName}/policy",
213                    ChannelGroupName = channel_group_name,
214                    ChannelName = channel_name
215                )
216                .expect("formatting should succeed");
217                ::std::result::Result::Ok(())
218            }
219            #[allow(clippy::unnecessary_wraps)]
220            fn update_http_builder(
221                input: &crate::operation::put_channel_policy::PutChannelPolicyInput,
222                builder: ::http::request::Builder,
223            ) -> ::std::result::Result<::http::request::Builder, ::aws_smithy_types::error::operation::BuildError> {
224                let mut uri = ::std::string::String::new();
225                uri_base(input, &mut uri)?;
226                ::std::result::Result::Ok(builder.method("PUT").uri(uri))
227            }
228            let mut builder = update_http_builder(&input, ::http::request::Builder::new())?;
229            builder = _header_serialization_settings.set_default_header(builder, ::http::header::CONTENT_TYPE, "application/json");
230            builder
231        };
232        let body = ::aws_smithy_types::body::SdkBody::from(crate::protocol_serde::shape_put_channel_policy::ser_put_channel_policy_input(&input)?);
233        if let Some(content_length) = body.content_length() {
234            let content_length = content_length.to_string();
235            request_builder = _header_serialization_settings.set_default_header(request_builder, ::http::header::CONTENT_LENGTH, &content_length);
236        }
237        ::std::result::Result::Ok(request_builder.body(body).expect("valid request").try_into().unwrap())
238    }
239}
240#[derive(Debug)]
241struct PutChannelPolicyEndpointParamsInterceptor;
242
243impl ::aws_smithy_runtime_api::client::interceptors::Intercept for PutChannelPolicyEndpointParamsInterceptor {
244    fn name(&self) -> &'static str {
245        "PutChannelPolicyEndpointParamsInterceptor"
246    }
247
248    fn read_before_execution(
249        &self,
250        context: &::aws_smithy_runtime_api::client::interceptors::context::BeforeSerializationInterceptorContextRef<
251            '_,
252            ::aws_smithy_runtime_api::client::interceptors::context::Input,
253            ::aws_smithy_runtime_api::client::interceptors::context::Output,
254            ::aws_smithy_runtime_api::client::interceptors::context::Error,
255        >,
256        cfg: &mut ::aws_smithy_types::config_bag::ConfigBag,
257    ) -> ::std::result::Result<(), ::aws_smithy_runtime_api::box_error::BoxError> {
258        let _input = context
259            .input()
260            .downcast_ref::<PutChannelPolicyInput>()
261            .ok_or("failed to downcast to PutChannelPolicyInput")?;
262
263        let params = crate::config::endpoint::Params::builder()
264            .set_region(cfg.load::<::aws_types::region::Region>().map(|r| r.as_ref().to_owned()))
265            .set_use_dual_stack(cfg.load::<::aws_types::endpoint_config::UseDualStack>().map(|ty| ty.0))
266            .set_use_fips(cfg.load::<::aws_types::endpoint_config::UseFips>().map(|ty| ty.0))
267            .set_endpoint(cfg.load::<::aws_types::endpoint_config::EndpointUrl>().map(|ty| ty.0.clone()))
268            .build()
269            .map_err(|err| {
270                ::aws_smithy_runtime_api::client::interceptors::error::ContextAttachedError::new("endpoint params could not be built", err)
271            })?;
272        cfg.interceptor_state()
273            .store_put(::aws_smithy_runtime_api::client::endpoint::EndpointResolverParams::new(params));
274        ::std::result::Result::Ok(())
275    }
276}
277
278// The get_* functions below are generated from JMESPath expressions in the
279// operationContextParams trait. They target the operation's input shape.
280
281/// Error type for the `PutChannelPolicyError` operation.
282#[non_exhaustive]
283#[derive(::std::fmt::Debug)]
284pub enum PutChannelPolicyError {
285    /// <p>Access is denied because either you don't have permissions to perform the requested operation or MediaPackage is getting throttling errors with CDN authorization. The user or role that is making the request must have at least one IAM permissions policy attached that grants the required permissions. For more information, see Access Management in the IAM User Guide. Or, if you're using CDN authorization, you will receive this exception if MediaPackage receives a throttling error from Secrets Manager.</p>
286    AccessDeniedException(crate::types::error::AccessDeniedException),
287    /// <p>Updating or deleting this resource can cause an inconsistent state.</p>
288    ConflictException(crate::types::error::ConflictException),
289    /// <p>Indicates that an error from the service occurred while trying to process a request.</p>
290    InternalServerException(crate::types::error::InternalServerException),
291    /// <p>The specified resource doesn't exist.</p>
292    ResourceNotFoundException(crate::types::error::ResourceNotFoundException),
293    /// <p>The request throughput limit was exceeded.</p>
294    ThrottlingException(crate::types::error::ThrottlingException),
295    /// <p>The input failed to meet the constraints specified by the AWS service.</p>
296    ValidationException(crate::types::error::ValidationException),
297    /// An unexpected error occurred (e.g., invalid JSON returned by the service or an unknown error code).
298    #[deprecated(note = "Matching `Unhandled` directly is not forwards compatible. Instead, match using a \
299    variable wildcard pattern and check `.code()`:
300     \
301    &nbsp;&nbsp;&nbsp;`err if err.code() == Some(\"SpecificExceptionCode\") => { /* handle the error */ }`
302     \
303    See [`ProvideErrorMetadata`](#impl-ProvideErrorMetadata-for-PutChannelPolicyError) for what information is available for the error.")]
304    Unhandled(crate::error::sealed_unhandled::Unhandled),
305}
306impl PutChannelPolicyError {
307    /// Creates the `PutChannelPolicyError::Unhandled` variant from any error type.
308    pub fn unhandled(
309        err: impl ::std::convert::Into<::std::boxed::Box<dyn ::std::error::Error + ::std::marker::Send + ::std::marker::Sync + 'static>>,
310    ) -> Self {
311        Self::Unhandled(crate::error::sealed_unhandled::Unhandled {
312            source: err.into(),
313            meta: ::std::default::Default::default(),
314        })
315    }
316
317    /// Creates the `PutChannelPolicyError::Unhandled` variant from an [`ErrorMetadata`](::aws_smithy_types::error::ErrorMetadata).
318    pub fn generic(err: ::aws_smithy_types::error::ErrorMetadata) -> Self {
319        Self::Unhandled(crate::error::sealed_unhandled::Unhandled {
320            source: err.clone().into(),
321            meta: err,
322        })
323    }
324    ///
325    /// Returns error metadata, which includes the error code, message,
326    /// request ID, and potentially additional information.
327    ///
328    pub fn meta(&self) -> &::aws_smithy_types::error::ErrorMetadata {
329        match self {
330            Self::AccessDeniedException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
331            Self::ConflictException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
332            Self::InternalServerException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
333            Self::ResourceNotFoundException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
334            Self::ThrottlingException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
335            Self::ValidationException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
336            Self::Unhandled(e) => &e.meta,
337        }
338    }
339    /// Returns `true` if the error kind is `PutChannelPolicyError::AccessDeniedException`.
340    pub fn is_access_denied_exception(&self) -> bool {
341        matches!(self, Self::AccessDeniedException(_))
342    }
343    /// Returns `true` if the error kind is `PutChannelPolicyError::ConflictException`.
344    pub fn is_conflict_exception(&self) -> bool {
345        matches!(self, Self::ConflictException(_))
346    }
347    /// Returns `true` if the error kind is `PutChannelPolicyError::InternalServerException`.
348    pub fn is_internal_server_exception(&self) -> bool {
349        matches!(self, Self::InternalServerException(_))
350    }
351    /// Returns `true` if the error kind is `PutChannelPolicyError::ResourceNotFoundException`.
352    pub fn is_resource_not_found_exception(&self) -> bool {
353        matches!(self, Self::ResourceNotFoundException(_))
354    }
355    /// Returns `true` if the error kind is `PutChannelPolicyError::ThrottlingException`.
356    pub fn is_throttling_exception(&self) -> bool {
357        matches!(self, Self::ThrottlingException(_))
358    }
359    /// Returns `true` if the error kind is `PutChannelPolicyError::ValidationException`.
360    pub fn is_validation_exception(&self) -> bool {
361        matches!(self, Self::ValidationException(_))
362    }
363}
364impl ::std::error::Error for PutChannelPolicyError {
365    fn source(&self) -> ::std::option::Option<&(dyn ::std::error::Error + 'static)> {
366        match self {
367            Self::AccessDeniedException(_inner) => ::std::option::Option::Some(_inner),
368            Self::ConflictException(_inner) => ::std::option::Option::Some(_inner),
369            Self::InternalServerException(_inner) => ::std::option::Option::Some(_inner),
370            Self::ResourceNotFoundException(_inner) => ::std::option::Option::Some(_inner),
371            Self::ThrottlingException(_inner) => ::std::option::Option::Some(_inner),
372            Self::ValidationException(_inner) => ::std::option::Option::Some(_inner),
373            Self::Unhandled(_inner) => ::std::option::Option::Some(&*_inner.source),
374        }
375    }
376}
377impl ::std::fmt::Display for PutChannelPolicyError {
378    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
379        match self {
380            Self::AccessDeniedException(_inner) => _inner.fmt(f),
381            Self::ConflictException(_inner) => _inner.fmt(f),
382            Self::InternalServerException(_inner) => _inner.fmt(f),
383            Self::ResourceNotFoundException(_inner) => _inner.fmt(f),
384            Self::ThrottlingException(_inner) => _inner.fmt(f),
385            Self::ValidationException(_inner) => _inner.fmt(f),
386            Self::Unhandled(_inner) => {
387                if let ::std::option::Option::Some(code) = ::aws_smithy_types::error::metadata::ProvideErrorMetadata::code(self) {
388                    write!(f, "unhandled error ({code})")
389                } else {
390                    f.write_str("unhandled error")
391                }
392            }
393        }
394    }
395}
396impl ::aws_smithy_types::retry::ProvideErrorKind for PutChannelPolicyError {
397    fn code(&self) -> ::std::option::Option<&str> {
398        ::aws_smithy_types::error::metadata::ProvideErrorMetadata::code(self)
399    }
400    fn retryable_error_kind(&self) -> ::std::option::Option<::aws_smithy_types::retry::ErrorKind> {
401        ::std::option::Option::None
402    }
403}
404impl ::aws_smithy_types::error::metadata::ProvideErrorMetadata for PutChannelPolicyError {
405    fn meta(&self) -> &::aws_smithy_types::error::ErrorMetadata {
406        match self {
407            Self::AccessDeniedException(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
408            Self::ConflictException(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
409            Self::InternalServerException(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
410            Self::ResourceNotFoundException(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
411            Self::ThrottlingException(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
412            Self::ValidationException(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
413            Self::Unhandled(_inner) => &_inner.meta,
414        }
415    }
416}
417impl ::aws_smithy_runtime_api::client::result::CreateUnhandledError for PutChannelPolicyError {
418    fn create_unhandled_error(
419        source: ::std::boxed::Box<dyn ::std::error::Error + ::std::marker::Send + ::std::marker::Sync + 'static>,
420        meta: ::std::option::Option<::aws_smithy_types::error::ErrorMetadata>,
421    ) -> Self {
422        Self::Unhandled(crate::error::sealed_unhandled::Unhandled {
423            source,
424            meta: meta.unwrap_or_default(),
425        })
426    }
427}
428impl ::aws_types::request_id::RequestId for crate::operation::put_channel_policy::PutChannelPolicyError {
429    fn request_id(&self) -> Option<&str> {
430        self.meta().request_id()
431    }
432}
433
434pub use crate::operation::put_channel_policy::_put_channel_policy_output::PutChannelPolicyOutput;
435
436pub use crate::operation::put_channel_policy::_put_channel_policy_input::PutChannelPolicyInput;
437
438mod _put_channel_policy_input;
439
440mod _put_channel_policy_output;
441
442/// Builders
443pub mod builders;