#![cfg(feature = "async")]
use crate::{options::SAMV3_TCP_PORT, proto::router::RouterApiController};
use tokio::{io::AsyncWriteExt, net::TcpStream};
pub struct RouterApi {}
impl RouterApi {
pub async fn lookup_name(name: &str) -> crate::Result<String> {
let mut controller = RouterApiController::new();
let mut stream = TcpStream::connect(format!("127.0.0.1:{SAMV3_TCP_PORT}")).await?;
let command = controller.handshake_router_api()?;
stream.write_all(&command).await?;
let (mut stream, response) = read_response!(stream);
controller.handle_response(&response)?;
let command = controller.lookup_name(name)?;
stream.write_all(&command).await?;
let (_session_stream, response) = read_response!(stream);
controller.handle_response(&response)?;
Ok(controller.destination())
}
pub async fn generate_destination() -> crate::Result<(String, String)> {
let mut controller = RouterApiController::new();
let mut stream = TcpStream::connect(format!("127.0.0.1:{SAMV3_TCP_PORT}")).await?;
let command = controller.handshake_router_api()?;
stream.write_all(&command).await?;
let (mut stream, response) = read_response!(stream);
controller.handle_response(&response)?;
let command = controller.generate_destination()?;
stream.write_all(&command).await?;
let (_session_stream, response) = read_response!(stream);
controller.handle_response(&response)?;
Ok(controller.generated_destination())
}
}