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