use rbot_messages::messages as msg;
use rbot_messages::{Message, MessageIdentity, MessageType};
use serde::Serialize;
extern "C" {
pub fn tcp_send(ptr_void: i32, size: i32) -> i32;
pub fn dbg_log(bytes_ptr: i32, size: i32);
pub fn bot_sleep(seconds: f32);
pub fn bot_random() -> f32;
}
pub fn send_message<M: Message + MessageIdentity + Serialize>(msg: &M) -> MessageType {
unsafe {
let byte_msg = rbot_messages::serialize_message(msg).unwrap();
let result_ptr = tcp_send(
std::ptr::addr_of!(byte_msg[0]) as i32,
byte_msg.len() as i32,
);
let [typ, size, res_ptr] = *(result_ptr as *const [i32; 3]);
let bytes = Vec::from_raw_parts(res_ptr as *mut u8, size as usize, size as usize);
msg::decode_message(&bytes, typ).unwrap()
}
}