rssss を Rust 2018 対応した備忘。

Cargo.toml に edition = “2018” の指定を追加

diff --git a/backend/Cargo.toml b/backend/Cargo.toml
index 9b330a4..bf555a8 100644
--- a/backend/Cargo.toml
+++ b/backend/Cargo.toml
@@ -2,6 +2,7 @@
 name = "rssss"
 version = "0.1.0"
 authors = ["zaneli <shun.otani@gmail.com>"]
+edition = "2018"

 [dependencies]
 actix = "0.7"

rustc の更新

一旦 cargo run してみる。

> cargo run
   Compiling rssss v0.1.0 (/Users/zaneli/ws/github.com/zaneli-sandbox/rssss/backend)
error: Edition 2018 is unstable and only available for nightly builds of rustc.

手元の rustc が古い?

> rustc --version
rustc 1.30.0 (da5f414c2 2018-10-24)

rustup で rustc を更新してみる。

rustup update
info: syncing channel updates for 'stable-x86_64-apple-darwin'
info: latest update on 2019-04-25, rust version 1.34.1 (fc50f328b 2019-04-24)
info: downloading component 'rustc'
 78.9 MiB /  78.9 MiB (100 %)   1.9 MiB/s ETA:   0 s
info: downloading component 'rust-std'
 51.1 MiB /  51.1 MiB (100 %)   1.8 MiB/s ETA:   0 s
info: downloading component 'cargo'
  3.4 MiB /   3.4 MiB (100 %)   2.0 MiB/s ETA:   0 s
info: downloading component 'rust-docs'
 10.2 MiB /  10.2 MiB (100 %)   2.5 MiB/s ETA:   0 s
info: downloading component 'rustfmt-preview'
info: downloading component 'rust-analysis'
info: downloading component 'rls-preview'
  5.8 MiB /   5.8 MiB (100 %)   2.9 MiB/s ETA:   0 s
info: downloading component 'rust-src'
info: removing component 'rustc'
info: removing component 'rust-std'
info: removing component 'cargo'
info: removing component 'rust-docs'
info: removing component 'rustfmt-preview'
info: removing component 'rust-analysis'
info: removing component 'rls-preview'
info: removing component 'rust-src'
info: installing component 'rustc'
info: installing component 'rust-std'
info: installing component 'cargo'
info: installing component 'rust-docs'
info: installing component 'rustfmt-preview'
info: installing component 'rust-analysis'
info: installing component 'rls-preview'
info: installing component 'rust-src'
info: checking for self-updates
info: downloading self-update

  stable-x86_64-apple-darwin updated - rustc 1.34.1 (fc50f328b 2019-04-24)

再度バージョン確認。

> rustc --version
rustc 1.34.1 (fc50f328b 2019-04-24)

再度 cargo run。別のエラーが出る事を確認。

error: expected one of `:` or `@`, found `,`
   --> src/rss.rs:114:48
    |
114 |     fn parse_start_element(&mut self, OwnedName, Vec<OwnedAttribute>);
    |                                       ---------^ expected one of `:` or `@` here
    |                                       |
    |                                       help: explicitly ignore parameter: `_: OwnedName`
    |
    = note: anonymous parameters are removed in the 2018 edition (see RFC 1685)

error: expected one of `:` or `@`, found `)`
   --> src/rss.rs:115:39
    |
115 |     fn parse_content(&mut self, String);
    |                                 ------^ expected one of `:` or `@` here
    |                                 |
    |                                 help: explicitly ignore parameter: `_: String`
    |
    = note: anonymous parameters are removed in the 2018 edition (see RFC 1685)

error: expected one of `:` or `@`, found `)`
   --> src/rss.rs:116:46
    |
116 |     fn parse_end_element(&mut self, OwnedName);
    |                                     ---------^ expected one of `:` or `@` here
    |                                     |
    |                                     help: explicitly ignore parameter: `_: OwnedName`
    |
    = note: anonymous parameters are removed in the 2018 edition (see RFC 1685)

error[E0432]: unresolved import `error`
 --> src/rss.rs:2:5
  |
2 | use error::{Error, InvalidRssError};
  |     ^^^^^ did you mean `crate::error`?
  |
  = note: `use` statements changed in Rust 2018; read more at <https://doc.rust-lang.org/edition-guide/rust-2018/module-system/path-clarity.html>

(略)

error: aborting due to 16 previous errors

コンパイルエラー対応

trait 引数の変数名が省略不可?になったようなので対応。

diff --git a/backend/src/rss.rs b/backend/src/rss.rs
index 8151425..1680886 100644
--- a/backend/src/rss.rs
+++ b/backend/src/rss.rs
@@ -111,9 +111,9 @@ fn parse(buf: &bytes::Bytes, parser: &mut RssParser) -> Result<Vec<Rss>, Error>
 }
 trait RssParser {
-    fn parse_start_element(&mut self, OwnedName, Vec<OwnedAttribute>);
-    fn parse_content(&mut self, String);
-    fn parse_end_element(&mut self, OwnedName);
+    fn parse_start_element(&mut self, _: OwnedName, _: Vec<OwnedAttribute>);
+    fn parse_content(&mut self, _: String);
+    fn parse_end_element(&mut self, _: OwnedName);
     fn verify_rss(&self) -> Result<(), Error>;
     fn get_results(&self) -> Vec<Rss>;
 }

この時点でコンパイルが通る事を確認。

extern crate と #[macro_use] を削除し、 use を使用

main.rss に書いていた extern crate を一律削除。
#[macro_use] と extern crate を書いていたものはそのままではコンパイルが通らなくなるので、 use を追記。

#[macro_use]
extern crate log;
#[macro_use]
extern crate serde_derive;
use log::info;
use serde_derive::{Deserialize, Serialize};

以上。
差分はこの通り。

广告
将在 10 秒后关闭
bannerAds