2016-07-24 47 views
-1

我正在關注Iron web框架教程,它看起來很簡單,但我似乎無法將結構編碼爲JSON。無法在Rust中將結構編碼到JSON中

extern crate iron; 
extern crate rustc_serialize; 

use iron::prelude::*; 
use iron::status; 
use rustc_serialize::json; 

struct Greeting { 
    msg: String, 
} 

fn main() { 
    fn hello_world(_: &mut Request) -> IronResult<Response> { 
     let greeting = Greeting { msg: "hello_world".to_string() }; 
     let payload = json::encode(&greeting).unwrap(); 
     // Ok(Response::with((status::Ok,payload))) 
    } 

    // Iron::new(hello_world).http("localhost:3000").unwrap(); 
} 

我Cargo.toml

[package] 
name = "iron_init" 
version = "0.1.0" 
authors = ["mazbaig"] 

[dependencies] 
iron = "*" 
rustc-serialize = "*" 

而且我的錯誤:

error: the trait bound `Greeting: rustc_serialize::Encodable` is not satisfied [E0277] 
     let payload = json::encode(&greeting).unwrap(); 
         ^~~~~~~~~~~~ 
help: run `rustc --explain E0277` to see a detailed explanation 
note: required by `rustc_serialize::json::encode` 

我還挺得到了正確的類型沒有得到傳遞到json.encode()功能,但我無法弄清楚我想要什麼。我可能錯過了一些非常基本的東西。

+2

哪個教程?你需要在'Greeting'上加'#[derive(RustcEncodable)]'' – kennytm

回答

4

你沒有提供你正在使用的實際教程,但它似乎匹配this one from brson

extern crate iron; 
extern crate rustc_serialize; 

use iron::prelude::*; 
use iron::status; 
use rustc_serialize::json; 

#[derive(RustcEncodable)] 
struct Greeting { 
    msg: String 
} 

fn main() { 
    fn hello_world(_: &mut Request) -> IronResult<Response> { 
     let greeting = Greeting { msg: "Hello, World".to_string() }; 
     let payload = json::encode(&greeting).unwrap(); 
     Ok(Response::with((status::Ok, payload))) 
    } 

    Iron::new(hello_world).http("localhost:3000").unwrap(); 
    println!("On 3000"); 
} 

注意到兩者之間有什麼不同?

#[derive(RustcEncodable)] 
struct Greeting { 
    msg: String 
} 

您必須指定Encodable特徵已實施。在這種情況下,您可以通過派生RustcEncodable來做到這一點。

+0

噢好吧。有沒有理由爲什麼結構默認不可編碼?這是一個架空的東西嗎? – Maz

+1

@Maz基本上沒有什麼是「默認」在Rust中完成的。系統語言的好處之一是,你知道你正在編寫的代碼的所有細節。你可能*不想*想讓一個給定的結構可序列化。一個給定的結構可能無法序列化 - 應該防止編譯?示警?默默地失敗?你可以看到爲什麼選擇更簡單。 – Shepmaster

+0

Gotcha。謝謝! – Maz