

ただいまRUSTの学習を行っているのですが、次のようなエラーから抜け出せません。  
どうしたら抜け出せますでしょうか。

**エラーメッセージ**

[code]

    error: cannot find macro `mime` in this scope
      --> src/main.rs:16:18
       |
    16 | response.set_mut(mime!(Text/Html; Charset=Utf8));
    
[/code]

関連するコードは以下の通りです。

**.toml**

[code]

    [package]
    name = "iron-gcd"
    version = "0.1.0"
    authors = ["<>"]
    
    [dependencies]
    iron = "0.5.1"
    mime = "0.3.16"
    router = "0.5.1"
    urlencoded = "0.5.0"
    
[/code]

**main**

[code]

    extern crate iron;
    #[macro_use] extern crate mime;
    
    use iron::prelude::*;
    use iron::status;
    
    fn main(){
        println!("Serving on http://localhoset:3000...");
    Iron::new(get_form).http("localhost:3000").unwrap();
    }
    
    fn get_form(_request: &mut Request) -> IronResult<Response>{
    let mut response = Response::new();
    
    response.set_mut(status::Ok);
    response.set_mut(mime!(Text/Html; Charset=Utf8));
    response.set_mut(r#"
    <title>GCD Calculater</title>
    <form action = "/gcd" method ="post">
    <input type="text" name ="n"/>
    <input type="text" name ="n"/>
    <button type ="submit">compute GCD</button>
    </form>
    "#);
    Ok(response)
    }
    
[/code]


CC BY-SA 4.0
2020-05-06T22:16:34.087
66360
2020-05-07T02:28:45.523
2020-05-07T01:15:08.743
3060
40019
question
rust
RUSTのプログラムについて: cannot find macro `mime` in this scope


`mime`クレートでは`0.3`で`mime!`マクロが廃止されてしまったので、`Cargo.toml`の`mime`のバージョンを`0.2.6`にすると`mime!`マクロを使えるようになるはずです。


CC BY-SA 4.0
2020-05-07T02:23:14.767
66366
2020-05-07T02:23:14.767
40026
66360
answer


こんにちは。見たところ、古いコード例を参考にしているようですね。

`mime` マクロがあるのは mime 0.2系までで、お使いのmime 0.3.16 では使えません。また、 iron
0.5系が依存しているのもmime 0.2系なので、 Cargo.tomlの `mime = "0.3.16"` の箇所を `mime = "0.2"`
と書き換えるとコンパイルは通ります。

上記でさしあたっての問題は解決するのですが、おせっかいながらその他の点についても指摘させて頂きます。

  * iron 0.5.1は3年前にリリースされたものであり、ironの最新版は 0.6.1 
    * もうちょっと言うと、ironは最近はあまり使われていないフレームワークですが、それはまた別の話
  * 現在のRustは2018 editionというものに移行しており、 `extern crate` や `#[macro_use]` などはほとんど使われなくなった 
    * ただしライブラリの方がちゃんと移行できてない場合は使うこともある

ironやmimeのリポジトリを見にいくと現在リリースされている最新版から少なくない変更があるようなのでここでまたすぐに古くなるコードを掲載するのはやめておきますが、もし興味があれば新しい方の書き方も調べてみて下さい。


CC BY-SA 4.0
2020-05-07T02:28:45.523
66368
2020-05-07T02:28:45.523
22816
66360
answer