Я получаю сообщение об ошибке "нет 'Json' в root" при создании API ржавчины - PullRequest
0 голосов
/ 08 апреля 2020

Итак, я пытался следовать примеру из https://medium.com/sean3z/building-a-restful-crud-api-with-rust-1867308352d8, чтобы создать простой REST API. На полпути компилятор ржавчины выдает мне следующую ошибку: unresolved imports 'rocket_contrib::Json', 'rocket_contrib::Value' no 'Json' in the root

Я не могу понять, что я делаю неправильно.

Вот мой автомобиль go .toml:

[package]
name = "rust-api-test"
version = "0.1.0"
authors = ["username"]
edition = "2018"

# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html

[dependencies]
rocket = "0.4.4"
serde = "1.0"
serde_json = "1.0"
serde_derive = "1.0"

[dependencies.rocket_contrib]
version = "0.4.4"
default-features = false
features = ["json"]

hero.rs:

#[derive(Serialize, Deserialize)]
pub struct Hero {
    pub id: Option<i32>,
    pub name: String,
    pub identity: String,
    pub hometown: String,
    pub age: i32
}

и main.rs:

#![feature(proc_macro_hygiene, decl_macro)]

#[macro_use] extern crate rocket;
#[macro_use] extern crate rocket_contrib;
#[macro_use] extern crate serde_derive;

mod hero;
use hero::{Hero};

use rocket_contrib::{Json, Value};


#[get("/")]
fn index() -> &'static str {
    "Hello, world!"
}

fn main() {
    rocket::ignite().mount("/", routes![index]).launch();
}

Я получаю сообщение об ошибке в строке 10: use rocket_contrib::{Json, Value};



Я следовал Совету Свена Марнаха и теперь он работает. Я изменил свой файл main.rs следующим образом:

#![feature(proc_macro_hygiene, decl_macro)]

#[macro_use] extern crate rocket;
#[macro_use] extern crate rocket_contrib;
#[macro_use] extern crate serde_derive;

mod hero;
use hero::{Hero};

use rocket_contrib::json::{Json, JsonValue};


#[post("/", data = "<hero>")]
fn create(hero: Json<Hero>) -> Json<Hero> {
    hero
}

#[get("/")]
fn read() -> JsonValue {
    json!([
        "hero 1", 
        "hero 2"
    ])
}

#[put("/<id>", data = "<hero>")]
fn update(id: i32, hero: Json<Hero>) -> Json<Hero> {
    hero
}

#[delete("/<id>")]
fn delete(id: i32) -> JsonValue {
    json!({"status": "ok"})
}

#[get("/")]
fn index() -> &'static str {
    "Hello, world!"
}

fn main() {
    rocket::ignite()
        .mount("/", routes![index])
        .mount("/hero", routes![create, update, delete])
        .mount("/heroes", routes![read])
        .launch();
}

1 Ответ

1 голос
/ 09 апреля 2020

Пример кода был написан для устаревшей версии Rocket 0.3.x. Вы больше не можете начинать новые проекты, основанные на старой версии, поскольку некоторые зависимости были вырваны из crates.io. Однако исправить пример кода довольно просто - импорт, на который жалуется компилятор, все равно не используется, так что вы можете просто удалить его. В версии 0.4.x из rocket_contrib структура rocket_contrib::Json была перемещена в rocket_contrib::json::Json, так что вы также можете импортировать из нового местоположения, если вам это нужно. Перечисление rocket_contrib::Value было заменено на rocket_contrib::json::JsonValue, хотя и с другой реализацией, поэтому вам может потребоваться адаптировать любое использование к новому интерфейсу.

...