Skip to main content

rl_lang/interpreter/stdlib/net/
tcp_close.rs

1use crate::interpreter::{
2    evaluator::Evaluator,
3    stdlib::{
4        common::{extract_number, verr, vnl, vok, vs},
5        net::NetHandle,
6    },
7    values::Value,
8};
9
10pub fn func(eval: &mut Evaluator, id: Value) -> Value {
11    let id = match extract_number(id, "tcp_close") {
12        Ok(a) if a as i64 >= 0 => a as i64,
13        Ok(_) => return verr!(vs!("tcp_close: id handle cannot be negative".to_string())),
14        Err(e) => return verr!(vs!(format!("tcp_close: {}", e))),
15    };
16    match eval.net_handles.get(&id) {
17        Some(NetHandle::TcpListener(_)) | Some(NetHandle::TcpStream(_)) => {
18            eval.net_handles.remove(&id);
19            vok!(vnl!())
20        }
21        Some(_) => verr!(vs!(format!(
22            "tcp_close(): handle {} is not a TCP handle",
23            id
24        ))),
25        None => verr!(vs!(format!("tcp_close(): unknown handle {}", id))),
26    }
27}