Current section
Files
Jump to
Current section
Files
native/ex_reticulum_nif/src/link.rs
use rustler::{Encoder, Env, ResourceArc, Term};
use reticulum::destination::link::LinkStatus;
use crate::atoms;
use crate::resources::LinkResource;
fn link_status_atom(status: LinkStatus) -> rustler::Atom {
match status {
LinkStatus::Pending => atoms::pending(),
LinkStatus::Handshake => atoms::handshake(),
LinkStatus::Active => atoms::active(),
LinkStatus::Stale => atoms::stale(),
LinkStatus::Closed => atoms::closed(),
}
}
fn runtime() -> &'static tokio::runtime::Runtime {
crate::transport::runtime()
}
#[rustler::nif(schedule = "DirtyIo")]
fn link_status(env: Env, link: ResourceArc<LinkResource>) -> Term {
let rt = runtime();
let status = rt.block_on(async { link.link.lock().await.status() });
(atoms::ok(), link_status_atom(status)).encode(env)
}
#[rustler::nif(schedule = "DirtyIo")]
fn link_rtt(env: Env, link: ResourceArc<LinkResource>) -> Term {
let rt = runtime();
let rtt = rt.block_on(async { link.link.lock().await.rtt().as_millis() as u64 });
(atoms::ok(), rtt).encode(env)
}