2016-12-15 10 views
1

Когда я пытаюсь запустить пример from the serde repository:проекта с serde не может скомпилировать

#![feature(proc_macro)] 

#[macro_use] 
extern crate serde_derive; 

extern crate serde_json; 

#[derive(Serialize, Deserialize, Debug)] 
struct Point { 
    x: i32, 
    y: i32, 
} 

fn main() { 
    let point = Point { x: 1, y: 2 }; 

    // Convert the Point to a JSON string. 
    let serialized = serde_json::to_string(&point).unwrap(); 

    // Prints serialized = {"x":1,"y":2} 
    println!("serialized = {}", serialized); 

    // Convert the JSON string back to a Point. 
    let deserialized: Point = serde_json::from_str(&serialized).unwrap(); 

    // Prints deserialized = Point { x: 1, y: 2 } 
    println!("deserialized = {:?}", deserialized); 
} 

Я получаю сообщение об ошибке:

error: failed to run rustc to learn about target-specific information

Caused by: process didn't exit successfully: rustc - --crate-name _ --print=file-names --crate-type bin --crate-type proc-macro --crate-type rlib --target x86_64-unknown-linux-gnu (exit code: 101) --- stderr error: unknown crate type: proc-macro

Моя Rust версия 1.13.0 и мой Cargo.toml имеет эти Зависимости:

[dependencies] 
serde = "*" 
serde_derive = "*" 

Должен ли я использовать другие зависимости или дополнительную конфигурацию?

+5

Вам необходимо использовать ночной и недавний, и вы не должны использовать зависимостей '' * '', а указывать версии. Если вы хотите использовать stable, вам нужно использовать описанное здесь решение: https://serde.rs/codegen-stable.html –

+0

@ker вы имеете в виду rustc ночной? какую версию serde и serde_derive вы могли бы мне порекомендовать? – AntonioRomero

+3

Да, я имею в виду rustc ночной. К сожалению, эта функция будет нестабильной для другого цикла выпуска или двух, поэтому от 1,5 до 3 месяцев, пока вы не сможете использовать его в стабильном режиме. Предлагаемые версии - это те, которые вы можете найти на https://serde.rs или просто самые последние на crates.io –

ответ

0

Атрибут #![feature(...)] указывает код, который использует функции Rust, которые еще не были стабилизированы. В то время, когда задавался вопрос, функция proc_macro еще не была стабильной. Серде нужна эта функция для макросов #[derive(Serialize, Deserialize)].

Пользовательские выходы были стабилизированы с Rust 1.15, поэтому код в вопросе (с атрибутом атрибута удален) должен работать с любым компилятором Rust с этой версии.