rl_lang/interpreter/stdlib/http/
http_request_header.rs1use crate::interpreter::{
2 evaluator::Evaluator,
3 stdlib::{
4 common::{extract_number, verr, vok, vs},
5 http::HttpHandle,
6 },
7 values::Value,
8};
9pub fn func(eval: &mut Evaluator, id: Value, name: String) -> Value {
10 let id = match extract_number(id, "http_request_header") {
11 Ok(a) if a as i64 >= 0 => a as i64,
12 Ok(_) => {
13 return verr!(vs!(
14 "http_request_header: id handle cannot be negative".to_string()
15 ));
16 }
17 Err(e) => return verr!(vs!(format!("{}", e))),
18 };
19 let request = match eval.http_handles.get(&id) {
20 Some(HttpHandle::Request(request)) => request,
21 Some(_) => {
22 return verr!(vs!(format!(
23 "http_request_header: handle {} is not a request",
24 id
25 )));
26 }
27 None => {
28 return verr!(vs!(format!("http_request_header: unknown handle {}", id)));
29 }
30 };
31 let found = request
32 .headers()
33 .iter()
34 .find(|h| h.field.to_string().eq_ignore_ascii_case(&name))
35 .map(|h| h.value.to_string());
36 match found {
37 Some(value) => vok!(vs!(value)),
38 None => verr!(vs!(format!("http_request_header: no \"{}\" header", name))),
39 }
40}