Я довольно новичок в Rust и потратил большую часть своего времени на написание кода на C / C ++. У меня есть flask веб-сервер, который возвращает обратно упакованную структуру данных в виде длины + строки с нулевым символом в конце:
test_data = "Hello there bob!" + "\x00"
test_data = test_data.encode("utf-8")
data = struct.pack("<I", len(test_data ))
data += test_data
return data
В моем коде ржавчины я использую ящик easy_http_request
и могу успешно получить ответ, позвонив по номеру get_from_url_str
. Я пытаюсь сопоставить возвращенный ответ со структурой данных Test
(если это возможно). Я пытался использовать align_to
, чтобы безуспешно получить данные строки, сопоставленные со структурой.
extern crate easy_http_request;
extern crate libc;
use easy_http_request::DefaultHttpRequest;
use libc::c_char;
#[repr(C, packed)]
#[derive(Debug, Clone, Copy)]
struct Test {
a: u32,
b: *const c_char // TODO: What do I put here???
}
fn main() {
let response = DefaultHttpRequest::get_from_url_str("http://localhost:5000/").unwrap().send().unwrap();
let (head, body, _tail) = unsafe { response.body.align_to::<Test>() };
let my_test: Test = body[0];
println!("{}", my_test.a); // Correctly prints '17'
println!("{:?}", my_test.b); // Fails
}
Я не уверен, что это возможно в Rust. В response.body
я могу правильно видеть строку с нулевым символом в конце, поэтому я знаю, что данные там Просто не уверен, есть ли способ отобразить его на строку в структуре Test
. Нет причин, по которым мне нужно использовать строку с нулевым символом в конце. В конечном счете, я просто пытаюсь отобразить структуру данных размера и строки в структуру Rust схожих типов.