Skip to content

Commit f051234

Browse files
committed
feat(agent): add a header action to set default value of a header if no present
1 parent db8bde7 commit f051234

File tree

4 files changed

+295
-22
lines changed

4 files changed

+295
-22
lines changed
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
use crate::action::UnitTrace;
2+
use crate::filter::header_action::HeaderAction;
3+
use crate::http::Header;
4+
5+
#[derive(Debug)]
6+
pub struct HeaderDefaultAction {
7+
pub name: String,
8+
pub value: String,
9+
// in 3.0 make this mandatory
10+
pub id: Option<String>,
11+
// in 3.0 make this mandatory
12+
pub target_hash: Option<String>,
13+
}
14+
15+
// Set a header if not present
16+
impl HeaderAction for HeaderDefaultAction {
17+
fn filter(&self, mut headers: Vec<Header>, unit_trace: Option<&mut UnitTrace>) -> Vec<Header> {
18+
let mut found = false;
19+
20+
for header in &headers {
21+
if header.name.to_lowercase() == self.name.to_lowercase() {
22+
found = true;
23+
break;
24+
}
25+
}
26+
27+
if !found {
28+
headers.push(Header {
29+
name: self.name.clone(),
30+
value: self.value.clone(),
31+
});
32+
33+
if let (Some(trace), Some(id)) = (unit_trace, &self.id) {
34+
trace.add_value_computed_by_unit(id, &self.value);
35+
36+
if let Some(target_hash) = &self.target_hash {
37+
trace.add_unit_id_with_target(target_hash, id);
38+
}
39+
}
40+
}
41+
42+
headers
43+
}
44+
}

src/filter/header_action/mod.rs

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
pub mod header_add;
2+
pub mod header_default;
23
pub mod header_override;
34
pub mod header_remove;
45
pub mod header_replace;
@@ -47,5 +48,14 @@ pub fn create_header_action(header_filter: &HeaderFilter) -> Option<Box<dyn Head
4748
}));
4849
}
4950

51+
if header_filter.action == "default" {
52+
return Some(Box::new(header_default::HeaderDefaultAction {
53+
id: header_filter.id.clone(),
54+
name: header_filter.header.clone(),
55+
value: header_filter.value.clone(),
56+
target_hash: header_filter.target_hash.clone(),
57+
}));
58+
}
59+
5060
None
5161
}

0 commit comments

Comments
 (0)