У меня есть тесты, и мне нужно отправить данные JSON на мой сервер. У меня есть следующий тест:Как преобразовать структуру или JSON в необработанную строку?
extern crate hyper;
extern crate rustc_serialize;
use std::io::Read;
use hyper::*;
#[derive(RustcDecodable, RustcEncodable)]
struct LegacyJsonRequest {
jsonrpc: String,
method: String,
params: String,
id: i32,
auth: String,
}
#[test]
fn apiinfo_jsonrpc_tests() {
let client = Client::new();
let url = "http://localhost:6767/api_jsonrpc.php";
let mut http_reader = header::Headers::new();
http_reader.set_raw("Content-Type", vec![b"application/json".to_vec()]);
//TODO: How to use a struct and 'export' it to a raw string literal???
let request_data = LegacyJsonRequest {
jsonrpc: "2.0".to_string(),
method: "apiinfo.version".to_string(),
params: "[]".to_string(),
auth: "[]".to_string(),
id: 1,
};
let encoded_request = rustc_serialize::json::encode(&request_data).unwrap();
let mut response = client.post(url)
.body(encoded_request)
.send()
.unwrap();
}
С помощью этого кода, возвращается следующее сообщение об ошибке:
error[E0277]: the trait bound `hyper::client::Body<'_>: std::convert::From<std::string::String>` is not satisfied
Если я уронить структура и JSON закодированный код и создать простую сырец строкового литерала и ссылки он по методу тела, он работает. Пример:
extern crate hyper;
extern crate rustc_serialize;
use std::io::Read;
use hyper::*;
#[derive(RustcDecodable, RustcEncodable)]
struct LegacyJsonRequest {
jsonrpc: String,
method: String,
params: String,
id: i32,
auth: String,
}
#[test]
fn apiinfo_jsonrpc_tests() {
let client = Client::new();
let url = "http://localhost:6767/api_jsonrpc.php";
let mut http_reader = header::Headers::new();
http_reader.set_raw("Content-Type", vec![b"application/json".to_vec()]);
let request_data =
r#"{"jsonrpc":"2.0", "method": "apiinfo.version", "params": {}, "auth": {}, "id": "1"}"#;
let mut response = client.post(url)
.body(request_data)
.send()
.unwrap();
}
Итак: Как я могу конвертировать мою структуру или JSON в сырой строки?
Я знаю, что ошибка E0277 связана с реализацией признака «Hyper :: client :: Body < '_>», но посмотрите, это не вопрос; возникает вопрос: как преобразовать структуру или JSON в необработанную строку, не более того. Благодарю.
Я предлагаю вам продолжить исследование того, что означает это сообщение об ошибке. – Shepmaster
Я только что добавил более полные примеры. Если я могу преобразовать объект JSON или Struct в необработанную строку, тогда мне не нужно реализовывать черту для гипер :: client :: Body <'_>. Речь идет о конверсии. –