ossify/ops/bucket/access_monitor/
put_bucket_access_monitor.rs1use std::future::Future;
6
7use http::Method;
8use serde::{Deserialize, Serialize};
9
10use crate::body::XMLBody;
11use crate::error::Result;
12use crate::response::EmptyResponseProcessor;
13use crate::ser::OnlyKeyField;
14use crate::{Client, Ops, Prepared, Request};
15
16#[derive(Debug, Clone, Default, Serialize)]
17pub struct PutBucketAccessMonitorParams {
18 accessmonitor: OnlyKeyField,
19}
20
21#[derive(Copy, Clone, Debug, PartialEq, Eq, Default, Serialize, Deserialize)]
23pub enum AccessMonitorStatus {
24 #[default]
25 Enabled,
26 Disabled,
27}
28
29impl AccessMonitorStatus {
30 pub fn as_str(&self) -> &'static str {
31 match self {
32 AccessMonitorStatus::Enabled => "Enabled",
33 AccessMonitorStatus::Disabled => "Disabled",
34 }
35 }
36}
37
38impl AsRef<str> for AccessMonitorStatus {
39 fn as_ref(&self) -> &str {
40 self.as_str()
41 }
42}
43
44#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]
46#[serde(rename = "AccessMonitorConfiguration", rename_all = "PascalCase")]
47pub struct AccessMonitorConfiguration {
48 pub status: AccessMonitorStatus,
49}
50
51pub struct PutBucketAccessMonitor {
52 pub status: AccessMonitorStatus,
53}
54
55impl Ops for PutBucketAccessMonitor {
56 type Response = EmptyResponseProcessor;
57 type Body = XMLBody<AccessMonitorConfiguration>;
58 type Query = PutBucketAccessMonitorParams;
59
60 fn prepare(self) -> Result<Prepared<PutBucketAccessMonitorParams, AccessMonitorConfiguration>> {
61 Ok(Prepared {
62 method: Method::PUT,
63 query: Some(PutBucketAccessMonitorParams::default()),
64 body: Some(AccessMonitorConfiguration { status: self.status }),
65 ..Default::default()
66 })
67 }
68}
69
70pub trait PutBucketAccessMonitorOps {
71 fn put_bucket_access_monitor(&self, status: AccessMonitorStatus) -> impl Future<Output = Result<()>>;
75}
76
77impl PutBucketAccessMonitorOps for Client {
78 async fn put_bucket_access_monitor(&self, status: AccessMonitorStatus) -> Result<()> {
79 self.request(PutBucketAccessMonitor { status }).await
80 }
81}
82
83#[cfg(test)]
84mod tests {
85 use super::*;
86
87 #[test]
88 fn params_serialize() {
89 assert_eq!(
90 crate::ser::to_string(&PutBucketAccessMonitorParams::default()).unwrap(),
91 "accessmonitor"
92 );
93 }
94
95 #[test]
96 fn body_round_trip() {
97 let cfg = AccessMonitorConfiguration {
98 status: AccessMonitorStatus::Enabled,
99 };
100 let xml = quick_xml::se::to_string(&cfg).unwrap();
101 assert!(xml.contains("<Status>Enabled</Status>"));
102 let back: AccessMonitorConfiguration = quick_xml::de::from_str(&xml).unwrap();
103 assert_eq!(back, cfg);
104 }
105}