[INFO] cloning repository https://github.com/janiokq/blog_rust
[INFO] running `Command { std: "git" "-c" "credential.helper=" "-c" "credential.helper=/workspace/cargo-home/bin/git-credential-null" "clone" "--bare" "https://github.com/janiokq/blog_rust" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fjaniokq%2Fblog_rust", kill_on_drop: false }`
[INFO] [stderr] Cloning into bare repository '/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fjaniokq%2Fblog_rust'...
[INFO] running `Command { std: "git" "rev-parse" "HEAD", kill_on_drop: false }`
[INFO] [stdout] 09b0b77eefdb76b0712d8f6ca4c7f6057c4792a3
[INFO] checking janiokq/blog_rust against 1.55.0 for beta-1.56-3
[INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fjaniokq%2Fblog_rust" "/workspace/builds/worker-37/source", kill_on_drop: false }`
[INFO] [stderr] Cloning into '/workspace/builds/worker-37/source'...
[INFO] [stderr] done.
[INFO] validating manifest of git repo https://github.com/janiokq/blog_rust on toolchain 1.55.0
[INFO] running `Command { std: "/workspace/cargo-home/bin/cargo" "+1.55.0" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }`
[INFO] started tweaking git repo https://github.com/janiokq/blog_rust
[INFO] finished tweaking git repo https://github.com/janiokq/blog_rust
[INFO] tweaked toml for git repo https://github.com/janiokq/blog_rust written to /workspace/builds/worker-37/source/Cargo.toml
[INFO] crate git repo https://github.com/janiokq/blog_rust already has a lockfile, it will not be regenerated
[INFO] running `Command { std: "/workspace/cargo-home/bin/cargo" "+1.55.0" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }`
[INFO] [stderr]     Blocking waiting for file lock on package cache
[INFO] [stderr]  Downloading crates ...
[INFO] [stderr]   Downloaded tracing v0.1.29
[INFO] [stderr]   Downloaded hdrhistogram v6.3.4
[INFO] [stderr]   Downloaded tower-http v0.1.1
[INFO] [stderr]   Downloaded serde_with v1.10.0
[INFO] [stderr]   Downloaded os_info v3.0.7
[INFO] [stderr]   Downloaded bson v2.0.1
[INFO] [stderr]   Downloaded sync_wrapper v0.1.1
[INFO] [stderr]   Downloaded ahash v0.7.5
[INFO] [stderr]   Downloaded mongodb v2.0.1
[INFO] [stderr]   Downloaded iri-string v0.4.0
[INFO] [stderr]   Downloaded tracing-attributes v0.1.18
[INFO] [stderr]   Downloaded sharded-slab v0.1.4
[INFO] [stderr]   Downloaded brotli-decompressor v2.3.2
[INFO] [stderr]   Downloaded tower-layer v0.3.1
[INFO] [stderr]   Downloaded brotli v3.3.2
[INFO] [stderr]   Downloaded serde_with_macros v1.5.0
[INFO] [stderr]   Downloaded typed-builder v0.9.1
[INFO] [stderr]   Downloaded alloc-no-stdlib v2.0.3
[INFO] [stderr]   Downloaded tower v0.4.8
[INFO] [stderr]   Downloaded tracing-subscriber v0.2.25
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-37/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-37/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:a89201d6b5b9fd45c15d5952ece0a0129e7e80cb26ec023fd59cf09bc26f1604" "/opt/rustwide/cargo-home/bin/cargo" "+1.55.0" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }`
[INFO] [stdout] 47babf3aed229b321bc2603a104af816f0dfe5fc0508c674595c4b651539fd85
[INFO] running `Command { std: "docker" "start" "-a" "47babf3aed229b321bc2603a104af816f0dfe5fc0508c674595c4b651539fd85", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "47babf3aed229b321bc2603a104af816f0dfe5fc0508c674595c4b651539fd85", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "47babf3aed229b321bc2603a104af816f0dfe5fc0508c674595c4b651539fd85", kill_on_drop: false }`
[INFO] [stdout] 47babf3aed229b321bc2603a104af816f0dfe5fc0508c674595c4b651539fd85
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-37/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-37/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=warn" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:a89201d6b5b9fd45c15d5952ece0a0129e7e80cb26ec023fd59cf09bc26f1604" "/opt/rustwide/cargo-home/bin/cargo" "+1.55.0" "check" "--frozen" "--all" "--all-targets" "--message-format=json", kill_on_drop: false }`
[INFO] [stdout] 1b913a266330f7f5f08b7b2f2143a19776b3050655be34b5eae3d5336f9edd5c
[INFO] running `Command { std: "docker" "start" "-a" "1b913a266330f7f5f08b7b2f2143a19776b3050655be34b5eae3d5336f9edd5c", kill_on_drop: false }`
[INFO] [stderr]    Compiling syn v1.0.80
[INFO] [stderr]    Compiling libc v0.2.103
[INFO] [stderr]    Compiling futures-core v0.3.17
[INFO] [stderr]    Compiling radium v0.5.3
[INFO] [stderr]    Compiling futures-task v0.3.17
[INFO] [stderr]     Checking futures-sink v0.3.17
[INFO] [stderr]    Compiling lexical-core v0.7.6
[INFO] [stderr]    Compiling futures-channel v0.3.17
[INFO] [stderr]     Checking futures-io v0.3.17
[INFO] [stderr]     Checking slab v0.4.4
[INFO] [stderr]    Compiling cc v1.0.71
[INFO] [stderr]     Checking arrayvec v0.5.2
[INFO] [stderr]     Checking funty v1.1.0
[INFO] [stderr]     Checking wyz v0.2.0
[INFO] [stderr]     Checking tap v1.0.1
[INFO] [stderr]    Compiling strsim v0.10.0
[INFO] [stderr]    Compiling fnv v1.0.7
[INFO] [stderr]     Checking alloc-no-stdlib v2.0.3
[INFO] [stderr]    Compiling async-trait v0.1.51
[INFO] [stderr]    Compiling ident_case v1.0.1
[INFO] [stderr]    Compiling bitflags v1.3.2
[INFO] [stderr]     Checking unicode-xid v0.2.2
[INFO] [stderr]    Compiling static_assertions v1.1.0
[INFO] [stderr]    Compiling rustversion v1.0.5
[INFO] [stderr]    Compiling askama_escape v0.10.1
[INFO] [stderr]     Checking tower-layer v0.3.1
[INFO] [stderr]    Compiling percent-encoding v2.1.0
[INFO] [stderr]    Compiling humansize v1.1.1
[INFO] [stderr]     Checking cpufeatures v0.2.1
[INFO] [stderr]     Checking hex v0.4.3
[INFO] [stderr]    Compiling pulldown-cmark v0.8.0
[INFO] [stderr]    Compiling anyhow v1.0.44
[INFO] [stderr]     Checking sync_wrapper v0.1.1
[INFO] [stderr]     Checking dyn-clone v1.0.4
[INFO] [stderr]     Checking take_mut v0.2.2
[INFO] [stderr]     Checking version_check v0.9.3
[INFO] [stderr]    Compiling tokio v1.12.0
[INFO] [stderr]    Compiling futures-macro v0.3.17
[INFO] [stderr]    Compiling futures-util v0.3.17
[INFO] [stderr]    Compiling nom v6.1.2
[INFO] [stderr]    Compiling num-integer v0.1.44
[INFO] [stderr]     Checking tracing-core v0.1.21
[INFO] [stderr]    Compiling nom v4.2.3
[INFO] [stderr]     Checking form_urlencoded v1.0.1
[INFO] [stderr]     Checking crossbeam-utils v0.6.6
[INFO] [stderr]    Compiling heck v0.3.3
[INFO] [stderr]     Checking base64 v0.10.1
[INFO] [stderr]    Compiling num-bigint v0.2.6
[INFO] [stderr]    Compiling ahash v0.7.5
[INFO] [stderr]     Checking http v0.2.5
[INFO] [stderr]     Checking lru-cache v0.1.2
[INFO] [stderr]     Checking regex-automata v0.1.10
[INFO] [stderr]     Checking getopts v0.2.21
[INFO] [stderr]     Checking sharded-slab v0.1.4
[INFO] [stderr]    Compiling generic-array v0.14.4
[INFO] [stderr]    Compiling unicase v2.6.0
[INFO] [stderr]    Compiling memchr v2.4.1
[INFO] [stderr]     Checking idna v0.2.3
[INFO] [stderr]    Compiling num-traits v0.2.14
[INFO] [stderr]     Checking want v0.3.0
[INFO] [stderr]     Checking os_info v3.0.7
[INFO] [stderr]     Checking stringprep v0.1.2
[INFO] [stderr]     Checking pem v0.8.3
[INFO] [stderr]     Checking alloc-stdlib v0.2.1
[INFO] [stderr]     Checking proc-macro2 v1.0.30
[INFO] [stderr]     Checking brotli-decompressor v2.3.2
[INFO] [stderr]     Checking crossbeam-channel v0.3.9
[INFO] [stderr]    Compiling bitvec v0.19.5
[INFO] [stderr]     Checking url v2.2.2
[INFO] [stderr]     Checking quote v1.0.10
[INFO] [stderr]     Checking tracing-log v0.1.2
[INFO] [stderr]     Checking digest v0.9.0
[INFO] [stderr]     Checking block-buffer v0.9.0
[INFO] [stderr]     Checking crypto-mac v0.11.1
[INFO] [stderr]     Checking matchers v0.0.1
[INFO] [stderr]    Compiling mime_guess v2.0.3
[INFO] [stderr]     Checking pbkdf2 v0.8.0
[INFO] [stderr]     Checking hmac v0.11.0
[INFO] [stderr]     Checking sha2 v0.9.8
[INFO] [stderr]     Checking md-5 v0.9.1
[INFO] [stderr]     Checking sha-1 v0.9.8
[INFO] [stderr]     Checking parking_lot_core v0.8.5
[INFO] [stderr]     Checking mio v0.7.13
[INFO] [stderr]     Checking getrandom v0.2.3
[INFO] [stderr]     Checking signal-hook-registry v1.4.0
[INFO] [stderr]     Checking num_cpus v1.13.0
[INFO] [stderr]     Checking time v0.1.44
[INFO] [stderr]     Checking flate2 v1.0.22
[INFO] [stderr]     Checking socket2 v0.4.2
[INFO] [stderr]     Checking hostname v0.3.1
[INFO] [stderr]    Compiling ring v0.16.20
[INFO] [stderr]     Checking brotli v3.3.2
[INFO] [stderr]     Checking resolv-conf v0.7.0
[INFO] [stderr]     Checking rand_core v0.6.3
[INFO] [stderr]     Checking uuid v0.8.2
[INFO] [stderr]     Checking parking_lot v0.11.2
[INFO] [stderr]     Checking http-body v0.4.3
[INFO] [stderr]     Checking chrono v0.4.19
[INFO] [stderr]     Checking rand_chacha v0.3.1
[INFO] [stderr]     Checking hdrhistogram v6.3.4
[INFO] [stderr]     Checking rand v0.8.4
[INFO] [stderr]     Checking simple_asn1 v0.4.1
[INFO] [stderr]    Compiling darling_core v0.13.0
[INFO] [stderr]     Checking webpki v0.21.4
[INFO] [stderr]     Checking sct v0.6.1
[INFO] [stderr]     Checking iri-string v0.4.0
[INFO] [stderr]     Checking webpki-roots v0.21.1
[INFO] [stderr]     Checking rustls v0.19.1
[INFO] [stderr]    Compiling serde_derive v1.0.130
[INFO] [stderr]    Compiling tokio-macros v1.4.1
[INFO] [stderr]    Compiling tracing-attributes v0.1.18
[INFO] [stderr]    Compiling darling_macro v0.13.0
[INFO] [stderr]    Compiling thiserror-impl v1.0.30
[INFO] [stderr]    Compiling pin-project-internal v1.0.8
[INFO] [stderr]    Compiling enum-as-inner v0.3.3
[INFO] [stderr]    Compiling derivative v2.2.0
[INFO] [stderr]    Compiling typed-builder v0.9.1
[INFO] [stderr]    Compiling darling v0.13.0
[INFO] [stderr]    Compiling serde_with_macros v1.5.0
[INFO] [stderr]     Checking pin-project v1.0.8
[INFO] [stderr]     Checking tracing v0.1.29
[INFO] [stderr]     Checking thiserror v1.0.30
[INFO] [stderr]     Checking serde v1.0.130
[INFO] [stderr]     Checking futures-executor v0.3.17
[INFO] [stderr]     Checking futures v0.3.17
[INFO] [stderr]     Checking tokio-util v0.6.8
[INFO] [stderr]     Checking tokio-stream v0.1.7
[INFO] [stderr]     Checking trust-dns-proto v0.20.3
[INFO] [stderr]     Checking async-compression v0.3.8
[INFO] [stderr]     Checking hyper v0.14.13
[INFO] [stderr]     Checking tokio-rustls v0.22.0
[INFO] [stderr]     Checking tower v0.4.8
[INFO] [stderr]     Checking trust-dns-resolver v0.20.3
[INFO] [stderr]     Checking serde_json v1.0.68
[INFO] [stderr]     Checking toml v0.5.8
[INFO] [stderr]     Checking serde_bytes v0.11.5
[INFO] [stderr]     Checking serde_urlencoded v0.7.0
[INFO] [stderr]     Checking serde_with v1.10.0
[INFO] [stderr]     Checking tracing-serde v0.1.2
[INFO] [stderr]     Checking tower-http v0.1.1
[INFO] [stderr]     Checking bson v2.0.1
[INFO] [stderr]     Checking jsonwebtoken v7.2.0
[INFO] [stderr]     Checking tracing-subscriber v0.2.25
[INFO] [stderr]     Checking askama_shared v0.11.1
[INFO] [stderr]     Checking mongodb v2.0.1
[INFO] [stderr]     Checking axum v0.2.6 (https://github.com/tokio-rs/axum#8ca55384)
[INFO] [stderr]    Compiling askama_derive v0.10.5
[INFO] [stderr]     Checking askama v0.10.5
[INFO] [stderr]     Checking blog_rust v0.1.0 (/opt/rustwide/workdir)
[INFO] [stdout] warning: unused import: `MONGO`
[INFO] [stdout]  --> src/controller/user.rs:1:13
[INFO] [stdout]   |
[INFO] [stdout] 1 | use crate::{MONGO, GLOBAL_CONF};
[INFO] [stdout]   |             ^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `#[warn(unused_imports)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `axum::extract::Extension`
[INFO] [stdout]  --> src/controller/user.rs:3:5
[INFO] [stdout]   |
[INFO] [stdout] 3 | use axum::extract::Extension;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `http::StatusCode`
[INFO] [stdout]  --> src/controller/user.rs:4:5
[INFO] [stdout]   |
[INFO] [stdout] 4 | use http::StatusCode;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `GLOBAL_CONF`, `MONGO`
[INFO] [stdout]  --> src/controller/tag.rs:1:13
[INFO] [stdout]   |
[INFO] [stdout] 1 | use crate::{MONGO, GLOBAL_CONF};
[INFO] [stdout]   |             ^^^^^  ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::model::user::*`
[INFO] [stdout]  --> src/controller/tag.rs:2:5
[INFO] [stdout]   |
[INFO] [stdout] 2 | use crate::model::user::*;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `axum::extract::Extension`
[INFO] [stdout]  --> src/controller/tag.rs:3:5
[INFO] [stdout]   |
[INFO] [stdout] 3 | use axum::extract::Extension;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `http::StatusCode`
[INFO] [stdout]  --> src/controller/tag.rs:4:5
[INFO] [stdout]   |
[INFO] [stdout] 4 | use http::StatusCode;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Claims`, `generate_token`
[INFO] [stdout]  --> src/controller/tag.rs:6:48
[INFO] [stdout]   |
[INFO] [stdout] 6 | use crate::common::{Resp, OK, WebError, OKMSG, Claims, generate_token};
[INFO] [stdout]   |                                                ^^^^^^  ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::future::Future`
[INFO] [stdout]   --> src/controller/tag.rs:10:5
[INFO] [stdout]    |
[INFO] [stdout] 10 | use std::future::Future;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused doc comment
[INFO] [stdout]   --> src/controller/tag.rs:43:14
[INFO] [stdout]    |
[INFO] [stdout] 43 |              /// No data can be added
[INFO] [stdout]    |              ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 44 |             let mut t =  Tag::new();
[INFO] [stdout]    |             ------------------------ rustdoc does not generate documentation for statements
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_doc_comments)]` on by default
[INFO] [stdout]    = help: use `//` for a plain comment
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused doc comment
[INFO] [stdout]   --> src/controller/tag.rs:77:5
[INFO] [stdout]    |
[INFO] [stdout] 77 |       /// Later, the tag in the article needs to be deleted synchronously
[INFO] [stdout]    |       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 78 | /     match del_tag_in_db(&TagInfo.id).await {
[INFO] [stdout] 79 | |         Ok(r)=>{
[INFO] [stdout] 80 | |             Ok(Resp {
[INFO] [stdout] 81 | |                 code: OK,
[INFO] [stdout] ...  |
[INFO] [stdout] 90 | |         }
[INFO] [stdout] 91 | |     }
[INFO] [stdout]    | |_____- rustdoc does not generate documentation for expressions
[INFO] [stdout]    |
[INFO] [stdout]    = help: use `//` for a plain comment
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `chrono::Local`
[INFO] [stdout]  --> src/controller/article.rs:5:5
[INFO] [stdout]   |
[INFO] [stdout] 5 | use chrono::Local;
[INFO] [stdout]   |     ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused doc comment
[INFO] [stdout]   --> src/controller/article.rs:38:13
[INFO] [stdout]    |
[INFO] [stdout] 38 |               ///新增
[INFO] [stdout]    |               ^^^^^^^
[INFO] [stdout] 39 | /             match save_article(&newArt).await {
[INFO] [stdout] 40 | |                 Ok(r) => {
[INFO] [stdout] 41 | |                     newArt.id = Some(r);
[INFO] [stdout] 42 | |                     Ok(Resp {
[INFO] [stdout] ...  |
[INFO] [stdout] 52 | |                 }
[INFO] [stdout] 53 | |             }
[INFO] [stdout]    | |_____________- rustdoc does not generate documentation for expressions
[INFO] [stdout]    |
[INFO] [stdout]    = help: use `//` for a plain comment
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `ArticleRenderTag`, `Empty404Template`
[INFO] [stdout]  --> src/controller/render.rs:2:60
[INFO] [stdout]   |
[INFO] [stdout] 2 | ...ticleListRenderItem, ArticleRenderTag, BlogTemplate, TagRender, FriendshipLink, ArticleTemplate, Empty404Template};
[INFO] [stdout]   |                         ^^^^^^^^^^^^^^^^                                                            ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `DateTime`, `Local`, `NaiveDateTime`, `TimeZone`, `Utc`
[INFO] [stdout]  --> src/controller/render.rs:4:14
[INFO] [stdout]   |
[INFO] [stdout] 4 | use chrono::{DateTime, Local, TimeZone, NaiveDateTime, Utc};
[INFO] [stdout]   |              ^^^^^^^^  ^^^^^  ^^^^^^^^  ^^^^^^^^^^^^^  ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Path`
[INFO] [stdout]  --> src/controller/render.rs:5:21
[INFO] [stdout]   |
[INFO] [stdout] 5 | use axum::extract::{Path, Query};
[INFO] [stdout]   |                     ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `axum::http::Request`
[INFO] [stdout]  --> src/controller/render.rs:7:5
[INFO] [stdout]   |
[INFO] [stdout] 7 | use axum::http::Request;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `axum::body::Body`
[INFO] [stdout]  --> src/controller/render.rs:8:5
[INFO] [stdout]   |
[INFO] [stdout] 8 | use axum::body::Body;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `rand::Rng`
[INFO] [stdout]   --> src/controller/render.rs:13:5
[INFO] [stdout]    |
[INFO] [stdout] 13 | use rand::Rng;
[INFO] [stdout]    |     ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary parentheses around method argument
[INFO] [stdout]   --> src/controller/render.rs:76:24
[INFO] [stdout]    |
[INFO] [stdout] 76 |         page_list.push((i + 1));
[INFO] [stdout]    |                        ^^^^^^^ help: remove these parentheses
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_parens)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused doc comment
[INFO] [stdout]    --> src/controller/render.rs:113:17
[INFO] [stdout]     |
[INFO] [stdout] 113 |                   ///过滤 Life tag 这个留给 life 栏目用的
[INFO] [stdout]     |                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 114 | 
[INFO] [stdout] 115 | /                 alltags.push(TagRender {
[INFO] [stdout] 116 | |                     name,
[INFO] [stdout] 117 | |                     select,
[INFO] [stdout] 118 | |                 })
[INFO] [stdout]     | |__________________- rustdoc does not generate documentation for expressions
[INFO] [stdout]     |
[INFO] [stdout]     = help: use `//` for a plain comment
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused doc comment
[INFO] [stdout]    --> src/controller/render.rs:255:5
[INFO] [stdout]     |
[INFO] [stdout] 255 |     ///生成推荐内容
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^
[INFO] [stdout] 256 |     let mut recommend_article: Vec<ArticleListRenderItem> = Vec::new();
[INFO] [stdout]     |     ------------------------------------------------------------------- rustdoc does not generate documentation for statements
[INFO] [stdout]     |
[INFO] [stdout]     = help: use `//` for a plain comment
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused doc comment
[INFO] [stdout]    --> src/controller/render.rs:259:5
[INFO] [stdout]     |
[INFO] [stdout] 259 |       ///获取相关tag的推荐
[INFO] [stdout]     |       ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 260 | /     if !tags.is_empty() {
[INFO] [stdout] 261 | |         let taglength = tags.len();
[INFO] [stdout] 262 | |         let get_item_number = max_rec_item / taglength;
[INFO] [stdout] 263 | |         for x in tags {
[INFO] [stdout] ...   |
[INFO] [stdout] 294 | |         }
[INFO] [stdout] 295 | |     }
[INFO] [stdout]     | |_____- rustdoc does not generate documentation for expressions
[INFO] [stdout]     |
[INFO] [stdout]     = help: use `//` for a plain comment
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Serializer`
[INFO] [stdout]  --> src/controller/copyright.rs:8:37
[INFO] [stdout]   |
[INFO] [stdout] 8 | use serde::{Deserialize, Serialize, Serializer};
[INFO] [stdout]   |                                     ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused doc comment
[INFO] [stdout]   --> src/controller/copyright.rs:26:13
[INFO] [stdout]    |
[INFO] [stdout] 26 |             /// Create a return
[INFO] [stdout]    |             ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 27 |             let mut copy = Copyright::new();
[INFO] [stdout]    |             -------------------------------- rustdoc does not generate documentation for statements
[INFO] [stdout]    |
[INFO] [stdout]    = help: use `//` for a plain comment
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::any::TypeId`
[INFO] [stdout]  --> src/common/common.rs:3:5
[INFO] [stdout]   |
[INFO] [stdout] 3 | use std::any::TypeId;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Display`, `Error`, `Formatter`
[INFO] [stdout]  --> src/common/common.rs:4:16
[INFO] [stdout]   |
[INFO] [stdout] 4 | use std::fmt::{Display, Formatter, Error};
[INFO] [stdout]   |                ^^^^^^^  ^^^^^^^^^  ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `bson::document`
[INFO] [stdout]  --> src/common/common.rs:5:27
[INFO] [stdout]   |
[INFO] [stdout] 5 | use mongodb::{Collection, bson::document, bson, bson::Document};
[INFO] [stdout]   |                           ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `StdError`
[INFO] [stdout]  --> src/common/common.rs:7:35
[INFO] [stdout]   |
[INFO] [stdout] 7 | use serde::de::{DeserializeOwned, StdError};
[INFO] [stdout]   |                                   ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `MONGO`
[INFO] [stdout]  --> src/common/token.rs:2:13
[INFO] [stdout]   |
[INFO] [stdout] 2 | use crate::{MONGO, GLOBAL_CONF};
[INFO] [stdout]   |             ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `errors::Error`
[INFO] [stdout]  --> src/common/token.rs:3:75
[INFO] [stdout]   |
[INFO] [stdout] 3 | use jsonwebtoken::{decode, TokenData, Algorithm, DecodingKey, Validation, errors::Error, encode, EncodingKey, Header};
[INFO] [stdout]   |                                                                           ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `HtmlTemplate`
[INFO] [stdout]  --> src/router.rs:7:24
[INFO] [stdout]   |
[INFO] [stdout] 7 | use crate::template::{ HtmlTemplate};
[INFO] [stdout]   |                        ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `axum::body::Body`
[INFO] [stdout]   --> src/router.rs:11:5
[INFO] [stdout]    |
[INFO] [stdout] 11 | use axum::body::Body;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `tower_http::auth::RequireAuthorizationLayer`
[INFO] [stdout]   --> src/router.rs:13:5
[INFO] [stdout]    |
[INFO] [stdout] 13 | use tower_http::auth::RequireAuthorizationLayer;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `extract`
[INFO] [stdout]   --> src/router.rs:16:12
[INFO] [stdout]    |
[INFO] [stdout] 16 | use axum::{extract, Router, service};
[INFO] [stdout]    |            ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `tower_http::set_header::SetResponseHeaderLayer`
[INFO] [stdout]   --> src/router.rs:18:5
[INFO] [stdout]    |
[INFO] [stdout] 18 | use tower_http::set_header::SetResponseHeaderLayer;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `HeaderValue`, `header`
[INFO] [stdout]   --> src/router.rs:19:12
[INFO] [stdout]    |
[INFO] [stdout] 19 | use http::{HeaderValue, header};
[INFO] [stdout]    |            ^^^^^^^^^^^  ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `ServiceBuilder`
[INFO] [stdout]   --> src/router.rs:20:13
[INFO] [stdout]    |
[INFO] [stdout] 20 | use tower::{ServiceBuilder};
[INFO] [stdout]    |             ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Html`
[INFO] [stdout]   --> src/router.rs:22:43
[INFO] [stdout]    |
[INFO] [stdout] 22 | use axum::{handler::{Handler}, response::{Html}, };
[INFO] [stdout]    |                                           ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Serializer`
[INFO] [stdout]  --> src/model/user/mod.rs:4:37
[INFO] [stdout]   |
[INFO] [stdout] 4 | use serde::{Deserialize, Serialize, Serializer};
[INFO] [stdout]   |                                     ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `get`, `list`
[INFO] [stdout]  --> src/model/user/mod.rs:5:13
[INFO] [stdout]   |
[INFO] [stdout] 5 | use super::{get, list, save,find,update};
[INFO] [stdout]   |             ^^^  ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Cursor`, `bson::oid::ObjectId`, `bson`
[INFO] [stdout]  --> src/model/article/handler.rs:4:36
[INFO] [stdout]   |
[INFO] [stdout] 4 | use mongodb::{options::FindOptions,bson,bson::oid::ObjectId,bson::*,Cursor,bson::Document};
[INFO] [stdout]   |                                    ^^^^ ^^^^^^^^^^^^^^^^^^^         ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary parentheses around function argument
[INFO] [stdout]   --> src/model/article/handler.rs:54:24
[INFO] [stdout]    |
[INFO] [stdout] 54 |     option.skip = Some((page_number*(page_size as u64)));
[INFO] [stdout]    |                        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove these parentheses
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Serializer`
[INFO] [stdout]  --> src/model/article/mod.rs:5:37
[INFO] [stdout]   |
[INFO] [stdout] 5 | use serde::{Deserialize, Serialize, Serializer};
[INFO] [stdout]   |                                     ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `find`
[INFO] [stdout]  --> src/model/article/mod.rs:6:30
[INFO] [stdout]   |
[INFO] [stdout] 6 | use super::{get, list, save, find,update,count,remove};
[INFO] [stdout]   |                              ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Cursor`, `bson::*`, `bson::oid::ObjectId`, `bson`
[INFO] [stdout]  --> src/model/tag/handler.rs:4:36
[INFO] [stdout]   |
[INFO] [stdout] 4 | use mongodb::{options::FindOptions,bson,bson::oid::ObjectId,bson::*,Cursor,bson::Document};
[INFO] [stdout]   |                                    ^^^^ ^^^^^^^^^^^^^^^^^^^ ^^^^^^^ ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Serializer`
[INFO] [stdout]  --> src/model/tag/mod.rs:4:37
[INFO] [stdout]   |
[INFO] [stdout] 4 | use serde::{Deserialize, Serialize, Serializer};
[INFO] [stdout]   |                                     ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `get`
[INFO] [stdout]  --> src/model/tag/mod.rs:5:13
[INFO] [stdout]   |
[INFO] [stdout] 5 | use super::{get, list, save, find, remove};
[INFO] [stdout]   |             ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Cursor`, `bson::Document`, `bson`, `options::FindOptions`
[INFO] [stdout]  --> src/model/tag/mod.rs:6:15
[INFO] [stdout]   |
[INFO] [stdout] 6 | use mongodb::{options::FindOptions, bson, bson::oid::ObjectId, bson::*, Cursor, bson::Document};
[INFO] [stdout]   |               ^^^^^^^^^^^^^^^^^^^^  ^^^^                                ^^^^^^  ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `anyhow::Result`
[INFO] [stdout]  --> src/model/tag/mod.rs:7:5
[INFO] [stdout]   |
[INFO] [stdout] 7 | use anyhow::Result;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `WebError`, `table`
[INFO] [stdout]  --> src/model/tag/mod.rs:9:35
[INFO] [stdout]   |
[INFO] [stdout] 9 | use crate::common::{IntoDocument, table, WebError};
[INFO] [stdout]   |                                   ^^^^^  ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Cursor`, `bson::*`, `bson::Document`, `bson::oid::ObjectId`, `bson`, `options::FindOptions`
[INFO] [stdout]  --> src/model/copyright/handler.rs:4:15
[INFO] [stdout]   |
[INFO] [stdout] 4 | use mongodb::{options::FindOptions,bson,bson::oid::ObjectId,bson::*,Cursor,bson::Document};
[INFO] [stdout]   |               ^^^^^^^^^^^^^^^^^^^^ ^^^^ ^^^^^^^^^^^^^^^^^^^ ^^^^^^^ ^^^^^^ ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `get`, `list`, `remove`
[INFO] [stdout]  --> src/model/copyright/mod.rs:3:13
[INFO] [stdout]   |
[INFO] [stdout] 3 | use super::{get, list, save, find, remove,update};
[INFO] [stdout]   |             ^^^  ^^^^              ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Serializer`
[INFO] [stdout]  --> src/model/copyright/mod.rs:4:37
[INFO] [stdout]   |
[INFO] [stdout] 4 | use serde::{Deserialize, Serialize, Serializer};
[INFO] [stdout]   |                                     ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `GLOBAL_CONF`, `MONGO`
[INFO] [stdout]  --> src/model/mod.rs:5:13
[INFO] [stdout]   |
[INFO] [stdout] 5 | use crate::{MONGO, GLOBAL_CONF};
[INFO] [stdout]   |             ^^^^^  ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `serde::de::DeserializeOwned`
[INFO] [stdout]  --> src/model/mod.rs:6:5
[INFO] [stdout]   |
[INFO] [stdout] 6 | use serde::de::DeserializeOwned;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Cursor`
[INFO] [stdout]   --> src/model/mod.rs:10:69
[INFO] [stdout]    |
[INFO] [stdout] 10 | use mongodb::{options::FindOptions,bson,bson::oid::ObjectId,bson::*,Cursor,bson::Document};
[INFO] [stdout]    |                                                                     ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `net::SocketAddr`
[INFO] [stdout]  --> src/template/mod.rs:6:32
[INFO] [stdout]   |
[INFO] [stdout] 6 | use std::{convert::Infallible, net::SocketAddr};
[INFO] [stdout]   |                                ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::model::article::Article`
[INFO] [stdout]  --> src/template/mod.rs:7:5
[INFO] [stdout]   |
[INFO] [stdout] 7 | use crate::model::article::Article;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::common`
[INFO] [stdout]  --> src/middleware/auth.rs:1:5
[INFO] [stdout]   |
[INFO] [stdout] 1 | use crate::common;
[INFO] [stdout]   |     ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `tower::Service`
[INFO] [stdout]  --> src/middleware/auth.rs:2:5
[INFO] [stdout]   |
[INFO] [stdout] 2 | use tower::Service;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Context`, `Poll`
[INFO] [stdout]  --> src/middleware/auth.rs:3:17
[INFO] [stdout]   |
[INFO] [stdout] 3 | use std::task::{Context, Poll};
[INFO] [stdout]   |                 ^^^^^^^  ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::io`
[INFO] [stdout]  --> src/middleware/auth.rs:4:5
[INFO] [stdout]   |
[INFO] [stdout] 4 | use std::io;
[INFO] [stdout]   |     ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `bytes::Bytes`
[INFO] [stdout]  --> src/middleware/auth.rs:5:5
[INFO] [stdout]   |
[INFO] [stdout] 5 | use bytes::Bytes;
[INFO] [stdout]   |     ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `HeaderValue`, `Request`, `StatusCode`, `Uri`, `header`
[INFO] [stdout]  --> src/middleware/auth.rs:6:12
[INFO] [stdout]   |
[INFO] [stdout] 6 | use http::{header, HeaderValue, StatusCode, Uri, Request};
[INFO] [stdout]   |            ^^^^^^  ^^^^^^^^^^^  ^^^^^^^^^^  ^^^  ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `BaseError`, `Claims`, `NEEDLOGIN_ERROR`, `Resp`
[INFO] [stdout]  --> src/middleware/auth.rs:7:59
[INFO] [stdout]   |
[INFO] [stdout] 7 | use crate::common::{WebError, HTTP_TOKEN_KEY, token_data, Claims, Resp, BaseError, NEEDLOGIN_ERROR};
[INFO] [stdout]   |                                                           ^^^^^^  ^^^^  ^^^^^^^^^  ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::future::Future`
[INFO] [stdout]  --> src/middleware/auth.rs:8:5
[INFO] [stdout]   |
[INFO] [stdout] 8 | use std::future::Future;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::pin::Pin`
[INFO] [stdout]  --> src/middleware/auth.rs:9:5
[INFO] [stdout]   |
[INFO] [stdout] 9 | use std::pin::Pin;
[INFO] [stdout]   |     ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `tower_http::auth::AuthorizeRequest`
[INFO] [stdout]   --> src/middleware/auth.rs:10:5
[INFO] [stdout]    |
[INFO] [stdout] 10 | use tower_http::auth::AuthorizeRequest;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `axum::Json`
[INFO] [stdout]   --> src/middleware/auth.rs:12:5
[INFO] [stdout]    |
[INFO] [stdout] 12 | use axum::Json;
[INFO] [stdout]    |     ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `HeaderMap`, `Response`
[INFO] [stdout]   --> src/middleware/auth.rs:13:18
[INFO] [stdout]    |
[INFO] [stdout] 13 | use axum::http::{HeaderMap, Response};
[INFO] [stdout]    |                  ^^^^^^^^^  ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `axum::body::Body`
[INFO] [stdout]   --> src/middleware/auth.rs:14:5
[INFO] [stdout]    |
[INFO] [stdout] 14 | use axum::body::Body;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `axum::response::IntoResponse`
[INFO] [stdout]   --> src/middleware/auth.rs:16:5
[INFO] [stdout]    |
[INFO] [stdout] 16 | use axum::response::IntoResponse;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `header::HeaderName`
[INFO] [stdout]  --> src/middleware/cors.rs:6:12
[INFO] [stdout]   |
[INFO] [stdout] 6 | use http::{header::HeaderName, Response};
[INFO] [stdout]   |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `fmt`
[INFO] [stdout]  --> src/middleware/cors.rs:8:5
[INFO] [stdout]   |
[INFO] [stdout] 8 |     fmt,
[INFO] [stdout]   |     ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `marker::PhantomData`
[INFO] [stdout]   --> src/middleware/cors.rs:12:27
[INFO] [stdout]    |
[INFO] [stdout] 12 | use std::{future::Future, marker::PhantomData};
[INFO] [stdout]    |                           ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `cors::*`
[INFO] [stdout]  --> src/middleware/mod.rs:3:5
[INFO] [stdout]   |
[INFO] [stdout] 3 | use cors::*;
[INFO] [stdout]   |     ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `http::StatusCode`
[INFO] [stdout]   --> src/main.rs:12:5
[INFO] [stdout]    |
[INFO] [stdout] 12 | use http::StatusCode;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `services::ServeDir`, `trace::TraceLayer`
[INFO] [stdout]   --> src/main.rs:14:18
[INFO] [stdout]    |
[INFO] [stdout] 14 | use tower_http::{services::ServeDir, trace::TraceLayer};
[INFO] [stdout]    |                  ^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `HtmlTemplate`
[INFO] [stdout]   --> src/main.rs:15:23
[INFO] [stdout]    |
[INFO] [stdout] 15 | use crate::template::{HtmlTemplate};
[INFO] [stdout]    |                       ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `tower::MakeService`
[INFO] [stdout]   --> src/main.rs:17:5
[INFO] [stdout]    |
[INFO] [stdout] 17 | use tower::MakeService;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `MONGO`
[INFO] [stdout]  --> src/controller/user.rs:1:13
[INFO] [stdout]   |
[INFO] [stdout] 1 | use crate::{MONGO, GLOBAL_CONF};
[INFO] [stdout]   |             ^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `#[warn(unused_imports)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `axum::extract::Extension`
[INFO] [stdout]  --> src/controller/user.rs:3:5
[INFO] [stdout]   |
[INFO] [stdout] 3 | use axum::extract::Extension;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `http::StatusCode`
[INFO] [stdout]  --> src/controller/user.rs:4:5
[INFO] [stdout]   |
[INFO] [stdout] 4 | use http::StatusCode;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `GLOBAL_CONF`, `MONGO`
[INFO] [stdout]  --> src/controller/tag.rs:1:13
[INFO] [stdout]   |
[INFO] [stdout] 1 | use crate::{MONGO, GLOBAL_CONF};
[INFO] [stdout]   |             ^^^^^  ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::model::user::*`
[INFO] [stdout]  --> src/controller/tag.rs:2:5
[INFO] [stdout]   |
[INFO] [stdout] 2 | use crate::model::user::*;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `axum::extract::Extension`
[INFO] [stdout]  --> src/controller/tag.rs:3:5
[INFO] [stdout]   |
[INFO] [stdout] 3 | use axum::extract::Extension;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `http::StatusCode`
[INFO] [stdout]  --> src/controller/tag.rs:4:5
[INFO] [stdout]   |
[INFO] [stdout] 4 | use http::StatusCode;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Claims`, `generate_token`
[INFO] [stdout]  --> src/controller/tag.rs:6:48
[INFO] [stdout]   |
[INFO] [stdout] 6 | use crate::common::{Resp, OK, WebError, OKMSG, Claims, generate_token};
[INFO] [stdout]   |                                                ^^^^^^  ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::future::Future`
[INFO] [stdout]   --> src/controller/tag.rs:10:5
[INFO] [stdout]    |
[INFO] [stdout] 10 | use std::future::Future;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused doc comment
[INFO] [stdout]   --> src/controller/tag.rs:43:14
[INFO] [stdout]    |
[INFO] [stdout] 43 |              /// No data can be added
[INFO] [stdout]    |              ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 44 |             let mut t =  Tag::new();
[INFO] [stdout]    |             ------------------------ rustdoc does not generate documentation for statements
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_doc_comments)]` on by default
[INFO] [stdout]    = help: use `//` for a plain comment
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused doc comment
[INFO] [stdout]   --> src/controller/tag.rs:77:5
[INFO] [stdout]    |
[INFO] [stdout] 77 |       /// Later, the tag in the article needs to be deleted synchronously
[INFO] [stdout]    |       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 78 | /     match del_tag_in_db(&TagInfo.id).await {
[INFO] [stdout] 79 | |         Ok(r)=>{
[INFO] [stdout] 80 | |             Ok(Resp {
[INFO] [stdout] 81 | |                 code: OK,
[INFO] [stdout] ...  |
[INFO] [stdout] 90 | |         }
[INFO] [stdout] 91 | |     }
[INFO] [stdout]    | |_____- rustdoc does not generate documentation for expressions
[INFO] [stdout]    |
[INFO] [stdout]    = help: use `//` for a plain comment
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `chrono::Local`
[INFO] [stdout]  --> src/controller/article.rs:5:5
[INFO] [stdout]   |
[INFO] [stdout] 5 | use chrono::Local;
[INFO] [stdout]   |     ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused doc comment
[INFO] [stdout]   --> src/controller/article.rs:38:13
[INFO] [stdout]    |
[INFO] [stdout] 38 |               ///新增
[INFO] [stdout]    |               ^^^^^^^
[INFO] [stdout] 39 | /             match save_article(&newArt).await {
[INFO] [stdout] 40 | |                 Ok(r) => {
[INFO] [stdout] 41 | |                     newArt.id = Some(r);
[INFO] [stdout] 42 | |                     Ok(Resp {
[INFO] [stdout] ...  |
[INFO] [stdout] 52 | |                 }
[INFO] [stdout] 53 | |             }
[INFO] [stdout]    | |_____________- rustdoc does not generate documentation for expressions
[INFO] [stdout]    |
[INFO] [stdout]    = help: use `//` for a plain comment
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `ArticleRenderTag`, `Empty404Template`
[INFO] [stdout]  --> src/controller/render.rs:2:60
[INFO] [stdout]   |
[INFO] [stdout] 2 | ...ticleListRenderItem, ArticleRenderTag, BlogTemplate, TagRender, FriendshipLink, ArticleTemplate, Empty404Template};
[INFO] [stdout]   |                         ^^^^^^^^^^^^^^^^                                                            ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `DateTime`, `Local`, `NaiveDateTime`, `TimeZone`, `Utc`
[INFO] [stdout]  --> src/controller/render.rs:4:14
[INFO] [stdout]   |
[INFO] [stdout] 4 | use chrono::{DateTime, Local, TimeZone, NaiveDateTime, Utc};
[INFO] [stdout]   |              ^^^^^^^^  ^^^^^  ^^^^^^^^  ^^^^^^^^^^^^^  ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Path`
[INFO] [stdout]  --> src/controller/render.rs:5:21
[INFO] [stdout]   |
[INFO] [stdout] 5 | use axum::extract::{Path, Query};
[INFO] [stdout]   |                     ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `axum::http::Request`
[INFO] [stdout]  --> src/controller/render.rs:7:5
[INFO] [stdout]   |
[INFO] [stdout] 7 | use axum::http::Request;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `axum::body::Body`
[INFO] [stdout]  --> src/controller/render.rs:8:5
[INFO] [stdout]   |
[INFO] [stdout] 8 | use axum::body::Body;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `rand::Rng`
[INFO] [stdout]   --> src/controller/render.rs:13:5
[INFO] [stdout]    |
[INFO] [stdout] 13 | use rand::Rng;
[INFO] [stdout]    |     ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary parentheses around method argument
[INFO] [stdout]   --> src/controller/render.rs:76:24
[INFO] [stdout]    |
[INFO] [stdout] 76 |         page_list.push((i + 1));
[INFO] [stdout]    |                        ^^^^^^^ help: remove these parentheses
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_parens)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused doc comment
[INFO] [stdout]    --> src/controller/render.rs:113:17
[INFO] [stdout]     |
[INFO] [stdout] 113 |                   ///过滤 Life tag 这个留给 life 栏目用的
[INFO] [stdout]     |                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 114 | 
[INFO] [stdout] 115 | /                 alltags.push(TagRender {
[INFO] [stdout] 116 | |                     name,
[INFO] [stdout] 117 | |                     select,
[INFO] [stdout] 118 | |                 })
[INFO] [stdout]     | |__________________- rustdoc does not generate documentation for expressions
[INFO] [stdout]     |
[INFO] [stdout]     = help: use `//` for a plain comment
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused doc comment
[INFO] [stdout]    --> src/controller/render.rs:255:5
[INFO] [stdout]     |
[INFO] [stdout] 255 |     ///生成推荐内容
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^
[INFO] [stdout] 256 |     let mut recommend_article: Vec<ArticleListRenderItem> = Vec::new();
[INFO] [stdout]     |     ------------------------------------------------------------------- rustdoc does not generate documentation for statements
[INFO] [stdout]     |
[INFO] [stdout]     = help: use `//` for a plain comment
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused doc comment
[INFO] [stdout]    --> src/controller/render.rs:259:5
[INFO] [stdout]     |
[INFO] [stdout] 259 |       ///获取相关tag的推荐
[INFO] [stdout]     |       ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 260 | /     if !tags.is_empty() {
[INFO] [stdout] 261 | |         let taglength = tags.len();
[INFO] [stdout] 262 | |         let get_item_number = max_rec_item / taglength;
[INFO] [stdout] 263 | |         for x in tags {
[INFO] [stdout] ...   |
[INFO] [stdout] 294 | |         }
[INFO] [stdout] 295 | |     }
[INFO] [stdout]     | |_____- rustdoc does not generate documentation for expressions
[INFO] [stdout]     |
[INFO] [stdout]     = help: use `//` for a plain comment
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Serializer`
[INFO] [stdout]  --> src/controller/copyright.rs:8:37
[INFO] [stdout]   |
[INFO] [stdout] 8 | use serde::{Deserialize, Serialize, Serializer};
[INFO] [stdout]   |                                     ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused doc comment
[INFO] [stdout]   --> src/controller/copyright.rs:26:13
[INFO] [stdout]    |
[INFO] [stdout] 26 |             /// Create a return
[INFO] [stdout]    |             ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 27 |             let mut copy = Copyright::new();
[INFO] [stdout]    |             -------------------------------- rustdoc does not generate documentation for statements
[INFO] [stdout]    |
[INFO] [stdout]    = help: use `//` for a plain comment
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::any::TypeId`
[INFO] [stdout]  --> src/common/common.rs:3:5
[INFO] [stdout]   |
[INFO] [stdout] 3 | use std::any::TypeId;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Display`, `Error`, `Formatter`
[INFO] [stdout]  --> src/common/common.rs:4:16
[INFO] [stdout]   |
[INFO] [stdout] 4 | use std::fmt::{Display, Formatter, Error};
[INFO] [stdout]   |                ^^^^^^^  ^^^^^^^^^  ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `bson::document`
[INFO] [stdout]  --> src/common/common.rs:5:27
[INFO] [stdout]   |
[INFO] [stdout] 5 | use mongodb::{Collection, bson::document, bson, bson::Document};
[INFO] [stdout]   |                           ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `StdError`
[INFO] [stdout]  --> src/common/common.rs:7:35
[INFO] [stdout]   |
[INFO] [stdout] 7 | use serde::de::{DeserializeOwned, StdError};
[INFO] [stdout]   |                                   ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `MONGO`
[INFO] [stdout]  --> src/common/token.rs:2:13
[INFO] [stdout]   |
[INFO] [stdout] 2 | use crate::{MONGO, GLOBAL_CONF};
[INFO] [stdout]   |             ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `errors::Error`
[INFO] [stdout]  --> src/common/token.rs:3:75
[INFO] [stdout]   |
[INFO] [stdout] 3 | use jsonwebtoken::{decode, TokenData, Algorithm, DecodingKey, Validation, errors::Error, encode, EncodingKey, Header};
[INFO] [stdout]   |                                                                           ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `HtmlTemplate`
[INFO] [stdout]  --> src/router.rs:7:24
[INFO] [stdout]   |
[INFO] [stdout] 7 | use crate::template::{ HtmlTemplate};
[INFO] [stdout]   |                        ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `axum::body::Body`
[INFO] [stdout]   --> src/router.rs:11:5
[INFO] [stdout]    |
[INFO] [stdout] 11 | use axum::body::Body;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `tower_http::auth::RequireAuthorizationLayer`
[INFO] [stdout]   --> src/router.rs:13:5
[INFO] [stdout]    |
[INFO] [stdout] 13 | use tower_http::auth::RequireAuthorizationLayer;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `extract`
[INFO] [stdout]   --> src/router.rs:16:12
[INFO] [stdout]    |
[INFO] [stdout] 16 | use axum::{extract, Router, service};
[INFO] [stdout]    |            ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `tower_http::set_header::SetResponseHeaderLayer`
[INFO] [stdout]   --> src/router.rs:18:5
[INFO] [stdout]    |
[INFO] [stdout] 18 | use tower_http::set_header::SetResponseHeaderLayer;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `HeaderValue`, `header`
[INFO] [stdout]   --> src/router.rs:19:12
[INFO] [stdout]    |
[INFO] [stdout] 19 | use http::{HeaderValue, header};
[INFO] [stdout]    |            ^^^^^^^^^^^  ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `ServiceBuilder`
[INFO] [stdout]   --> src/router.rs:20:13
[INFO] [stdout]    |
[INFO] [stdout] 20 | use tower::{ServiceBuilder};
[INFO] [stdout]    |             ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Html`
[INFO] [stdout]   --> src/router.rs:22:43
[INFO] [stdout]    |
[INFO] [stdout] 22 | use axum::{handler::{Handler}, response::{Html}, };
[INFO] [stdout]    |                                           ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `super::*`
[INFO] [stdout]   --> src/model/user/handler.rs:29:9
[INFO] [stdout]    |
[INFO] [stdout] 29 |     use super::*;
[INFO] [stdout]    |         ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Serializer`
[INFO] [stdout]  --> src/model/user/mod.rs:4:37
[INFO] [stdout]   |
[INFO] [stdout] 4 | use serde::{Deserialize, Serialize, Serializer};
[INFO] [stdout]   |                                     ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `get`, `list`
[INFO] [stdout]  --> src/model/user/mod.rs:5:13
[INFO] [stdout]   |
[INFO] [stdout] 5 | use super::{get, list, save,find,update};
[INFO] [stdout]   |             ^^^  ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Cursor`, `bson::oid::ObjectId`, `bson`
[INFO] [stdout]  --> src/model/article/handler.rs:4:36
[INFO] [stdout]   |
[INFO] [stdout] 4 | use mongodb::{options::FindOptions,bson,bson::oid::ObjectId,bson::*,Cursor,bson::Document};
[INFO] [stdout]   |                                    ^^^^ ^^^^^^^^^^^^^^^^^^^         ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary parentheses around function argument
[INFO] [stdout]   --> src/model/article/handler.rs:54:24
[INFO] [stdout]    |
[INFO] [stdout] 54 |     option.skip = Some((page_number*(page_size as u64)));
[INFO] [stdout]    |                        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: remove these parentheses
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Serializer`
[INFO] [stdout]  --> src/model/article/mod.rs:5:37
[INFO] [stdout]   |
[INFO] [stdout] 5 | use serde::{Deserialize, Serialize, Serializer};
[INFO] [stdout]   |                                     ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `find`
[INFO] [stdout]  --> src/model/article/mod.rs:6:30
[INFO] [stdout]   |
[INFO] [stdout] 6 | use super::{get, list, save, find,update,count,remove};
[INFO] [stdout]   |                              ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Cursor`, `bson::*`, `bson::oid::ObjectId`, `bson`
[INFO] [stdout]  --> src/model/tag/handler.rs:4:36
[INFO] [stdout]   |
[INFO] [stdout] 4 | use mongodb::{options::FindOptions,bson,bson::oid::ObjectId,bson::*,Cursor,bson::Document};
[INFO] [stdout]   |                                    ^^^^ ^^^^^^^^^^^^^^^^^^^ ^^^^^^^ ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Serializer`
[INFO] [stdout]  --> src/model/tag/mod.rs:4:37
[INFO] [stdout]   |
[INFO] [stdout] 4 | use serde::{Deserialize, Serialize, Serializer};
[INFO] [stdout]   |                                     ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `get`
[INFO] [stdout]  --> src/model/tag/mod.rs:5:13
[INFO] [stdout]   |
[INFO] [stdout] 5 | use super::{get, list, save, find, remove};
[INFO] [stdout]   |             ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Cursor`, `bson::Document`, `bson`, `options::FindOptions`
[INFO] [stdout]  --> src/model/tag/mod.rs:6:15
[INFO] [stdout]   |
[INFO] [stdout] 6 | use mongodb::{options::FindOptions, bson, bson::oid::ObjectId, bson::*, Cursor, bson::Document};
[INFO] [stdout]   |               ^^^^^^^^^^^^^^^^^^^^  ^^^^                                ^^^^^^  ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `anyhow::Result`
[INFO] [stdout]  --> src/model/tag/mod.rs:7:5
[INFO] [stdout]   |
[INFO] [stdout] 7 | use anyhow::Result;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `WebError`, `table`
[INFO] [stdout]  --> src/model/tag/mod.rs:9:35
[INFO] [stdout]   |
[INFO] [stdout] 9 | use crate::common::{IntoDocument, table, WebError};
[INFO] [stdout]   |                                   ^^^^^  ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Cursor`, `bson::*`, `bson::Document`, `bson::oid::ObjectId`, `bson`, `options::FindOptions`
[INFO] [stdout]  --> src/model/copyright/handler.rs:4:15
[INFO] [stdout]   |
[INFO] [stdout] 4 | use mongodb::{options::FindOptions,bson,bson::oid::ObjectId,bson::*,Cursor,bson::Document};
[INFO] [stdout]   |               ^^^^^^^^^^^^^^^^^^^^ ^^^^ ^^^^^^^^^^^^^^^^^^^ ^^^^^^^ ^^^^^^ ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `get`, `list`, `remove`
[INFO] [stdout]  --> src/model/copyright/mod.rs:3:13
[INFO] [stdout]   |
[INFO] [stdout] 3 | use super::{get, list, save, find, remove,update};
[INFO] [stdout]   |             ^^^  ^^^^              ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Serializer`
[INFO] [stdout]  --> src/model/copyright/mod.rs:4:37
[INFO] [stdout]   |
[INFO] [stdout] 4 | use serde::{Deserialize, Serialize, Serializer};
[INFO] [stdout]   |                                     ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `GLOBAL_CONF`, `MONGO`
[INFO] [stdout]  --> src/model/mod.rs:5:13
[INFO] [stdout]   |
[INFO] [stdout] 5 | use crate::{MONGO, GLOBAL_CONF};
[INFO] [stdout]   |             ^^^^^  ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `serde::de::DeserializeOwned`
[INFO] [stdout]  --> src/model/mod.rs:6:5
[INFO] [stdout]   |
[INFO] [stdout] 6 | use serde::de::DeserializeOwned;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Cursor`
[INFO] [stdout]   --> src/model/mod.rs:10:69
[INFO] [stdout]    |
[INFO] [stdout] 10 | use mongodb::{options::FindOptions,bson,bson::oid::ObjectId,bson::*,Cursor,bson::Document};
[INFO] [stdout]    |                                                                     ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `net::SocketAddr`
[INFO] [stdout]  --> src/template/mod.rs:6:32
[INFO] [stdout]   |
[INFO] [stdout] 6 | use std::{convert::Infallible, net::SocketAddr};
[INFO] [stdout]   |                                ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::model::article::Article`
[INFO] [stdout]  --> src/template/mod.rs:7:5
[INFO] [stdout]   |
[INFO] [stdout] 7 | use crate::model::article::Article;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::common`
[INFO] [stdout]  --> src/middleware/auth.rs:1:5
[INFO] [stdout]   |
[INFO] [stdout] 1 | use crate::common;
[INFO] [stdout]   |     ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `tower::Service`
[INFO] [stdout]  --> src/middleware/auth.rs:2:5
[INFO] [stdout]   |
[INFO] [stdout] 2 | use tower::Service;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Context`, `Poll`
[INFO] [stdout]  --> src/middleware/auth.rs:3:17
[INFO] [stdout]   |
[INFO] [stdout] 3 | use std::task::{Context, Poll};
[INFO] [stdout]   |                 ^^^^^^^  ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::io`
[INFO] [stdout]  --> src/middleware/auth.rs:4:5
[INFO] [stdout]   |
[INFO] [stdout] 4 | use std::io;
[INFO] [stdout]   |     ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `bytes::Bytes`
[INFO] [stdout]  --> src/middleware/auth.rs:5:5
[INFO] [stdout]   |
[INFO] [stdout] 5 | use bytes::Bytes;
[INFO] [stdout]   |     ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `HeaderValue`, `Request`, `StatusCode`, `Uri`, `header`
[INFO] [stdout]  --> src/middleware/auth.rs:6:12
[INFO] [stdout]   |
[INFO] [stdout] 6 | use http::{header, HeaderValue, StatusCode, Uri, Request};
[INFO] [stdout]   |            ^^^^^^  ^^^^^^^^^^^  ^^^^^^^^^^  ^^^  ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `BaseError`, `Claims`, `NEEDLOGIN_ERROR`, `Resp`
[INFO] [stdout]  --> src/middleware/auth.rs:7:59
[INFO] [stdout]   |
[INFO] [stdout] 7 | use crate::common::{WebError, HTTP_TOKEN_KEY, token_data, Claims, Resp, BaseError, NEEDLOGIN_ERROR};
[INFO] [stdout]   |                                                           ^^^^^^  ^^^^  ^^^^^^^^^  ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::future::Future`
[INFO] [stdout]  --> src/middleware/auth.rs:8:5
[INFO] [stdout]   |
[INFO] [stdout] 8 | use std::future::Future;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::pin::Pin`
[INFO] [stdout]  --> src/middleware/auth.rs:9:5
[INFO] [stdout]   |
[INFO] [stdout] 9 | use std::pin::Pin;
[INFO] [stdout]   |     ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `tower_http::auth::AuthorizeRequest`
[INFO] [stdout]   --> src/middleware/auth.rs:10:5
[INFO] [stdout]    |
[INFO] [stdout] 10 | use tower_http::auth::AuthorizeRequest;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `axum::Json`
[INFO] [stdout]   --> src/middleware/auth.rs:12:5
[INFO] [stdout]    |
[INFO] [stdout] 12 | use axum::Json;
[INFO] [stdout]    |     ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `HeaderMap`, `Response`
[INFO] [stdout]   --> src/middleware/auth.rs:13:18
[INFO] [stdout]    |
[INFO] [stdout] 13 | use axum::http::{HeaderMap, Response};
[INFO] [stdout]    |                  ^^^^^^^^^  ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `axum::body::Body`
[INFO] [stdout]   --> src/middleware/auth.rs:14:5
[INFO] [stdout]    |
[INFO] [stdout] 14 | use axum::body::Body;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `axum::response::IntoResponse`
[INFO] [stdout]   --> src/middleware/auth.rs:16:5
[INFO] [stdout]    |
[INFO] [stdout] 16 | use axum::response::IntoResponse;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `header::HeaderName`
[INFO] [stdout]  --> src/middleware/cors.rs:6:12
[INFO] [stdout]   |
[INFO] [stdout] 6 | use http::{header::HeaderName, Response};
[INFO] [stdout]   |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `fmt`
[INFO] [stdout]  --> src/middleware/cors.rs:8:5
[INFO] [stdout]   |
[INFO] [stdout] 8 |     fmt,
[INFO] [stdout]   |     ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `marker::PhantomData`
[INFO] [stdout]   --> src/middleware/cors.rs:12:27
[INFO] [stdout]    |
[INFO] [stdout] 12 | use std::{future::Future, marker::PhantomData};
[INFO] [stdout]    |                           ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `cors::*`
[INFO] [stdout]  --> src/middleware/mod.rs:3:5
[INFO] [stdout]   |
[INFO] [stdout] 3 | use cors::*;
[INFO] [stdout]   |     ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `http::StatusCode`
[INFO] [stdout]   --> src/main.rs:12:5
[INFO] [stdout]    |
[INFO] [stdout] 12 | use http::StatusCode;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `services::ServeDir`, `trace::TraceLayer`
[INFO] [stdout]   --> src/main.rs:14:18
[INFO] [stdout]    |
[INFO] [stdout] 14 | use tower_http::{services::ServeDir, trace::TraceLayer};
[INFO] [stdout]    |                  ^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `HtmlTemplate`
[INFO] [stdout]   --> src/main.rs:15:23
[INFO] [stdout]    |
[INFO] [stdout] 15 | use crate::template::{HtmlTemplate};
[INFO] [stdout]    |                       ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `tower::MakeService`
[INFO] [stdout]   --> src/main.rs:17:5
[INFO] [stdout]    |
[INFO] [stdout] 17 | use tower::MakeService;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/model/tag/handler.rs:42:9
[INFO] [stdout]    |
[INFO] [stdout] 42 |     let mut option = FindOptions::default();
[INFO] [stdout]    |         ----^^^^^^
[INFO] [stdout]    |         |
[INFO] [stdout]    |         help: remove this `mut`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_mut)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/model/tag/handler.rs:43:9
[INFO] [stdout]    |
[INFO] [stdout] 43 |     let mut fiter: Document = doc! {
[INFO] [stdout]    |         ----^^^^^
[INFO] [stdout]    |         |
[INFO] [stdout]    |         help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/model/article/handler.rs:26:9
[INFO] [stdout]    |
[INFO] [stdout] 26 |     let mut option = CountOptions::default();
[INFO] [stdout]    |         ----^^^^^^
[INFO] [stdout]    |         |
[INFO] [stdout]    |         help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/model/mod.rs:41:9
[INFO] [stdout]    |
[INFO] [stdout] 41 |     let mut count =   table(table_name).count_documents(filter, Some(find_options)).await?;
[INFO] [stdout]    |         ----^^^^^
[INFO] [stdout]    |         |
[INFO] [stdout]    |         help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/model/tag/handler.rs:42:9
[INFO] [stdout]    |
[INFO] [stdout] 42 |     let mut option = FindOptions::default();
[INFO] [stdout]    |         ----^^^^^^
[INFO] [stdout]    |         |
[INFO] [stdout]    |         help: remove this `mut`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_mut)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/model/tag/handler.rs:43:9
[INFO] [stdout]    |
[INFO] [stdout] 43 |     let mut fiter: Document = doc! {
[INFO] [stdout]    |         ----^^^^^
[INFO] [stdout]    |         |
[INFO] [stdout]    |         help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/model/article/handler.rs:26:9
[INFO] [stdout]    |
[INFO] [stdout] 26 |     let mut option = CountOptions::default();
[INFO] [stdout]    |         ----^^^^^^
[INFO] [stdout]    |         |
[INFO] [stdout]    |         help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/model/mod.rs:41:9
[INFO] [stdout]    |
[INFO] [stdout] 41 |     let mut count =   table(table_name).count_documents(filter, Some(find_options)).await?;
[INFO] [stdout]    |         ----^^^^^
[INFO] [stdout]    |         |
[INFO] [stdout]    |         help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `futures::FutureExt`
[INFO] [stdout]   --> src/router.rs:14:5
[INFO] [stdout]    |
[INFO] [stdout] 14 | use futures::FutureExt;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `auth`
[INFO] [stdout]   --> src/controller/user.rs:60:5
[INFO] [stdout]    |
[INFO] [stdout] 60 |     auth: BlogAuth,
[INFO] [stdout]    |     ^^^^ help: if this is intentional, prefix it with an underscore: `_auth`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_variables)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `auth`
[INFO] [stdout]   --> src/controller/user.rs:89:5
[INFO] [stdout]    |
[INFO] [stdout] 89 |     auth: BlogAuth,
[INFO] [stdout]    |     ^^^^ help: if this is intentional, prefix it with an underscore: `_auth`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `auth`
[INFO] [stdout]    --> src/controller/user.rs:104:5
[INFO] [stdout]     |
[INFO] [stdout] 104 |     auth: BlogAuth,
[INFO] [stdout]     |     ^^^^ help: if this is intentional, prefix it with an underscore: `_auth`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `auth`
[INFO] [stdout]   --> src/controller/tag.rs:16:5
[INFO] [stdout]    |
[INFO] [stdout] 16 |     auth: BlogAuth,
[INFO] [stdout]    |     ^^^^ help: if this is intentional, prefix it with an underscore: `_auth`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `e`
[INFO] [stdout]   --> src/controller/tag.rs:26:13
[INFO] [stdout]    |
[INFO] [stdout] 26 |         Err(e) => {
[INFO] [stdout]    |             ^ help: if this is intentional, prefix it with an underscore: `_e`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `e`
[INFO] [stdout]   --> src/controller/tag.rs:42:14
[INFO] [stdout]    |
[INFO] [stdout] 42 |          Err(e)=>{
[INFO] [stdout]    |              ^ help: if this is intentional, prefix it with an underscore: `_e`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `e`
[INFO] [stdout]   --> src/controller/tag.rs:59:22
[INFO] [stdout]    |
[INFO] [stdout] 59 |                  Err(e)=>{
[INFO] [stdout]    |                      ^ help: if this is intentional, prefix it with an underscore: `_e`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `auth`
[INFO] [stdout]   --> src/controller/tag.rs:76:22
[INFO] [stdout]    |
[INFO] [stdout] 76 | pub async fn del_tag(auth: BlogAuth,Json(TagInfo): Json<DelTagInfo>)-> Result<Resp<u64>,WebError>{
[INFO] [stdout]    |                      ^^^^ help: if this is intentional, prefix it with an underscore: `_auth`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `auth`
[INFO] [stdout]   --> src/controller/tag.rs:99:25
[INFO] [stdout]    |
[INFO] [stdout] 99 | pub async fn search_tag(auth: BlogAuth,Json(searchInfo): Json<SearchTagInfo>) -> Result<Resp<Vec<Tag>>,WebError>{
[INFO] [stdout]    |                         ^^^^ help: if this is intentional, prefix it with an underscore: `_auth`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `r`
[INFO] [stdout]   --> src/controller/article.rs:23:20
[INFO] [stdout]    |
[INFO] [stdout] 23 |                 Ok(r) => {
[INFO] [stdout]    |                    ^ help: if this is intentional, prefix it with an underscore: `_r`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `auth`
[INFO] [stdout]   --> src/controller/article.rs:72:29
[INFO] [stdout]    |
[INFO] [stdout] 72 | pub async fn search_article(auth: BlogAuth, Json(searchInfo): Json<SearchArticleInfo>) -> Result<Resp<SearchArticleResponse>, WebError> {
[INFO] [stdout]    |                             ^^^^ help: if this is intentional, prefix it with an underscore: `_auth`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `e`
[INFO] [stdout]   --> src/controller/article.rs:92:13
[INFO] [stdout]    |
[INFO] [stdout] 92 |         Err(e)=>{
[INFO] [stdout]    |             ^ help: if this is intentional, prefix it with an underscore: `_e`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `auth`
[INFO] [stdout]    --> src/controller/article.rs:119:27
[INFO] [stdout]     |
[INFO] [stdout] 119 | pub async fn find_article(auth: BlogAuth,Json(findInfo): Json<FindArticleInfo>)-> Result<Resp<Article>, WebError>{
[INFO] [stdout]     |                           ^^^^ help: if this is intentional, prefix it with an underscore: `_auth`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `auth`
[INFO] [stdout]    --> src/controller/article.rs:136:26
[INFO] [stdout]     |
[INFO] [stdout] 136 | pub async fn del_article(auth: BlogAuth,Json(findInfo): Json<FindArticleInfo>)-> Result<Resp<u64>, WebError>{
[INFO] [stdout]     |                          ^^^^ help: if this is intentional, prefix it with an underscore: `_auth`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `e`
[INFO] [stdout]   --> src/controller/render.rs:36:13
[INFO] [stdout]    |
[INFO] [stdout] 36 |         Err(e) => {}
[INFO] [stdout]    |             ^ help: if this is intentional, prefix it with an underscore: `_e`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `e`
[INFO] [stdout]   --> src/controller/render.rs:52:13
[INFO] [stdout]    |
[INFO] [stdout] 52 |         Err(e) => {
[INFO] [stdout]    |             ^ help: if this is intentional, prefix it with an underscore: `_e`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `e`
[INFO] [stdout]   --> src/controller/render.rs:63:13
[INFO] [stdout]    |
[INFO] [stdout] 63 |         Err(e) => {}
[INFO] [stdout]    |             ^ help: if this is intentional, prefix it with an underscore: `_e`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `e`
[INFO] [stdout]    --> src/controller/render.rs:121:13
[INFO] [stdout]     |
[INFO] [stdout] 121 |         Err(e) => {}
[INFO] [stdout]     |             ^ help: if this is intentional, prefix it with an underscore: `_e`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `e`
[INFO] [stdout]    --> src/controller/render.rs:158:13
[INFO] [stdout]     |
[INFO] [stdout] 158 |         Err(e) => {}
[INFO] [stdout]     |             ^ help: if this is intentional, prefix it with an underscore: `_e`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable `tags` is assigned to, but never used
[INFO] [stdout]    --> src/controller/render.rs:190:13
[INFO] [stdout]     |
[INFO] [stdout] 190 |     let mut tags: Vec<ArticleTag> = Vec::new();
[INFO] [stdout]     |             ^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: consider using `_tags` instead
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: value assigned to `tags` is never read
[INFO] [stdout]    --> src/controller/render.rs:200:21
[INFO] [stdout]     |
[INFO] [stdout] 200 |                     tags = t;
[INFO] [stdout]     |                     ^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_assignments)]` on by default
[INFO] [stdout]     = help: maybe it is overwritten before being read?
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `e`
[INFO] [stdout]    --> src/controller/render.rs:205:13
[INFO] [stdout]     |
[INFO] [stdout] 205 |         Err(e) => {}
[INFO] [stdout]     |             ^ help: if this is intentional, prefix it with an underscore: `_e`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `e`
[INFO] [stdout]    --> src/controller/render.rs:225:13
[INFO] [stdout]     |
[INFO] [stdout] 225 |         Err(e) => {}
[INFO] [stdout]     |             ^ help: if this is intentional, prefix it with an underscore: `_e`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `get_item_number`
[INFO] [stdout]    --> src/controller/render.rs:262:13
[INFO] [stdout]     |
[INFO] [stdout] 262 |         let get_item_number = max_rec_item / taglength;
[INFO] [stdout]     |             ^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_get_item_number`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `e`
[INFO] [stdout]    --> src/controller/render.rs:270:21
[INFO] [stdout]     |
[INFO] [stdout] 270 |                 Err(e) => {}
[INFO] [stdout]     |                     ^ help: if this is intentional, prefix it with an underscore: `_e`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: value assigned to `maxget_article_number` is never read
[INFO] [stdout]    --> src/controller/render.rs:279:21
[INFO] [stdout]     |
[INFO] [stdout] 279 |             let mut maxget_article_number = 0;
[INFO] [stdout]     |                     ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = help: maybe it is overwritten before being read?
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `auth`
[INFO] [stdout]   --> src/controller/copyright.rs:13:5
[INFO] [stdout]    |
[INFO] [stdout] 13 |     auth: BlogAuth,
[INFO] [stdout]    |     ^^^^ help: if this is intentional, prefix it with an underscore: `_auth`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `e`
[INFO] [stdout]   --> src/controller/copyright.rs:25:13
[INFO] [stdout]    |
[INFO] [stdout] 25 |         Err(e) => {
[INFO] [stdout]    |             ^ help: if this is intentional, prefix it with an underscore: `_e`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `auth`
[INFO] [stdout]   --> src/controller/copyright.rs:56:37
[INFO] [stdout]    |
[INFO] [stdout] 56 | pub async fn save_copyright_content(auth: BlogAuth,Json(contentInfo): Json<CopyrightContentInfo>)->Result<Resp<Copyright>, WebError>{
[INFO] [stdout]    |                                     ^^^^ help: if this is intentional, prefix it with an underscore: `_auth`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `d`
[INFO] [stdout]   --> src/controller/copyright.rs:66:20
[INFO] [stdout]    |
[INFO] [stdout] 66 |                 Ok(d) => {
[INFO] [stdout]    |                    ^ help: if this is intentional, prefix it with an underscore: `_d`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `e`
[INFO] [stdout]    --> src/common/common.rs:237:21
[INFO] [stdout]     |
[INFO] [stdout] 237 |                 Err(e)=>{
[INFO] [stdout]     |                     ^ help: if this is intentional, prefix it with an underscore: `_e`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `e`
[INFO] [stdout]   --> src/middleware/auth.rs:41:40
[INFO] [stdout]    |
[INFO] [stdout] 41 | ...                   Err(e)=>Err(WebError::LoginAuthFailedError)
[INFO] [stdout]    |                           ^ help: if this is intentional, prefix it with an underscore: `_e`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `e`
[INFO] [stdout]   --> src/middleware/auth.rs:44:33
[INFO] [stdout]    |
[INFO] [stdout] 44 | ...                   Err(e)=>Err(WebError::LoginAuthFailedError)
[INFO] [stdout]    |                           ^ help: if this is intentional, prefix it with an underscore: `_e`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `e`
[INFO] [stdout]   --> src/middleware/auth.rs:47:25
[INFO] [stdout]    |
[INFO] [stdout] 47 |                     Err(e)=> Err(WebError::LoginAuthFailedError)
[INFO] [stdout]    |                         ^ help: if this is intentional, prefix it with an underscore: `_e`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `futures::FutureExt`
[INFO] [stdout]   --> src/router.rs:14:5
[INFO] [stdout]    |
[INFO] [stdout] 14 | use futures::FutureExt;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `auth`
[INFO] [stdout]   --> src/controller/user.rs:60:5
[INFO] [stdout]    |
[INFO] [stdout] 60 |     auth: BlogAuth,
[INFO] [stdout]    |     ^^^^ help: if this is intentional, prefix it with an underscore: `_auth`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_variables)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `auth`
[INFO] [stdout]   --> src/controller/user.rs:89:5
[INFO] [stdout]    |
[INFO] [stdout] 89 |     auth: BlogAuth,
[INFO] [stdout]    |     ^^^^ help: if this is intentional, prefix it with an underscore: `_auth`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `auth`
[INFO] [stdout]    --> src/controller/user.rs:104:5
[INFO] [stdout]     |
[INFO] [stdout] 104 |     auth: BlogAuth,
[INFO] [stdout]     |     ^^^^ help: if this is intentional, prefix it with an underscore: `_auth`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `auth`
[INFO] [stdout]   --> src/controller/tag.rs:16:5
[INFO] [stdout]    |
[INFO] [stdout] 16 |     auth: BlogAuth,
[INFO] [stdout]    |     ^^^^ help: if this is intentional, prefix it with an underscore: `_auth`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `e`
[INFO] [stdout]   --> src/controller/tag.rs:26:13
[INFO] [stdout]    |
[INFO] [stdout] 26 |         Err(e) => {
[INFO] [stdout]    |             ^ help: if this is intentional, prefix it with an underscore: `_e`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `e`
[INFO] [stdout]   --> src/controller/tag.rs:42:14
[INFO] [stdout]    |
[INFO] [stdout] 42 |          Err(e)=>{
[INFO] [stdout]    |              ^ help: if this is intentional, prefix it with an underscore: `_e`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `e`
[INFO] [stdout]   --> src/controller/tag.rs:59:22
[INFO] [stdout]    |
[INFO] [stdout] 59 |                  Err(e)=>{
[INFO] [stdout]    |                      ^ help: if this is intentional, prefix it with an underscore: `_e`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `auth`
[INFO] [stdout]   --> src/controller/tag.rs:76:22
[INFO] [stdout]    |
[INFO] [stdout] 76 | pub async fn del_tag(auth: BlogAuth,Json(TagInfo): Json<DelTagInfo>)-> Result<Resp<u64>,WebError>{
[INFO] [stdout]    |                      ^^^^ help: if this is intentional, prefix it with an underscore: `_auth`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `auth`
[INFO] [stdout]   --> src/controller/tag.rs:99:25
[INFO] [stdout]    |
[INFO] [stdout] 99 | pub async fn search_tag(auth: BlogAuth,Json(searchInfo): Json<SearchTagInfo>) -> Result<Resp<Vec<Tag>>,WebError>{
[INFO] [stdout]    |                         ^^^^ help: if this is intentional, prefix it with an underscore: `_auth`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `r`
[INFO] [stdout]   --> src/controller/article.rs:23:20
[INFO] [stdout]    |
[INFO] [stdout] 23 |                 Ok(r) => {
[INFO] [stdout]    |                    ^ help: if this is intentional, prefix it with an underscore: `_r`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `auth`
[INFO] [stdout]   --> src/controller/article.rs:72:29
[INFO] [stdout]    |
[INFO] [stdout] 72 | pub async fn search_article(auth: BlogAuth, Json(searchInfo): Json<SearchArticleInfo>) -> Result<Resp<SearchArticleResponse>, WebError> {
[INFO] [stdout]    |                             ^^^^ help: if this is intentional, prefix it with an underscore: `_auth`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `e`
[INFO] [stdout]   --> src/controller/article.rs:92:13
[INFO] [stdout]    |
[INFO] [stdout] 92 |         Err(e)=>{
[INFO] [stdout]    |             ^ help: if this is intentional, prefix it with an underscore: `_e`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `auth`
[INFO] [stdout]    --> src/controller/article.rs:119:27
[INFO] [stdout]     |
[INFO] [stdout] 119 | pub async fn find_article(auth: BlogAuth,Json(findInfo): Json<FindArticleInfo>)-> Result<Resp<Article>, WebError>{
[INFO] [stdout]     |                           ^^^^ help: if this is intentional, prefix it with an underscore: `_auth`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `auth`
[INFO] [stdout]    --> src/controller/article.rs:136:26
[INFO] [stdout]     |
[INFO] [stdout] 136 | pub async fn del_article(auth: BlogAuth,Json(findInfo): Json<FindArticleInfo>)-> Result<Resp<u64>, WebError>{
[INFO] [stdout]     |                          ^^^^ help: if this is intentional, prefix it with an underscore: `_auth`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `e`
[INFO] [stdout]   --> src/controller/render.rs:36:13
[INFO] [stdout]    |
[INFO] [stdout] 36 |         Err(e) => {}
[INFO] [stdout]    |             ^ help: if this is intentional, prefix it with an underscore: `_e`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `e`
[INFO] [stdout]   --> src/controller/render.rs:52:13
[INFO] [stdout]    |
[INFO] [stdout] 52 |         Err(e) => {
[INFO] [stdout]    |             ^ help: if this is intentional, prefix it with an underscore: `_e`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `e`
[INFO] [stdout]   --> src/controller/render.rs:63:13
[INFO] [stdout]    |
[INFO] [stdout] 63 |         Err(e) => {}
[INFO] [stdout]    |             ^ help: if this is intentional, prefix it with an underscore: `_e`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `e`
[INFO] [stdout]    --> src/controller/render.rs:121:13
[INFO] [stdout]     |
[INFO] [stdout] 121 |         Err(e) => {}
[INFO] [stdout]     |             ^ help: if this is intentional, prefix it with an underscore: `_e`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `e`
[INFO] [stdout]    --> src/controller/render.rs:158:13
[INFO] [stdout]     |
[INFO] [stdout] 158 |         Err(e) => {}
[INFO] [stdout]     |             ^ help: if this is intentional, prefix it with an underscore: `_e`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable `tags` is assigned to, but never used
[INFO] [stdout]    --> src/controller/render.rs:190:13
[INFO] [stdout]     |
[INFO] [stdout] 190 |     let mut tags: Vec<ArticleTag> = Vec::new();
[INFO] [stdout]     |             ^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: consider using `_tags` instead
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: value assigned to `tags` is never read
[INFO] [stdout]    --> src/controller/render.rs:200:21
[INFO] [stdout]     |
[INFO] [stdout] 200 |                     tags = t;
[INFO] [stdout]     |                     ^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_assignments)]` on by default
[INFO] [stdout]     = help: maybe it is overwritten before being read?
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `e`
[INFO] [stdout]    --> src/controller/render.rs:205:13
[INFO] [stdout]     |
[INFO] [stdout] 205 |         Err(e) => {}
[INFO] [stdout]     |             ^ help: if this is intentional, prefix it with an underscore: `_e`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `e`
[INFO] [stdout]    --> src/controller/render.rs:225:13
[INFO] [stdout]     |
[INFO] [stdout] 225 |         Err(e) => {}
[INFO] [stdout]     |             ^ help: if this is intentional, prefix it with an underscore: `_e`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `get_item_number`
[INFO] [stdout]    --> src/controller/render.rs:262:13
[INFO] [stdout]     |
[INFO] [stdout] 262 |         let get_item_number = max_rec_item / taglength;
[INFO] [stdout]     |             ^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_get_item_number`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `e`
[INFO] [stdout]    --> src/controller/render.rs:270:21
[INFO] [stdout]     |
[INFO] [stdout] 270 |                 Err(e) => {}
[INFO] [stdout]     |                     ^ help: if this is intentional, prefix it with an underscore: `_e`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: value assigned to `maxget_article_number` is never read
[INFO] [stdout]    --> src/controller/render.rs:279:21
[INFO] [stdout]     |
[INFO] [stdout] 279 |             let mut maxget_article_number = 0;
[INFO] [stdout]     |                     ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = help: maybe it is overwritten before being read?
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `auth`
[INFO] [stdout]   --> src/controller/copyright.rs:13:5
[INFO] [stdout]    |
[INFO] [stdout] 13 |     auth: BlogAuth,
[INFO] [stdout]    |     ^^^^ help: if this is intentional, prefix it with an underscore: `_auth`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `e`
[INFO] [stdout]   --> src/controller/copyright.rs:25:13
[INFO] [stdout]    |
[INFO] [stdout] 25 |         Err(e) => {
[INFO] [stdout]    |             ^ help: if this is intentional, prefix it with an underscore: `_e`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `auth`
[INFO] [stdout]   --> src/controller/copyright.rs:56:37
[INFO] [stdout]    |
[INFO] [stdout] 56 | pub async fn save_copyright_content(auth: BlogAuth,Json(contentInfo): Json<CopyrightContentInfo>)->Result<Resp<Copyright>, WebError>{
[INFO] [stdout]    |                                     ^^^^ help: if this is intentional, prefix it with an underscore: `_auth`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `d`
[INFO] [stdout]   --> src/controller/copyright.rs:66:20
[INFO] [stdout]    |
[INFO] [stdout] 66 |                 Ok(d) => {
[INFO] [stdout]    |                    ^ help: if this is intentional, prefix it with an underscore: `_d`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `e`
[INFO] [stdout]    --> src/common/common.rs:237:21
[INFO] [stdout]     |
[INFO] [stdout] 237 |                 Err(e)=>{
[INFO] [stdout]     |                     ^ help: if this is intentional, prefix it with an underscore: `_e`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `e`
[INFO] [stdout]   --> src/middleware/auth.rs:41:40
[INFO] [stdout]    |
[INFO] [stdout] 41 | ...                   Err(e)=>Err(WebError::LoginAuthFailedError)
[INFO] [stdout]    |                           ^ help: if this is intentional, prefix it with an underscore: `_e`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `e`
[INFO] [stdout]   --> src/middleware/auth.rs:44:33
[INFO] [stdout]    |
[INFO] [stdout] 44 | ...                   Err(e)=>Err(WebError::LoginAuthFailedError)
[INFO] [stdout]    |                           ^ help: if this is intentional, prefix it with an underscore: `_e`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `e`
[INFO] [stdout]   --> src/middleware/auth.rs:47:25
[INFO] [stdout]    |
[INFO] [stdout] 47 |                     Err(e)=> Err(WebError::LoginAuthFailedError)
[INFO] [stdout]    |                         ^ help: if this is intentional, prefix it with an underscore: `_e`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/common/common.rs:152:13
[INFO] [stdout]     |
[INFO] [stdout] 152 |         let mut responsedata =  match self {
[INFO] [stdout]     |             ----^^^^^^^^^^^^
[INFO] [stdout]     |             |
[INFO] [stdout]     |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/common/common.rs:152:13
[INFO] [stdout]     |
[INFO] [stdout] 152 |         let mut responsedata =  match self {
[INFO] [stdout]     |             ----^^^^^^^^^^^^
[INFO] [stdout]     |             |
[INFO] [stdout]     |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/model/user/handler.rs:33:13
[INFO] [stdout]    |
[INFO] [stdout] 33 |         let mut  v =  get_user(&phone,"").await;
[INFO] [stdout]    |             -----^
[INFO] [stdout]    |             |
[INFO] [stdout]    |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/model/user/handler.rs:43:13
[INFO] [stdout]    |
[INFO] [stdout] 43 |         let mut  v =  save_user(&u).await;
[INFO] [stdout]    |             -----^
[INFO] [stdout]    |             |
[INFO] [stdout]    |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/middleware/cors.rs:44:24
[INFO] [stdout]    |
[INFO] [stdout] 44 |     fn call(&mut self, mut req: Request<Req>) -> Self::Future {
[INFO] [stdout]    |                        ----^^^
[INFO] [stdout]    |                        |
[INFO] [stdout]    |                        help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function is never used: `ok`
[INFO] [stdout]   --> src/common/common.rs:41:12
[INFO] [stdout]    |
[INFO] [stdout] 41 |     pub fn ok(data: T) -> Self {
[INFO] [stdout]    |            ^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(dead_code)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function is never used: `ok_msg`
[INFO] [stdout]   --> src/common/common.rs:60:12
[INFO] [stdout]    |
[INFO] [stdout] 60 |     pub fn ok_msg(msg: &str) -> Self {
[INFO] [stdout]    |            ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function is never used: `err_msg`
[INFO] [stdout]   --> src/common/common.rs:74:12
[INFO] [stdout]    |
[INFO] [stdout] 74 |     pub fn err_msg(msg: &str) -> Self {
[INFO] [stdout]    |            ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: type alias is never used: `Result`
[INFO] [stdout]    --> src/common/common.rs:102:1
[INFO] [stdout]     |
[INFO] [stdout] 102 | pub type Result<T> = result::Result<T, WebError>;
[INFO] [stdout]     | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function is never used: `get_tag`
[INFO] [stdout]   --> src/model/tag/handler.rs:14:14
[INFO] [stdout]    |
[INFO] [stdout] 14 | pub async fn get_tag(id: &str) -> Result<Tag> {
[INFO] [stdout]    |              ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function is never used: `get_tag_for_name`
[INFO] [stdout]   --> src/model/tag/handler.rs:20:14
[INFO] [stdout]    |
[INFO] [stdout] 20 | pub async fn get_tag_for_name(name: String) -> Result<Tag> {
[INFO] [stdout]    |              ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable `updateUser` should have a snake case name
[INFO] [stdout]   --> src/controller/user.rs:61:10
[INFO] [stdout]    |
[INFO] [stdout] 61 |     Json(updateUser): Json<UpdateUser>,
[INFO] [stdout]    |          ^^^^^^^^^^ help: convert the identifier to snake case: `update_user`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(non_snake_case)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: structure field `SecretId` should have a snake case name
[INFO] [stdout]   --> src/controller/user.rs:84:9
[INFO] [stdout]    |
[INFO] [stdout] 84 |     pub SecretId: String,
[INFO] [stdout]    |         ^^^^^^^^ help: convert the identifier to snake case: `secret_id`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: structure field `SecretKey` should have a snake case name
[INFO] [stdout]   --> src/controller/user.rs:85:9
[INFO] [stdout]    |
[INFO] [stdout] 85 |     pub SecretKey: String,
[INFO] [stdout]    |         ^^^^^^^^^ help: convert the identifier to snake case: `secret_key`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable `newTagInfo` should have a snake case name
[INFO] [stdout]   --> src/controller/tag.rs:37:42
[INFO] [stdout]    |
[INFO] [stdout] 37 | pub async fn add_tag(auth: BlogAuth,Json(newTagInfo): Json<TagInfo>, ) -> Result<Resp<Tag>, WebError> {
[INFO] [stdout]    |                                          ^^^^^^^^^^ help: convert the identifier to snake case: `new_tag_info`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable `TagInfo` should have a snake case name
[INFO] [stdout]   --> src/controller/tag.rs:76:42
[INFO] [stdout]    |
[INFO] [stdout] 76 | pub async fn del_tag(auth: BlogAuth,Json(TagInfo): Json<DelTagInfo>)-> Result<Resp<u64>,WebError>{
[INFO] [stdout]    |                                          ^^^^^^^ help: convert the identifier to snake case: `tag_info`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable `searchInfo` should have a snake case name
[INFO] [stdout]   --> src/controller/tag.rs:99:45
[INFO] [stdout]    |
[INFO] [stdout] 99 | pub async fn search_tag(auth: BlogAuth,Json(searchInfo): Json<SearchTagInfo>) -> Result<Resp<Vec<Tag>>,WebError>{
[INFO] [stdout]    |                                             ^^^^^^^^^^ help: convert the identifier to snake case: `search_info`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable `newArticleInfo` should have a snake case name
[INFO] [stdout]  --> src/controller/article.rs:9:47
[INFO] [stdout]   |
[INFO] [stdout] 9 | pub async fn set_article(auth: BlogAuth, Json(newArticleInfo): Json<Article>) -> Result<Resp<Article>, WebError> {
[INFO] [stdout]   |                                               ^^^^^^^^^^^^^^ help: convert the identifier to snake case: `new_article_info`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable `newArt` should have a snake case name
[INFO] [stdout]   --> src/controller/article.rs:10:13
[INFO] [stdout]    |
[INFO] [stdout] 10 |     let mut newArt = Article::new();
[INFO] [stdout]    |             ^^^^^^ help: convert the identifier to snake case: `new_art`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable `searchInfo` should have a snake case name
[INFO] [stdout]   --> src/controller/article.rs:72:50
[INFO] [stdout]    |
[INFO] [stdout] 72 | pub async fn search_article(auth: BlogAuth, Json(searchInfo): Json<SearchArticleInfo>) -> Result<Resp<SearchArticleResponse>, WebError> {
[INFO] [stdout]    |                                                  ^^^^^^^^^^ help: convert the identifier to snake case: `search_info`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable `findInfo` should have a snake case name
[INFO] [stdout]    --> src/controller/article.rs:119:47
[INFO] [stdout]     |
[INFO] [stdout] 119 | pub async fn find_article(auth: BlogAuth,Json(findInfo): Json<FindArticleInfo>)-> Result<Resp<Article>, WebError>{
[INFO] [stdout]     |                                               ^^^^^^^^ help: convert the identifier to snake case: `find_info`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable `findInfo` should have a snake case name
[INFO] [stdout]    --> src/controller/article.rs:136:46
[INFO] [stdout]     |
[INFO] [stdout] 136 | pub async fn del_article(auth: BlogAuth,Json(findInfo): Json<FindArticleInfo>)-> Result<Resp<u64>, WebError>{
[INFO] [stdout]     |                                              ^^^^^^^^ help: convert the identifier to snake case: `find_info`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable `contentInfo` should have a snake case name
[INFO] [stdout]   --> src/controller/copyright.rs:56:57
[INFO] [stdout]    |
[INFO] [stdout] 56 | pub async fn save_copyright_content(auth: BlogAuth,Json(contentInfo): Json<CopyrightContentInfo>)->Result<Resp<Copyright>, WebError>{
[INFO] [stdout]    |                                                         ^^^^^^^^^^^ help: convert the identifier to snake case: `content_info`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `article_to_articleListRenderItem` should have a snake case name
[INFO] [stdout]    --> src/common/common.rs:199:9
[INFO] [stdout]     |
[INFO] [stdout] 199 | pub fn  article_to_articleListRenderItem(article: Article)-> ArticleListRenderItem{
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: convert the identifier to snake case: `article_to_article_list_render_item`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `routeInfo` should have a snake case name
[INFO] [stdout]   --> src/router.rs:26:8
[INFO] [stdout]    |
[INFO] [stdout] 26 | pub fn routeInfo() -> Router<BoxRoute> {
[INFO] [stdout]    |        ^^^^^^^^^ help: convert the identifier to snake case: `route_info`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: 144 warnings emitted
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/middleware/cors.rs:44:24
[INFO] [stdout]    |
[INFO] [stdout] 44 |     fn call(&mut self, mut req: Request<Req>) -> Self::Future {
[INFO] [stdout]    |                        ----^^^
[INFO] [stdout]    |                        |
[INFO] [stdout]    |                        help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function is never used: `ok`
[INFO] [stdout]   --> src/common/common.rs:41:12
[INFO] [stdout]    |
[INFO] [stdout] 41 |     pub fn ok(data: T) -> Self {
[INFO] [stdout]    |            ^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(dead_code)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function is never used: `ok_msg`
[INFO] [stdout]   --> src/common/common.rs:60:12
[INFO] [stdout]    |
[INFO] [stdout] 60 |     pub fn ok_msg(msg: &str) -> Self {
[INFO] [stdout]    |            ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function is never used: `err_msg`
[INFO] [stdout]   --> src/common/common.rs:74:12
[INFO] [stdout]    |
[INFO] [stdout] 74 |     pub fn err_msg(msg: &str) -> Self {
[INFO] [stdout]    |            ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: type alias is never used: `Result`
[INFO] [stdout]    --> src/common/common.rs:102:1
[INFO] [stdout]     |
[INFO] [stdout] 102 | pub type Result<T> = result::Result<T, WebError>;
[INFO] [stdout]     | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function is never used: `save_user`
[INFO] [stdout]   --> src/model/user/handler.rs:20:14
[INFO] [stdout]    |
[INFO] [stdout] 20 | pub async fn save_user(user:&User) -> Result<String>{
[INFO] [stdout]    |              ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function is never used: `new`
[INFO] [stdout]   --> src/model/user/mod.rs:27:12
[INFO] [stdout]    |
[INFO] [stdout] 27 |     pub fn new() -> Self {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function is never used: `get_tag`
[INFO] [stdout]   --> src/model/tag/handler.rs:14:14
[INFO] [stdout]    |
[INFO] [stdout] 14 | pub async fn get_tag(id: &str) -> Result<Tag> {
[INFO] [stdout]    |              ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function is never used: `get_tag_for_name`
[INFO] [stdout]   --> src/model/tag/handler.rs:20:14
[INFO] [stdout]    |
[INFO] [stdout] 20 | pub async fn get_tag_for_name(name: String) -> Result<Tag> {
[INFO] [stdout]    |              ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable `updateUser` should have a snake case name
[INFO] [stdout]   --> src/controller/user.rs:61:10
[INFO] [stdout]    |
[INFO] [stdout] 61 |     Json(updateUser): Json<UpdateUser>,
[INFO] [stdout]    |          ^^^^^^^^^^ help: convert the identifier to snake case: `update_user`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(non_snake_case)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: structure field `SecretId` should have a snake case name
[INFO] [stdout]   --> src/controller/user.rs:84:9
[INFO] [stdout]    |
[INFO] [stdout] 84 |     pub SecretId: String,
[INFO] [stdout]    |         ^^^^^^^^ help: convert the identifier to snake case: `secret_id`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: structure field `SecretKey` should have a snake case name
[INFO] [stdout]   --> src/controller/user.rs:85:9
[INFO] [stdout]    |
[INFO] [stdout] 85 |     pub SecretKey: String,
[INFO] [stdout]    |         ^^^^^^^^^ help: convert the identifier to snake case: `secret_key`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable `newTagInfo` should have a snake case name
[INFO] [stdout]   --> src/controller/tag.rs:37:42
[INFO] [stdout]    |
[INFO] [stdout] 37 | pub async fn add_tag(auth: BlogAuth,Json(newTagInfo): Json<TagInfo>, ) -> Result<Resp<Tag>, WebError> {
[INFO] [stdout]    |                                          ^^^^^^^^^^ help: convert the identifier to snake case: `new_tag_info`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable `TagInfo` should have a snake case name
[INFO] [stdout]   --> src/controller/tag.rs:76:42
[INFO] [stdout]    |
[INFO] [stdout] 76 | pub async fn del_tag(auth: BlogAuth,Json(TagInfo): Json<DelTagInfo>)-> Result<Resp<u64>,WebError>{
[INFO] [stdout]    |                                          ^^^^^^^ help: convert the identifier to snake case: `tag_info`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable `searchInfo` should have a snake case name
[INFO] [stdout]   --> src/controller/tag.rs:99:45
[INFO] [stdout]    |
[INFO] [stdout] 99 | pub async fn search_tag(auth: BlogAuth,Json(searchInfo): Json<SearchTagInfo>) -> Result<Resp<Vec<Tag>>,WebError>{
[INFO] [stdout]    |                                             ^^^^^^^^^^ help: convert the identifier to snake case: `search_info`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable `newArticleInfo` should have a snake case name
[INFO] [stdout]  --> src/controller/article.rs:9:47
[INFO] [stdout]   |
[INFO] [stdout] 9 | pub async fn set_article(auth: BlogAuth, Json(newArticleInfo): Json<Article>) -> Result<Resp<Article>, WebError> {
[INFO] [stdout]   |                                               ^^^^^^^^^^^^^^ help: convert the identifier to snake case: `new_article_info`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable `newArt` should have a snake case name
[INFO] [stdout]   --> src/controller/article.rs:10:13
[INFO] [stdout]    |
[INFO] [stdout] 10 |     let mut newArt = Article::new();
[INFO] [stdout]    |             ^^^^^^ help: convert the identifier to snake case: `new_art`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable `searchInfo` should have a snake case name
[INFO] [stdout]   --> src/controller/article.rs:72:50
[INFO] [stdout]    |
[INFO] [stdout] 72 | pub async fn search_article(auth: BlogAuth, Json(searchInfo): Json<SearchArticleInfo>) -> Result<Resp<SearchArticleResponse>, WebError> {
[INFO] [stdout]    |                                                  ^^^^^^^^^^ help: convert the identifier to snake case: `search_info`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable `findInfo` should have a snake case name
[INFO] [stdout]    --> src/controller/article.rs:119:47
[INFO] [stdout]     |
[INFO] [stdout] 119 | pub async fn find_article(auth: BlogAuth,Json(findInfo): Json<FindArticleInfo>)-> Result<Resp<Article>, WebError>{
[INFO] [stdout]     |                                               ^^^^^^^^ help: convert the identifier to snake case: `find_info`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable `findInfo` should have a snake case name
[INFO] [stdout]    --> src/controller/article.rs:136:46
[INFO] [stdout]     |
[INFO] [stdout] 136 | pub async fn del_article(auth: BlogAuth,Json(findInfo): Json<FindArticleInfo>)-> Result<Resp<u64>, WebError>{
[INFO] [stdout]     |                                              ^^^^^^^^ help: convert the identifier to snake case: `find_info`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable `contentInfo` should have a snake case name
[INFO] [stdout]   --> src/controller/copyright.rs:56:57
[INFO] [stdout]    |
[INFO] [stdout] 56 | pub async fn save_copyright_content(auth: BlogAuth,Json(contentInfo): Json<CopyrightContentInfo>)->Result<Resp<Copyright>, WebError>{
[INFO] [stdout]    |                                                         ^^^^^^^^^^^ help: convert the identifier to snake case: `content_info`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `article_to_articleListRenderItem` should have a snake case name
[INFO] [stdout]    --> src/common/common.rs:199:9
[INFO] [stdout]     |
[INFO] [stdout] 199 | pub fn  article_to_articleListRenderItem(article: Article)-> ArticleListRenderItem{
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: convert the identifier to snake case: `article_to_article_list_render_item`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `routeInfo` should have a snake case name
[INFO] [stdout]   --> src/router.rs:26:8
[INFO] [stdout]    |
[INFO] [stdout] 26 | pub fn routeInfo() -> Router<BoxRoute> {
[INFO] [stdout]    |        ^^^^^^^^^ help: convert the identifier to snake case: `route_info`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: 145 warnings emitted
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr]     Finished dev [unoptimized + debuginfo] target(s) in 39.84s
[INFO] running `Command { std: "docker" "inspect" "1b913a266330f7f5f08b7b2f2143a19776b3050655be34b5eae3d5336f9edd5c", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "1b913a266330f7f5f08b7b2f2143a19776b3050655be34b5eae3d5336f9edd5c", kill_on_drop: false }`
[INFO] [stdout] 1b913a266330f7f5f08b7b2f2143a19776b3050655be34b5eae3d5336f9edd5c
