Skip to content

Commit 054d03a

Browse files
Introduce a way to update a single policy definition key
1 parent f4df249 commit 054d03a

File tree

2 files changed

+61
-0
lines changed

2 files changed

+61
-0
lines changed

src/responses.rs

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1097,6 +1097,18 @@ impl PolicyDefinition {
10971097
pub fn is_empty(&self) -> bool {
10981098
self.len() == 0
10991099
}
1100+
1101+
pub fn insert(&mut self, key: String, value: serde_json::Value) -> Option<serde_json::Value> {
1102+
match self.0 {
1103+
Some(ref mut m) => m.insert(key, value),
1104+
None => {
1105+
let mut m = Map::new();
1106+
m.insert(key, value);
1107+
self.0 = Some(m);
1108+
None
1109+
}
1110+
}
1111+
}
11001112
}
11011113

11021114
impl PolicyDefinitionOps for PolicyDefinition {
@@ -1157,6 +1169,10 @@ pub struct Policy {
11571169
}
11581170

11591171
impl Policy {
1172+
pub fn insert_definition_key(&mut self, key: String, value: serde_json::Value) -> Option<serde_json::Value> {
1173+
self.definition.insert(key, value)
1174+
}
1175+
11601176
pub fn definition_keys(&self) -> Vec<&str> {
11611177
match &self.definition.0 {
11621178
None => Vec::new(),

tests/unit_policy_tests.rs

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -232,6 +232,51 @@ fn test_unit_policy_definition_without_cmq_keys_case1() {
232232
assert!(m2.contains_key(&k6));
233233
}
234234

235+
#[test]
236+
fn test_unit_policy_definition_insert_case1() {
237+
let k1 = "max-age".to_owned();
238+
let k2 = "max-length-bytes".to_owned();
239+
240+
let mut m = Map::new();
241+
m.insert(k1.clone(), json!("1D"));
242+
243+
let mut defs = PolicyDefinition(Some(m));
244+
assert_eq!(1, defs.len());
245+
246+
defs.insert(k1.clone(), json!("2D"));
247+
assert_eq!(1, defs.len());
248+
249+
defs.insert(k2.clone(), json!(1000000));
250+
assert_eq!(2, defs.len());
251+
}
252+
253+
#[test]
254+
fn test_unit_policy_insert_definition_key_case1() {
255+
let k1 = "max-age".to_owned();
256+
let k2 = "max-length-bytes".to_owned();
257+
258+
let mut m = Map::new();
259+
m.insert(k1.clone(), json!("1D"));
260+
261+
let defs = PolicyDefinition(Some(m));
262+
let mut pol = Policy {
263+
name: "test_unit_policy_insert_case1".to_owned(),
264+
vhost: "/".to_owned(),
265+
pattern: ".*".to_owned(),
266+
apply_to: PolicyTarget::Queues,
267+
priority: 11,
268+
definition: defs.clone(),
269+
};
270+
271+
assert_eq!(1, pol.definition.len());
272+
273+
pol.insert_definition_key(k1.clone(), json!("2D"));
274+
assert_eq!(1, pol.definition.len());
275+
276+
pol.insert_definition_key(k2.clone(), json!(1000000));
277+
assert_eq!(2, pol.definition.len());
278+
}
279+
235280
#[test]
236281
fn test_unit_policy_does_match_case1() {
237282
let mut m = Map::new();

0 commit comments

Comments
 (0)