@@ -5,14 +5,13 @@ use helpers::endpoint::get_endpoint;
5
5
use helpers:: logs:: log_operation_result;
6
6
use helpers:: random_queue_name:: get_random_queue_name;
7
7
8
- use azure_core:: http:: RequestContent ;
9
8
use azure_identity:: DefaultAzureCredential ;
10
9
use azure_storage_queue:: {
11
10
clients:: QueueClient ,
12
11
models:: {
13
- QueueMessage , QueueMessageIdOperationGroupClientUpdateOptions ,
14
- QueueMessagesOperationGroupClientDequeueOptions ,
15
- QueueMessagesOperationGroupClientPeekOptions ,
12
+ ListOfSignedIdentifier , QueueClientDequeueOptions , QueueClientGetMetadataResultHeaders ,
13
+ QueueClientPeekOptions , QueueClientSetMetadataOptions , QueueClientUpdateOptions ,
14
+ QueueMessage ,
16
15
} ,
17
16
} ;
18
17
@@ -59,12 +58,12 @@ async fn send_and_update_message(
59
58
"Updating message with ID: {} and pop receipt: {}" ,
60
59
message_id, pop_receipt
61
60
) ;
62
- let message_xml_string = quick_xml :: se :: to_string ( & QueueMessage {
61
+ let queue_message = QueueMessage {
63
62
message_text : Some ( "Updated message text from Rust" . to_string ( ) ) ,
64
- } ) ;
65
- let update_option = QueueMessageIdOperationGroupClientUpdateOptions {
63
+ } ;
64
+ let update_option = QueueClientUpdateOptions {
66
65
// Serialize the message text as bytes for the update
67
- queue_message : Some ( RequestContent :: from ( message_xml_string? . into_bytes ( ) ) ) ,
66
+ queue_message : Some ( queue_message . try_into ( ) ? ) ,
68
67
..Default :: default ( )
69
68
} ;
70
69
let update_result = queue_client
@@ -78,20 +77,86 @@ async fn send_and_update_message(
78
77
Ok ( ( ) )
79
78
}
80
79
81
- async fn get_and_set_access_policies (
80
+ async fn set_and_get_access_policies (
82
81
queue_client : & QueueClient ,
83
82
) -> Result < ( ) , Box < dyn std:: error:: Error > > {
83
+ // .checked_add(std::time::Duration::from_secs(3600)) // 1 hour from now
84
+ // .ok_or("Failed to calculate expiry time")?;
85
+ // let acl = ListOfSignedIdentifier {
86
+ // items: Some(vec![SignedIdentifier {
87
+ // id: Some("policy1".to_string()),
88
+ // access_policy: Some(AccessPolicy {
89
+ // start: Some(OffsetDateTime::now_utc()),
90
+ // expiry: Some(expiry_time.into()),
91
+ // permission: Some("raup".to_string()),
92
+ // }),
93
+ // }]),
94
+ // };
95
+
96
+ // let acl_xml = quick_xml::se::to_string(&acl);
97
+ // println!("Access Policy XML: {}", acl_xml?);
98
+
99
+ // let acl_xml = "<SignedIdentifiers>
100
+ // <SignedIdentifier>
101
+ // <AccessPolicy>
102
+ // <Expiry>2025-06-27T15:02:39.351158345Z</Expiry>
103
+ // <Permission>raup</Permission>
104
+ // <Start>2025-06-26T14:02:39.351160525Z</Start>
105
+ // </AccessPolicy>
106
+ // <Id>MTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTI=</Id>
107
+ // </SignedIdentifier>
108
+ // </SignedIdentifiers>";
109
+
110
+ // let result = queue_client
111
+ // .set_access_policy(acl_xml.try_into()?, None)
112
+ // .await;
113
+ // TODO: Fix set and get access policies
114
+ let acl = ListOfSignedIdentifier {
115
+ ..Default :: default ( )
116
+ } ;
117
+ let result = queue_client. set_access_policy ( acl. try_into ( ) ?, None ) . await ;
118
+ log_operation_result ( & result, "set_access_policy" ) ;
119
+
84
120
let result = queue_client. get_access_policy ( None ) . await ;
85
121
log_operation_result ( & result, "get_access_policy" ) ;
86
-
87
122
let properties = result. unwrap ( ) . into_body ( ) . await ?;
88
- let properties_xml = quick_xml:: se:: to_string ( & properties) ?;
89
- let properties_bytes = properties_xml. into_bytes ( ) ;
123
+ if let Some ( policies) = properties. items {
124
+ for policy in policies {
125
+ println ! (
126
+ "Access Policy - Id: {}, Start: {:?}, Expiry: {:?}, Permissions: {}" ,
127
+ & policy. id. unwrap_or_default( ) ,
128
+ policy. access_policy. clone( ) . unwrap( ) . start. unwrap( ) ,
129
+ policy. access_policy. clone( ) . unwrap( ) . expiry. unwrap( ) ,
130
+ policy. access_policy. clone( ) . unwrap( ) . permission. unwrap( )
131
+ ) ;
132
+ }
133
+ } else {
134
+ println ! ( "No access policies found." ) ;
135
+ }
90
136
91
- let result = queue_client
92
- . set_access_policy ( RequestContent :: from ( properties_bytes) , None )
93
- . await ;
94
- log_operation_result ( & result, "set_access_policy" ) ;
137
+ Ok ( ( ) )
138
+ }
139
+
140
+ async fn set_and_get_metadata (
141
+ queue_client : & QueueClient ,
142
+ ) -> Result < ( ) , Box < dyn std:: error:: Error > > {
143
+ let metadata_options = Some ( QueueClientSetMetadataOptions {
144
+ metadata : Some ( HashMap :: from ( [
145
+ ( "key1" . to_string ( ) , "value1" . to_string ( ) ) ,
146
+ ( "key2" . to_string ( ) , "value2" . to_string ( ) ) ,
147
+ ] ) ) ,
148
+ ..Default :: default ( )
149
+ } ) ;
150
+ let result = queue_client. set_metadata ( metadata_options) . await ;
151
+ log_operation_result ( & result, "set_metadata" ) ;
152
+
153
+ let result = queue_client. get_metadata ( None ) . await ;
154
+ log_operation_result ( & result, "get_metadata" ) ;
155
+
156
+ let metadata = result. unwrap ( ) . metadata ( ) . unwrap_or_default ( ) ;
157
+ for ( key, value) in metadata {
158
+ println ! ( "Metadata - {}: {}" , key, value) ;
159
+ }
95
160
96
161
Ok ( ( ) )
97
162
}
@@ -106,7 +171,7 @@ async fn peek_and_receive_messages(
106
171
. enqueue_message ( "Message 2 from Rust Queue SDK" , None )
107
172
. await ;
108
173
109
- let options = QueueMessagesOperationGroupClientPeekOptions {
174
+ let options = QueueClientPeekOptions {
110
175
number_of_messages : Some ( 5 ) ,
111
176
..Default :: default ( )
112
177
} ;
@@ -127,7 +192,7 @@ async fn peek_and_receive_messages(
127
192
}
128
193
}
129
194
130
- let options = QueueMessagesOperationGroupClientDequeueOptions {
195
+ let options = QueueClientDequeueOptions {
131
196
number_of_messages : Some ( 5 ) ,
132
197
..Default :: default ( )
133
198
} ;
@@ -161,10 +226,6 @@ async fn main() -> Result<(), Box<dyn std::error::Error>> {
161
226
let queue_name = get_random_queue_name ( ) ;
162
227
let queue_client = QueueClient :: new ( & endpoint, & queue_name, credential. clone ( ) , None ) ?;
163
228
164
- // Get queue service properties
165
- let result = queue_client. get_properties ( None ) . await ;
166
- log_operation_result ( & result, "get_properties" ) ;
167
-
168
229
// Create and manage queue
169
230
let result = queue_client. create ( None ) . await ;
170
231
log_operation_result ( & result, "create" ) ;
@@ -175,10 +236,8 @@ async fn main() -> Result<(), Box<dyn std::error::Error>> {
175
236
let result = queue_client. create_if_not_exists ( None ) . await ;
176
237
log_operation_result ( & result, "create_if_not_exists" ) ;
177
238
178
- // Set queue metadata
179
- let metadata = HashMap :: from ( [ ( "key1" , "value1" ) , ( "key2" , "value2" ) ] ) ;
180
- let result = queue_client. set_metadata ( Some ( metadata) ) . await ;
181
- log_operation_result ( & result, "set_metadata" ) ;
239
+ // Set and get queue metadata
240
+ set_and_get_metadata ( & queue_client) . await ?;
182
241
183
242
let result = queue_client. enqueue_message ( "Example Message" , None ) . await ;
184
243
log_operation_result ( & result, "enqueue_message" ) ;
@@ -203,7 +262,8 @@ async fn main() -> Result<(), Box<dyn std::error::Error>> {
203
262
// Receive messages
204
263
peek_and_receive_messages ( & queue_client) . await ?;
205
264
206
- get_and_set_access_policies ( & queue_client) . await ?;
265
+ // Set and get access policies
266
+ set_and_get_access_policies ( & queue_client) . await ?;
207
267
208
268
// Cleanup
209
269
let result = queue_client. delete ( None ) . await ;
0 commit comments