Skip to main content

rl_lang/interpreter/stdlib/http/
http_request_header.rs

1use 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}