[INFO] cloning repository https://github.com/longxiangam/lcd-drivers
[INFO] running `Command { std: "git" "-c" "credential.helper=" "-c" "credential.helper=/workspace/cargo-home/bin/git-credential-null" "clone" "--bare" "https://github.com/longxiangam/lcd-drivers" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Flongxiangam%2Flcd-drivers", kill_on_drop: false }`
[INFO] [stderr] Cloning into bare repository '/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Flongxiangam%2Flcd-drivers'...
[INFO] running `Command { std: "git" "rev-parse" "HEAD", kill_on_drop: false }`
[INFO] [stdout] cb42bb928c21ea203d2e3acfdbbef199da6a19a8
[INFO] testing longxiangam/lcd-drivers against try#db823df02fd0c2cf67b43025ac3fef3f2d743245 for pr-150681
[INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Flongxiangam%2Flcd-drivers" "/workspace/builds/worker-2-tc2/source", kill_on_drop: false }`
[INFO] [stderr] Cloning into '/workspace/builds/worker-2-tc2/source'...
[INFO] [stderr] done.
[INFO] started tweaking git repo https://github.com/longxiangam/lcd-drivers
[INFO] finished tweaking git repo https://github.com/longxiangam/lcd-drivers
[INFO] tweaked toml for git repo https://github.com/longxiangam/lcd-drivers written to /workspace/builds/worker-2-tc2/source/Cargo.toml
[INFO] validating manifest of git repo https://github.com/longxiangam/lcd-drivers on toolchain db823df02fd0c2cf67b43025ac3fef3f2d743245
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+db823df02fd0c2cf67b43025ac3fef3f2d743245" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }`
[INFO] crate git repo https://github.com/longxiangam/lcd-drivers already has a lockfile, it will not be regenerated
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+db823df02fd0c2cf67b43025ac3fef3f2d743245" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-2-tc2/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-2-tc2/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:845e597a41426bbf2703be69acdb67d10b6de511142d05cba7bbe119c898b2c7" "/opt/rustwide/cargo-home/bin/cargo" "+db823df02fd0c2cf67b43025ac3fef3f2d743245" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }`
[INFO] [stdout] 7b171539dc13edea2a77b6a20655cf24c47c8dcbae6e1d515398be93c1ec29c4
[INFO] running `Command { std: "docker" "start" "-a" "7b171539dc13edea2a77b6a20655cf24c47c8dcbae6e1d515398be93c1ec29c4", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "7b171539dc13edea2a77b6a20655cf24c47c8dcbae6e1d515398be93c1ec29c4", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "7b171539dc13edea2a77b6a20655cf24c47c8dcbae6e1d515398be93c1ec29c4", kill_on_drop: false }`
[INFO] [stdout] 7b171539dc13edea2a77b6a20655cf24c47c8dcbae6e1d515398be93c1ec29c4
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-2-tc2/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-2-tc2/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=forbid" "-e" "RUSTDOCFLAGS=--cap-lints=forbid" "-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:845e597a41426bbf2703be69acdb67d10b6de511142d05cba7bbe119c898b2c7" "/opt/rustwide/cargo-home/bin/cargo" "+db823df02fd0c2cf67b43025ac3fef3f2d743245" "build" "--frozen" "--message-format=json", kill_on_drop: false }`
[INFO] [stdout] 65b59dadb510702a4a14aaf1f4b25cee212a1909b4bef62b9747211eb21888c9
[INFO] running `Command { std: "docker" "start" "-a" "65b59dadb510702a4a14aaf1f4b25cee212a1909b4bef62b9747211eb21888c9", kill_on_drop: false }`
[INFO] [stderr]    Compiling az v1.2.1
[INFO] [stderr]    Compiling num-traits v0.2.18
[INFO] [stderr]    Compiling fixed v1.26.0
[INFO] [stderr]    Compiling bytemuck v1.15.0
[INFO] [stderr]    Compiling embedded-hal-async v1.0.0
[INFO] [stderr]    Compiling half v2.4.0
[INFO] [stderr]    Compiling micromath v2.1.0
[INFO] [stderr]    Compiling embedded-hal v1.0.0
[INFO] [stderr]    Compiling embedded-graphics-core v0.4.0
[INFO] [stderr]    Compiling float-cmp v0.9.0
[INFO] [stderr]    Compiling embedded-graphics v0.8.1
[INFO] [stderr]    Compiling lcd-drivers v0.1.0 (/opt/rustwide/workdir)
[INFO] [stdout] warning: unused import: `Color`
[INFO] [stdout]  --> src/graphics.rs:4:20
[INFO] [stdout]   |
[INFO] [stdout] 4 | use crate::color::{Color, OctColor, TriColor, TwoBitColor};
[INFO] [stdout]   |                    ^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `digital::Wait`
[INFO] [stdout]  --> src/interface_async.rs:3:42
[INFO] [stdout]   |
[INFO] [stdout] 3 | use embedded_hal_async::{delay::DelayNs, digital::Wait, spi::SpiDevice};
[INFO] [stdout]   |                                          ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `prelude::*`
[INFO] [stdout]  --> src/uc1638/mod.rs:2:33
[INFO] [stdout]   |
[INFO] [stdout] 2 | use crate::{color::TwoBitColor, prelude::*};
[INFO] [stdout]   |                                 ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `command::Command`
[INFO] [stdout]  --> src/uc1638/mod.rs:3:5
[INFO] [stdout]   |
[INFO] [stdout] 3 | use command::Command;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `core::marker::Sized`
[INFO] [stdout]  --> src/uc1638/lcd_async.rs:1:5
[INFO] [stdout]   |
[INFO] [stdout] 1 | use core::marker::Sized;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `digital::Wait`
[INFO] [stdout]  --> src/uc1638/lcd_async.rs:2:42
[INFO] [stdout]   |
[INFO] [stdout] 2 | use embedded_hal_async::{delay::DelayNs, digital::Wait, spi::SpiDevice};
[INFO] [stdout]   |                                          ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `prelude::*`
[INFO] [stdout]  --> src/uc1638/lcd_async.rs:6:33
[INFO] [stdout]   |
[INFO] [stdout] 6 | use crate::{color::TwoBitColor, prelude::*};
[INFO] [stdout]   |                                 ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary trailing semicolon
[INFO] [stdout]   --> src/uc1638/lcd_async.rs:50:56
[INFO] [stdout]    |
[INFO] [stdout] 50 |         self.cmd_with_data_u8(spi, 0xf1, &[95]).await?;;
[INFO] [stdout]    |                                                        ^ help: remove this semicolon
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(redundant_semicolons)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary parentheses around `if` condition
[INFO] [stdout]    --> src/uc1638/lcd_async.rs:157:11
[INFO] [stdout]     |
[INFO] [stdout] 157 |         if(Y>23){YY=0;}    //保证页面代码最大为11
[INFO] [stdout]     |           ^    ^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_parens)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] help: remove these parentheses
[INFO] [stdout]     |
[INFO] [stdout] 157 -         if(Y>23){YY=0;}    //保证页面代码最大为11
[INFO] [stdout] 157 +         if Y>23 {YY=0;}    //保证页面代码最大为11
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Mode`, `Phase`, and `Polarity`
[INFO] [stdout]   --> src/lib.rs:71:28
[INFO] [stdout]    |
[INFO] [stdout] 71 | use embedded_hal_v2::spi::{Mode, Phase, Polarity};
[INFO] [stdout]    |                            ^^^^  ^^^^^  ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Display`
[INFO] [stdout]  --> src/uc1638/graphics.rs:9:23
[INFO] [stdout]   |
[INFO] [stdout] 9 | use crate::graphics::{Display, DisplayRotation};
[INFO] [stdout]   |                       ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `digital::Wait`
[INFO] [stdout]  --> src/traits_async.rs:2:42
[INFO] [stdout]   |
[INFO] [stdout] 2 | use embedded_hal_async::{delay::DelayNs, digital::Wait, spi::SpiDevice};
[INFO] [stdout]   |                                          ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `spi`
[INFO] [stdout]   --> src/uc1638/lcd_async.rs:96:9
[INFO] [stdout]    |
[INFO] [stdout] 96 |         spi: &mut SPI,
[INFO] [stdout]    |         ^^^ help: if this is intentional, prefix it with an underscore: `_spi`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `buffer`
[INFO] [stdout]   --> src/uc1638/lcd_async.rs:97:9
[INFO] [stdout]    |
[INFO] [stdout] 97 |         buffer: &[u8],
[INFO] [stdout]    |         ^^^^^^ help: if this is intentional, prefix it with an underscore: `_buffer`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `x`
[INFO] [stdout]   --> src/uc1638/lcd_async.rs:98:9
[INFO] [stdout]    |
[INFO] [stdout] 98 |         x: u32,
[INFO] [stdout]    |         ^ help: if this is intentional, prefix it with an underscore: `_x`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `y`
[INFO] [stdout]   --> src/uc1638/lcd_async.rs:99:9
[INFO] [stdout]    |
[INFO] [stdout] 99 |         y: u32,
[INFO] [stdout]    |         ^ help: if this is intentional, prefix it with an underscore: `_y`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `width`
[INFO] [stdout]    --> src/uc1638/lcd_async.rs:100:9
[INFO] [stdout]     |
[INFO] [stdout] 100 |         width: u32,
[INFO] [stdout]     |         ^^^^^
[INFO] [stdout]     |
[INFO] [stdout] help: you might have meant to pattern match on the similarly named constant `WIDTH`
[INFO] [stdout]     |
[INFO] [stdout] 100 -         width: u32,
[INFO] [stdout] 100 +         uc1638::WIDTH: u32,
[INFO] [stdout]     |
[INFO] [stdout] help: if this is intentional, prefix it with an underscore
[INFO] [stdout]     |
[INFO] [stdout] 100 |         _width: u32,
[INFO] [stdout]     |         +
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `height`
[INFO] [stdout]    --> src/uc1638/lcd_async.rs:101:9
[INFO] [stdout]     |
[INFO] [stdout] 101 |         height: u32,
[INFO] [stdout]     |         ^^^^^^
[INFO] [stdout]     |
[INFO] [stdout] help: you might have meant to pattern match on the similarly named constant `HEIGHT`
[INFO] [stdout]     |
[INFO] [stdout] 101 -         height: u32,
[INFO] [stdout] 101 +         uc1638::HEIGHT: u32,
[INFO] [stdout]     |
[INFO] [stdout] help: if this is intentional, prefix it with an underscore
[INFO] [stdout]     |
[INFO] [stdout] 101 |         _height: u32,
[INFO] [stdout]     |         +
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `spi`
[INFO] [stdout]    --> src/uc1638/lcd_async.rs:106:40
[INFO] [stdout]     |
[INFO] [stdout] 106 |     async  fn display_frame(&mut self, spi: &mut SPI, _delay: &mut DELAY) -> Result<(), SPI::Error> {
[INFO] [stdout]     |                                        ^^^ help: if this is intentional, prefix it with an underscore: `_spi`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `spi`
[INFO] [stdout]    --> src/uc1638/lcd_async.rs:112:9
[INFO] [stdout]     |
[INFO] [stdout] 112 |         spi: &mut SPI,
[INFO] [stdout]     |         ^^^ help: if this is intentional, prefix it with an underscore: `_spi`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `buffer`
[INFO] [stdout]    --> src/uc1638/lcd_async.rs:113:9
[INFO] [stdout]     |
[INFO] [stdout] 113 |         buffer: &[u8],
[INFO] [stdout]     |         ^^^^^^ help: if this is intentional, prefix it with an underscore: `_buffer`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `delay`
[INFO] [stdout]    --> src/uc1638/lcd_async.rs:114:9
[INFO] [stdout]     |
[INFO] [stdout] 114 |         delay: &mut DELAY
[INFO] [stdout]     |         ^^^^^ help: if this is intentional, prefix it with an underscore: `_delay`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `spi`
[INFO] [stdout]    --> src/uc1638/lcd_async.rs:119:38
[INFO] [stdout]     |
[INFO] [stdout] 119 |     async  fn clear_frame(&mut self, spi: &mut SPI, _delay: &mut DELAY) -> Result<(), SPI::Error> {
[INFO] [stdout]     |                                      ^^^ help: if this is intentional, prefix it with an underscore: `_spi`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `color_value`
[INFO] [stdout]    --> src/uc1638/lcd_async.rs:120:13
[INFO] [stdout]     |
[INFO] [stdout] 120 |         let color_value = self.color.get_byte_value();
[INFO] [stdout]     |             ^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_color_value`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `spi`
[INFO] [stdout]    --> src/uc1638/lcd_async.rs:203:41
[INFO] [stdout]     |
[INFO] [stdout] 203 |     async fn send_resolution(&mut self, spi: &mut SPI) -> Result<(), SPI::Error> {
[INFO] [stdout]     |                                         ^^^ help: if this is intentional, prefix it with an underscore: `_spi`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `data_x_times` is never used
[INFO] [stdout]   --> src/interface_async.rs:87:25
[INFO] [stdout]    |
[INFO] [stdout] 22 | / impl<SPI,  DC, RST, DELAY> DisplayInterface<SPI,  DC, RST, DELAY>
[INFO] [stdout] 23 | | where
[INFO] [stdout] 24 | |     SPI: SpiDevice,
[INFO] [stdout] 25 | |     DC: OutputPin,
[INFO] [stdout] 26 | |     RST: OutputPin,
[INFO] [stdout] 27 | |     DELAY: DelayNs,
[INFO] [stdout]    | |___________________- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 87 |       pub(crate) async fn data_x_times(
[INFO] [stdout]    |                           ^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `command`, `cmd_with_data`, and `send_resolution` are never used
[INFO] [stdout]    --> src/uc1638/lcd_async.rs:191:14
[INFO] [stdout]     |
[INFO] [stdout] 142 | / impl<SPI, DC, RST, DELAY> Lcd2in7<SPI, DC, RST, DELAY>
[INFO] [stdout] 143 | |     where
[INFO] [stdout] 144 | |         SPI: SpiDevice,
[INFO] [stdout] 145 | |         DC: OutputPin,
[INFO] [stdout] 146 | |         RST: OutputPin,
[INFO] [stdout] 147 | |         DELAY: DelayNs,
[INFO] [stdout]     | |_______________________- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 191 |       async fn command(&mut self, spi: &mut SPI, command: Command) -> Result<(), SPI::Error> {
[INFO] [stdout]     |                ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 194 |       async fn cmd_with_data(
[INFO] [stdout]     |                ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 203 |       async fn send_resolution(&mut self, spi: &mut SPI) -> Result<(), SPI::Error> {
[INFO] [stdout]     |                ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of `async fn` in public traits is discouraged as auto trait bounds cannot be specified
[INFO] [stdout]   --> src/traits_async.rs:39:5
[INFO] [stdout]    |
[INFO] [stdout] 39 |     async fn new(
[INFO] [stdout]    |     ^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: you can suppress this lint if you plan to use the trait only in your own code, or do not care about auto traits like `Send` on the `Future`
[INFO] [stdout]    = note: `#[warn(async_fn_in_trait)]` on by default
[INFO] [stdout] help: you can alternatively desugar to a normal `fn` that returns `impl Future` and add any desired bounds such as `Send`, but these cannot be relaxed without a breaking API change
[INFO] [stdout]    |
[INFO] [stdout] 39 ~     fn new(
[INFO] [stdout] 40 |         spi: &mut SPI,
[INFO] [stdout] ...
[INFO] [stdout] 43 |         delay: &mut DELAY,
[INFO] [stdout] 44 ~     ) -> impl std::future::Future<Output = Result<Self, SPI::Error>> + Send
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of `async fn` in public traits is discouraged as auto trait bounds cannot be specified
[INFO] [stdout]   --> src/traits_async.rs:61:5
[INFO] [stdout]    |
[INFO] [stdout] 61 |     async fn update_frame(
[INFO] [stdout]    |     ^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: you can suppress this lint if you plan to use the trait only in your own code, or do not care about auto traits like `Send` on the `Future`
[INFO] [stdout] help: you can alternatively desugar to a normal `fn` that returns `impl Future` and add any desired bounds such as `Send`, but these cannot be relaxed without a breaking API change
[INFO] [stdout]    |
[INFO] [stdout] 61 ~     fn update_frame(
[INFO] [stdout] 62 |         &mut self,
[INFO] [stdout] ...
[INFO] [stdout] 65 |         delay: &mut DELAY
[INFO] [stdout] 66 ~     ) -> impl std::future::Future<Output = Result<(), SPI::Error>> + Send;
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of `async fn` in public traits is discouraged as auto trait bounds cannot be specified
[INFO] [stdout]   --> src/traits_async.rs:73:5
[INFO] [stdout]    |
[INFO] [stdout] 73 |     async  fn update_partial_frame(
[INFO] [stdout]    |     ^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: you can suppress this lint if you plan to use the trait only in your own code, or do not care about auto traits like `Send` on the `Future`
[INFO] [stdout] help: you can alternatively desugar to a normal `fn` that returns `impl Future` and add any desired bounds such as `Send`, but these cannot be relaxed without a breaking API change
[INFO] [stdout]    |
[INFO] [stdout] 73 ~     fn update_partial_frame(
[INFO] [stdout] 74 |         &mut self,
[INFO] [stdout] ...
[INFO] [stdout] 80 |         height: u32,
[INFO] [stdout] 81 ~     ) -> impl std::future::Future<Output = Result<(), SPI::Error>> + Send;
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of `async fn` in public traits is discouraged as auto trait bounds cannot be specified
[INFO] [stdout]   --> src/traits_async.rs:86:5
[INFO] [stdout]    |
[INFO] [stdout] 86 |     async  fn display_frame(&mut self, spi: &mut SPI,delay: &mut DELAY) -> Result<(), SPI::Error>;
[INFO] [stdout]    |     ^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: you can suppress this lint if you plan to use the trait only in your own code, or do not care about auto traits like `Send` on the `Future`
[INFO] [stdout] help: you can alternatively desugar to a normal `fn` that returns `impl Future` and add any desired bounds such as `Send`, but these cannot be relaxed without a breaking API change
[INFO] [stdout]    |
[INFO] [stdout] 86 -     async  fn display_frame(&mut self, spi: &mut SPI,delay: &mut DELAY) -> Result<(), SPI::Error>;
[INFO] [stdout] 86 +     fn display_frame(&mut self, spi: &mut SPI,delay: &mut DELAY) -> impl std::future::Future<Output = Result<(), SPI::Error>> + Send;
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of `async fn` in public traits is discouraged as auto trait bounds cannot be specified
[INFO] [stdout]   --> src/traits_async.rs:89:5
[INFO] [stdout]    |
[INFO] [stdout] 89 |     async  fn update_and_display_frame(
[INFO] [stdout]    |     ^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: you can suppress this lint if you plan to use the trait only in your own code, or do not care about auto traits like `Send` on the `Future`
[INFO] [stdout] help: you can alternatively desugar to a normal `fn` that returns `impl Future` and add any desired bounds such as `Send`, but these cannot be relaxed without a breaking API change
[INFO] [stdout]    |
[INFO] [stdout] 89 ~     fn update_and_display_frame(
[INFO] [stdout] 90 |         &mut self,
[INFO] [stdout] ...
[INFO] [stdout] 93 |         delay: &mut DELAY
[INFO] [stdout] 94 ~     ) -> impl std::future::Future<Output = Result<(), SPI::Error>> + Send;
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of `async fn` in public traits is discouraged as auto trait bounds cannot be specified
[INFO] [stdout]   --> src/traits_async.rs:99:5
[INFO] [stdout]    |
[INFO] [stdout] 99 |     async  fn clear_frame(&mut self, spi: &mut SPI, delay: &mut DELAY) -> Result<(), SPI::Error>;
[INFO] [stdout]    |     ^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: you can suppress this lint if you plan to use the trait only in your own code, or do not care about auto traits like `Send` on the `Future`
[INFO] [stdout] help: you can alternatively desugar to a normal `fn` that returns `impl Future` and add any desired bounds such as `Send`, but these cannot be relaxed without a breaking API change
[INFO] [stdout]    |
[INFO] [stdout] 99 -     async  fn clear_frame(&mut self, spi: &mut SPI, delay: &mut DELAY) -> Result<(), SPI::Error>;
[INFO] [stdout] 99 +     fn clear_frame(&mut self, spi: &mut SPI, delay: &mut DELAY) -> impl std::future::Future<Output = Result<(), SPI::Error>> + Send;
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable `X` should have a snake case name
[INFO] [stdout]    --> src/uc1638/lcd_async.rs:155:46
[INFO] [stdout]     |
[INFO] [stdout] 155 |     pub async fn goto(&mut self,spi:&mut SPI,X: u8, Y: u8) -> Result<(), SPI::Error>{
[INFO] [stdout]     |                                              ^ help: convert the identifier to snake case (notice the capitalization): `x`
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(non_snake_case)]` (part of `#[warn(nonstandard_style)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable `Y` should have a snake case name
[INFO] [stdout]    --> src/uc1638/lcd_async.rs:155:53
[INFO] [stdout]     |
[INFO] [stdout] 155 |     pub async fn goto(&mut self,spi:&mut SPI,X: u8, Y: u8) -> Result<(), SPI::Error>{
[INFO] [stdout]     |                                                     ^ help: convert the identifier to snake case (notice the capitalization): `y`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable `YY` should have a snake case name
[INFO] [stdout]    --> src/uc1638/lcd_async.rs:156:17
[INFO] [stdout]     |
[INFO] [stdout] 156 |         let mut YY = Y;
[INFO] [stdout]     |                 ^^ help: convert the identifier to snake case (notice the capitalization): `yy`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr]     Finished `dev` profile [unoptimized + debuginfo] target(s) in 15.67s
[INFO] running `Command { std: "docker" "inspect" "65b59dadb510702a4a14aaf1f4b25cee212a1909b4bef62b9747211eb21888c9", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "65b59dadb510702a4a14aaf1f4b25cee212a1909b4bef62b9747211eb21888c9", kill_on_drop: false }`
[INFO] [stdout] 65b59dadb510702a4a14aaf1f4b25cee212a1909b4bef62b9747211eb21888c9
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-2-tc2/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-2-tc2/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=forbid" "-e" "RUSTDOCFLAGS=--cap-lints=forbid" "-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:845e597a41426bbf2703be69acdb67d10b6de511142d05cba7bbe119c898b2c7" "/opt/rustwide/cargo-home/bin/cargo" "+db823df02fd0c2cf67b43025ac3fef3f2d743245" "test" "--frozen" "--no-run" "--message-format=json", kill_on_drop: false }`
[INFO] [stdout] c1796495ab39ec4d1e688fedab83be03536513fa16666099128d37c4e7d747fd
[INFO] running `Command { std: "docker" "start" "-a" "c1796495ab39ec4d1e688fedab83be03536513fa16666099128d37c4e7d747fd", kill_on_drop: false }`
[INFO] [stdout] warning: unused import: `Color`
[INFO] [stdout]  --> src/graphics.rs:4:20
[INFO] [stdout]   |
[INFO] [stdout] 4 | use crate::color::{Color, OctColor, TriColor, TwoBitColor};
[INFO] [stdout]   |                    ^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `digital::Wait`
[INFO] [stdout]  --> src/interface_async.rs:3:42
[INFO] [stdout]   |
[INFO] [stdout] 3 | use embedded_hal_async::{delay::DelayNs, digital::Wait, spi::SpiDevice};
[INFO] [stdout]   |                                          ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `prelude::*`
[INFO] [stdout]  --> src/uc1638/mod.rs:2:33
[INFO] [stdout]   |
[INFO] [stdout] 2 | use crate::{color::TwoBitColor, prelude::*};
[INFO] [stdout]   |                                 ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `command::Command`
[INFO] [stdout]  --> src/uc1638/mod.rs:3:5
[INFO] [stdout]   |
[INFO] [stdout] 3 | use command::Command;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `core::marker::Sized`
[INFO] [stdout]  --> src/uc1638/lcd_async.rs:1:5
[INFO] [stdout]   |
[INFO] [stdout] 1 | use core::marker::Sized;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `digital::Wait`
[INFO] [stdout]  --> src/uc1638/lcd_async.rs:2:42
[INFO] [stdout]   |
[INFO] [stdout] 2 | use embedded_hal_async::{delay::DelayNs, digital::Wait, spi::SpiDevice};
[INFO] [stdout]   |                                          ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `prelude::*`
[INFO] [stdout]  --> src/uc1638/lcd_async.rs:6:33
[INFO] [stdout]   |
[INFO] [stdout] 6 | use crate::{color::TwoBitColor, prelude::*};
[INFO] [stdout]   |                                 ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary trailing semicolon
[INFO] [stdout]   --> src/uc1638/lcd_async.rs:50:56
[INFO] [stdout]    |
[INFO] [stdout] 50 |         self.cmd_with_data_u8(spi, 0xf1, &[95]).await?;;
[INFO] [stdout]    |                                                        ^ help: remove this semicolon
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(redundant_semicolons)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary parentheses around `if` condition
[INFO] [stdout]    --> src/uc1638/lcd_async.rs:157:11
[INFO] [stdout]     |
[INFO] [stdout] 157 |         if(Y>23){YY=0;}    //保证页面代码最大为11
[INFO] [stdout]     |           ^    ^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_parens)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] help: remove these parentheses
[INFO] [stdout]     |
[INFO] [stdout] 157 -         if(Y>23){YY=0;}    //保证页面代码最大为11
[INFO] [stdout] 157 +         if Y>23 {YY=0;}    //保证页面代码最大为11
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Mode`, `Phase`, and `Polarity`
[INFO] [stdout]   --> src/lib.rs:71:28
[INFO] [stdout]    |
[INFO] [stdout] 71 | use embedded_hal_v2::spi::{Mode, Phase, Polarity};
[INFO] [stdout]    |                            ^^^^  ^^^^^  ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Display`
[INFO] [stdout]  --> src/uc1638/graphics.rs:9:23
[INFO] [stdout]   |
[INFO] [stdout] 9 | use crate::graphics::{Display, DisplayRotation};
[INFO] [stdout]   |                       ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `digital::Wait`
[INFO] [stdout]  --> src/traits_async.rs:2:42
[INFO] [stdout]   |
[INFO] [stdout] 2 | use embedded_hal_async::{delay::DelayNs, digital::Wait, spi::SpiDevice};
[INFO] [stdout]   |                                          ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `spi`
[INFO] [stdout]   --> src/uc1638/lcd_async.rs:96:9
[INFO] [stdout]    |
[INFO] [stdout] 96 |         spi: &mut SPI,
[INFO] [stdout]    |         ^^^ help: if this is intentional, prefix it with an underscore: `_spi`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `buffer`
[INFO] [stdout]   --> src/uc1638/lcd_async.rs:97:9
[INFO] [stdout]    |
[INFO] [stdout] 97 |         buffer: &[u8],
[INFO] [stdout]    |         ^^^^^^ help: if this is intentional, prefix it with an underscore: `_buffer`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `x`
[INFO] [stdout]   --> src/uc1638/lcd_async.rs:98:9
[INFO] [stdout]    |
[INFO] [stdout] 98 |         x: u32,
[INFO] [stdout]    |         ^ help: if this is intentional, prefix it with an underscore: `_x`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `y`
[INFO] [stdout]   --> src/uc1638/lcd_async.rs:99:9
[INFO] [stdout]    |
[INFO] [stdout] 99 |         y: u32,
[INFO] [stdout]    |         ^ help: if this is intentional, prefix it with an underscore: `_y`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `width`
[INFO] [stdout]    --> src/uc1638/lcd_async.rs:100:9
[INFO] [stdout]     |
[INFO] [stdout] 100 |         width: u32,
[INFO] [stdout]     |         ^^^^^
[INFO] [stdout]     |
[INFO] [stdout] help: you might have meant to pattern match on the similarly named constant `WIDTH`
[INFO] [stdout]     |
[INFO] [stdout] 100 -         width: u32,
[INFO] [stdout] 100 +         uc1638::WIDTH: u32,
[INFO] [stdout]     |
[INFO] [stdout] help: if this is intentional, prefix it with an underscore
[INFO] [stdout]     |
[INFO] [stdout] 100 |         _width: u32,
[INFO] [stdout]     |         +
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `height`
[INFO] [stdout]    --> src/uc1638/lcd_async.rs:101:9
[INFO] [stdout]     |
[INFO] [stdout] 101 |         height: u32,
[INFO] [stdout]     |         ^^^^^^
[INFO] [stdout]     |
[INFO] [stdout] help: you might have meant to pattern match on the similarly named constant `HEIGHT`
[INFO] [stdout]     |
[INFO] [stdout] 101 -         height: u32,
[INFO] [stdout] 101 +         uc1638::HEIGHT: u32,
[INFO] [stdout]     |
[INFO] [stdout] help: if this is intentional, prefix it with an underscore
[INFO] [stdout]     |
[INFO] [stdout] 101 |         _height: u32,
[INFO] [stdout]     |         +
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `spi`
[INFO] [stdout]    --> src/uc1638/lcd_async.rs:106:40
[INFO] [stdout]     |
[INFO] [stdout] 106 |     async  fn display_frame(&mut self, spi: &mut SPI, _delay: &mut DELAY) -> Result<(), SPI::Error> {
[INFO] [stdout]     |                                        ^^^ help: if this is intentional, prefix it with an underscore: `_spi`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `spi`
[INFO] [stdout]    --> src/uc1638/lcd_async.rs:112:9
[INFO] [stdout]     |
[INFO] [stdout] 112 |         spi: &mut SPI,
[INFO] [stdout]     |         ^^^ help: if this is intentional, prefix it with an underscore: `_spi`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `buffer`
[INFO] [stdout]    --> src/uc1638/lcd_async.rs:113:9
[INFO] [stdout]     |
[INFO] [stdout] 113 |         buffer: &[u8],
[INFO] [stdout]     |         ^^^^^^ help: if this is intentional, prefix it with an underscore: `_buffer`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `delay`
[INFO] [stdout]    --> src/uc1638/lcd_async.rs:114:9
[INFO] [stdout]     |
[INFO] [stdout] 114 |         delay: &mut DELAY
[INFO] [stdout]     |         ^^^^^ help: if this is intentional, prefix it with an underscore: `_delay`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `spi`
[INFO] [stdout]    --> src/uc1638/lcd_async.rs:119:38
[INFO] [stdout]     |
[INFO] [stdout] 119 |     async  fn clear_frame(&mut self, spi: &mut SPI, _delay: &mut DELAY) -> Result<(), SPI::Error> {
[INFO] [stdout]     |                                      ^^^ help: if this is intentional, prefix it with an underscore: `_spi`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `color_value`
[INFO] [stdout]    --> src/uc1638/lcd_async.rs:120:13
[INFO] [stdout]     |
[INFO] [stdout] 120 |         let color_value = self.color.get_byte_value();
[INFO] [stdout]     |             ^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_color_value`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `spi`
[INFO] [stdout]    --> src/uc1638/lcd_async.rs:203:41
[INFO] [stdout]     |
[INFO] [stdout] 203 |     async fn send_resolution(&mut self, spi: &mut SPI) -> Result<(), SPI::Error> {
[INFO] [stdout]     |                                         ^^^ help: if this is intentional, prefix it with an underscore: `_spi`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `data_x_times` is never used
[INFO] [stdout]   --> src/interface_async.rs:87:25
[INFO] [stdout]    |
[INFO] [stdout] 22 | / impl<SPI,  DC, RST, DELAY> DisplayInterface<SPI,  DC, RST, DELAY>
[INFO] [stdout] 23 | | where
[INFO] [stdout] 24 | |     SPI: SpiDevice,
[INFO] [stdout] 25 | |     DC: OutputPin,
[INFO] [stdout] 26 | |     RST: OutputPin,
[INFO] [stdout] 27 | |     DELAY: DelayNs,
[INFO] [stdout]    | |___________________- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 87 |       pub(crate) async fn data_x_times(
[INFO] [stdout]    |                           ^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `command`, `cmd_with_data`, and `send_resolution` are never used
[INFO] [stdout]    --> src/uc1638/lcd_async.rs:191:14
[INFO] [stdout]     |
[INFO] [stdout] 142 | / impl<SPI, DC, RST, DELAY> Lcd2in7<SPI, DC, RST, DELAY>
[INFO] [stdout] 143 | |     where
[INFO] [stdout] 144 | |         SPI: SpiDevice,
[INFO] [stdout] 145 | |         DC: OutputPin,
[INFO] [stdout] 146 | |         RST: OutputPin,
[INFO] [stdout] 147 | |         DELAY: DelayNs,
[INFO] [stdout]     | |_______________________- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 191 |       async fn command(&mut self, spi: &mut SPI, command: Command) -> Result<(), SPI::Error> {
[INFO] [stdout]     |                ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 194 |       async fn cmd_with_data(
[INFO] [stdout]     |                ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 203 |       async fn send_resolution(&mut self, spi: &mut SPI) -> Result<(), SPI::Error> {
[INFO] [stdout]     |                ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of `async fn` in public traits is discouraged as auto trait bounds cannot be specified
[INFO] [stdout]   --> src/traits_async.rs:39:5
[INFO] [stdout]    |
[INFO] [stdout] 39 |     async fn new(
[INFO] [stdout]    |     ^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: you can suppress this lint if you plan to use the trait only in your own code, or do not care about auto traits like `Send` on the `Future`
[INFO] [stdout]    = note: `#[warn(async_fn_in_trait)]` on by default
[INFO] [stdout] help: you can alternatively desugar to a normal `fn` that returns `impl Future` and add any desired bounds such as `Send`, but these cannot be relaxed without a breaking API change
[INFO] [stdout]    |
[INFO] [stdout] 39 ~     fn new(
[INFO] [stdout] 40 |         spi: &mut SPI,
[INFO] [stdout] ...
[INFO] [stdout] 43 |         delay: &mut DELAY,
[INFO] [stdout] 44 ~     ) -> impl std::future::Future<Output = Result<Self, SPI::Error>> + Send
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of `async fn` in public traits is discouraged as auto trait bounds cannot be specified
[INFO] [stdout]   --> src/traits_async.rs:61:5
[INFO] [stdout]    |
[INFO] [stdout] 61 |     async fn update_frame(
[INFO] [stdout]    |     ^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: you can suppress this lint if you plan to use the trait only in your own code, or do not care about auto traits like `Send` on the `Future`
[INFO] [stdout] help: you can alternatively desugar to a normal `fn` that returns `impl Future` and add any desired bounds such as `Send`, but these cannot be relaxed without a breaking API change
[INFO] [stdout]    |
[INFO] [stdout] 61 ~     fn update_frame(
[INFO] [stdout] 62 |         &mut self,
[INFO] [stdout] ...
[INFO] [stdout] 65 |         delay: &mut DELAY
[INFO] [stdout] 66 ~     ) -> impl std::future::Future<Output = Result<(), SPI::Error>> + Send;
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of `async fn` in public traits is discouraged as auto trait bounds cannot be specified
[INFO] [stdout]   --> src/traits_async.rs:73:5
[INFO] [stdout]    |
[INFO] [stdout] 73 |     async  fn update_partial_frame(
[INFO] [stdout]    |     ^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: you can suppress this lint if you plan to use the trait only in your own code, or do not care about auto traits like `Send` on the `Future`
[INFO] [stdout] help: you can alternatively desugar to a normal `fn` that returns `impl Future` and add any desired bounds such as `Send`, but these cannot be relaxed without a breaking API change
[INFO] [stdout]    |
[INFO] [stdout] 73 ~     fn update_partial_frame(
[INFO] [stdout] 74 |         &mut self,
[INFO] [stdout] ...
[INFO] [stdout] 80 |         height: u32,
[INFO] [stdout] 81 ~     ) -> impl std::future::Future<Output = Result<(), SPI::Error>> + Send;
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of `async fn` in public traits is discouraged as auto trait bounds cannot be specified
[INFO] [stdout]   --> src/traits_async.rs:86:5
[INFO] [stdout]    |
[INFO] [stdout] 86 |     async  fn display_frame(&mut self, spi: &mut SPI,delay: &mut DELAY) -> Result<(), SPI::Error>;
[INFO] [stdout]    |     ^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: you can suppress this lint if you plan to use the trait only in your own code, or do not care about auto traits like `Send` on the `Future`
[INFO] [stdout] help: you can alternatively desugar to a normal `fn` that returns `impl Future` and add any desired bounds such as `Send`, but these cannot be relaxed without a breaking API change
[INFO] [stdout]    |
[INFO] [stdout] 86 -     async  fn display_frame(&mut self, spi: &mut SPI,delay: &mut DELAY) -> Result<(), SPI::Error>;
[INFO] [stdout] 86 +     fn display_frame(&mut self, spi: &mut SPI,delay: &mut DELAY) -> impl std::future::Future<Output = Result<(), SPI::Error>> + Send;
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of `async fn` in public traits is discouraged as auto trait bounds cannot be specified
[INFO] [stdout]   --> src/traits_async.rs:89:5
[INFO] [stdout]    |
[INFO] [stdout] 89 |     async  fn update_and_display_frame(
[INFO] [stdout]    |     ^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: you can suppress this lint if you plan to use the trait only in your own code, or do not care about auto traits like `Send` on the `Future`
[INFO] [stdout] help: you can alternatively desugar to a normal `fn` that returns `impl Future` and add any desired bounds such as `Send`, but these cannot be relaxed without a breaking API change
[INFO] [stdout]    |
[INFO] [stdout] 89 ~     fn update_and_display_frame(
[INFO] [stdout] 90 |         &mut self,
[INFO] [stdout] ...
[INFO] [stdout] 93 |         delay: &mut DELAY
[INFO] [stdout] 94 ~     ) -> impl std::future::Future<Output = Result<(), SPI::Error>> + Send;
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of `async fn` in public traits is discouraged as auto trait bounds cannot be specified
[INFO] [stdout]   --> src/traits_async.rs:99:5
[INFO] [stdout]    |
[INFO] [stdout] 99 |     async  fn clear_frame(&mut self, spi: &mut SPI, delay: &mut DELAY) -> Result<(), SPI::Error>;
[INFO] [stdout]    |     ^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: you can suppress this lint if you plan to use the trait only in your own code, or do not care about auto traits like `Send` on the `Future`
[INFO] [stdout] help: you can alternatively desugar to a normal `fn` that returns `impl Future` and add any desired bounds such as `Send`, but these cannot be relaxed without a breaking API change
[INFO] [stdout]    |
[INFO] [stdout] 99 -     async  fn clear_frame(&mut self, spi: &mut SPI, delay: &mut DELAY) -> Result<(), SPI::Error>;
[INFO] [stdout] 99 +     fn clear_frame(&mut self, spi: &mut SPI, delay: &mut DELAY) -> impl std::future::Future<Output = Result<(), SPI::Error>> + Send;
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable `X` should have a snake case name
[INFO] [stdout]    --> src/uc1638/lcd_async.rs:155:46
[INFO] [stdout]     |
[INFO] [stdout] 155 |     pub async fn goto(&mut self,spi:&mut SPI,X: u8, Y: u8) -> Result<(), SPI::Error>{
[INFO] [stdout]     |                                              ^ help: convert the identifier to snake case (notice the capitalization): `x`
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(non_snake_case)]` (part of `#[warn(nonstandard_style)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable `Y` should have a snake case name
[INFO] [stdout]    --> src/uc1638/lcd_async.rs:155:53
[INFO] [stdout]     |
[INFO] [stdout] 155 |     pub async fn goto(&mut self,spi:&mut SPI,X: u8, Y: u8) -> Result<(), SPI::Error>{
[INFO] [stdout]     |                                                     ^ help: convert the identifier to snake case (notice the capitalization): `y`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable `YY` should have a snake case name
[INFO] [stdout]    --> src/uc1638/lcd_async.rs:156:17
[INFO] [stdout]     |
[INFO] [stdout] 156 |         let mut YY = Y;
[INFO] [stdout]     |                 ^^ help: convert the identifier to snake case (notice the capitalization): `yy`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr]    Compiling lcd-drivers v0.1.0 (/opt/rustwide/workdir)
[INFO] [stdout] warning: unused import: `Color`
[INFO] [stdout]  --> src/graphics.rs:4:20
[INFO] [stdout]   |
[INFO] [stdout] 4 | use crate::color::{Color, OctColor, TriColor, TwoBitColor};
[INFO] [stdout]   |                    ^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `DisplayRotation`, `Display`, `VarDisplay`, `buffer_len`, `find_position`, and `outside_display`
[INFO] [stdout]    --> src/graphics.rs:479:17
[INFO] [stdout]     |
[INFO] [stdout] 479 |     use super::{buffer_len, find_position, outside_display, Display, DisplayRotation, VarDisplay};
[INFO] [stdout]     |                 ^^^^^^^^^^  ^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^  ^^^^^^^  ^^^^^^^^^^^^^^^  ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::color::Black`
[INFO] [stdout]    --> src/graphics.rs:480:9
[INFO] [stdout]     |
[INFO] [stdout] 480 |     use crate::color::Black;
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::color::Color`
[INFO] [stdout]    --> src/graphics.rs:481:9
[INFO] [stdout]     |
[INFO] [stdout] 481 |     use crate::color::Color;
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Line`, `PrimitiveStyle`, and `prelude::*`
[INFO] [stdout]    --> src/graphics.rs:483:9
[INFO] [stdout]     |
[INFO] [stdout] 483 |         prelude::*,
[INFO] [stdout]     |         ^^^^^^^^^^
[INFO] [stdout] 484 |         primitives::{Line, PrimitiveStyle},
[INFO] [stdout]     |                      ^^^^  ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `digital::Wait`
[INFO] [stdout]  --> src/traits_async.rs:2:42
[INFO] [stdout]   |
[INFO] [stdout] 2 | use embedded_hal_async::{delay::DelayNs, digital::Wait, spi::SpiDevice};
[INFO] [stdout]   |                                          ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `digital::Wait`
[INFO] [stdout]  --> src/interface_async.rs:3:42
[INFO] [stdout]   |
[INFO] [stdout] 3 | use embedded_hal_async::{delay::DelayNs, digital::Wait, spi::SpiDevice};
[INFO] [stdout]   |                                          ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `prelude::*`
[INFO] [stdout]  --> src/uc1638/mod.rs:2:33
[INFO] [stdout]   |
[INFO] [stdout] 2 | use crate::{color::TwoBitColor, prelude::*};
[INFO] [stdout]   |                                 ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `command::Command`
[INFO] [stdout]  --> src/uc1638/mod.rs:3:5
[INFO] [stdout]   |
[INFO] [stdout] 3 | use command::Command;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `core::marker::Sized`
[INFO] [stdout]  --> src/uc1638/lcd_async.rs:1:5
[INFO] [stdout]   |
[INFO] [stdout] 1 | use core::marker::Sized;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `digital::Wait`
[INFO] [stdout]  --> src/uc1638/lcd_async.rs:2:42
[INFO] [stdout]   |
[INFO] [stdout] 2 | use embedded_hal_async::{delay::DelayNs, digital::Wait, spi::SpiDevice};
[INFO] [stdout]   |                                          ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `prelude::*`
[INFO] [stdout]  --> src/uc1638/lcd_async.rs:6:33
[INFO] [stdout]   |
[INFO] [stdout] 6 | use crate::{color::TwoBitColor, prelude::*};
[INFO] [stdout]   |                                 ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary trailing semicolon
[INFO] [stdout]   --> src/uc1638/lcd_async.rs:50:56
[INFO] [stdout]    |
[INFO] [stdout] 50 |         self.cmd_with_data_u8(spi, 0xf1, &[95]).await?;;
[INFO] [stdout]    |                                                        ^ help: remove this semicolon
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(redundant_semicolons)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary parentheses around `if` condition
[INFO] [stdout]    --> src/uc1638/lcd_async.rs:157:11
[INFO] [stdout]     |
[INFO] [stdout] 157 |         if(Y>23){YY=0;}    //保证页面代码最大为11
[INFO] [stdout]     |           ^    ^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_parens)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] help: remove these parentheses
[INFO] [stdout]     |
[INFO] [stdout] 157 -         if(Y>23){YY=0;}    //保证页面代码最大为11
[INFO] [stdout] 157 +         if Y>23 {YY=0;}    //保证页面代码最大为11
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Mode`, `Phase`, and `Polarity`
[INFO] [stdout]   --> src/lib.rs:71:28
[INFO] [stdout]    |
[INFO] [stdout] 71 | use embedded_hal_v2::spi::{Mode, Phase, Polarity};
[INFO] [stdout]    |                            ^^^^  ^^^^^  ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Display`
[INFO] [stdout]  --> src/uc1638/graphics.rs:9:23
[INFO] [stdout]   |
[INFO] [stdout] 9 | use crate::graphics::{Display, DisplayRotation};
[INFO] [stdout]   |                       ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `spi`
[INFO] [stdout]   --> src/uc1638/lcd_async.rs:96:9
[INFO] [stdout]    |
[INFO] [stdout] 96 |         spi: &mut SPI,
[INFO] [stdout]    |         ^^^ help: if this is intentional, prefix it with an underscore: `_spi`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `buffer`
[INFO] [stdout]   --> src/uc1638/lcd_async.rs:97:9
[INFO] [stdout]    |
[INFO] [stdout] 97 |         buffer: &[u8],
[INFO] [stdout]    |         ^^^^^^ help: if this is intentional, prefix it with an underscore: `_buffer`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `x`
[INFO] [stdout]   --> src/uc1638/lcd_async.rs:98:9
[INFO] [stdout]    |
[INFO] [stdout] 98 |         x: u32,
[INFO] [stdout]    |         ^ help: if this is intentional, prefix it with an underscore: `_x`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `y`
[INFO] [stdout]   --> src/uc1638/lcd_async.rs:99:9
[INFO] [stdout]    |
[INFO] [stdout] 99 |         y: u32,
[INFO] [stdout]    |         ^ help: if this is intentional, prefix it with an underscore: `_y`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `width`
[INFO] [stdout]    --> src/uc1638/lcd_async.rs:100:9
[INFO] [stdout]     |
[INFO] [stdout] 100 |         width: u32,
[INFO] [stdout]     |         ^^^^^
[INFO] [stdout]     |
[INFO] [stdout] help: you might have meant to pattern match on the similarly named constant `WIDTH`
[INFO] [stdout]     |
[INFO] [stdout] 100 -         width: u32,
[INFO] [stdout] 100 +         uc1638::WIDTH: u32,
[INFO] [stdout]     |
[INFO] [stdout] help: if this is intentional, prefix it with an underscore
[INFO] [stdout]     |
[INFO] [stdout] 100 |         _width: u32,
[INFO] [stdout]     |         +
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `height`
[INFO] [stdout]    --> src/uc1638/lcd_async.rs:101:9
[INFO] [stdout]     |
[INFO] [stdout] 101 |         height: u32,
[INFO] [stdout]     |         ^^^^^^
[INFO] [stdout]     |
[INFO] [stdout] help: you might have meant to pattern match on the similarly named constant `HEIGHT`
[INFO] [stdout]     |
[INFO] [stdout] 101 -         height: u32,
[INFO] [stdout] 101 +         uc1638::HEIGHT: u32,
[INFO] [stdout]     |
[INFO] [stdout] help: if this is intentional, prefix it with an underscore
[INFO] [stdout]     |
[INFO] [stdout] 101 |         _height: u32,
[INFO] [stdout]     |         +
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `spi`
[INFO] [stdout]    --> src/uc1638/lcd_async.rs:106:40
[INFO] [stdout]     |
[INFO] [stdout] 106 |     async  fn display_frame(&mut self, spi: &mut SPI, _delay: &mut DELAY) -> Result<(), SPI::Error> {
[INFO] [stdout]     |                                        ^^^ help: if this is intentional, prefix it with an underscore: `_spi`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `spi`
[INFO] [stdout]    --> src/uc1638/lcd_async.rs:112:9
[INFO] [stdout]     |
[INFO] [stdout] 112 |         spi: &mut SPI,
[INFO] [stdout]     |         ^^^ help: if this is intentional, prefix it with an underscore: `_spi`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `buffer`
[INFO] [stdout]    --> src/uc1638/lcd_async.rs:113:9
[INFO] [stdout]     |
[INFO] [stdout] 113 |         buffer: &[u8],
[INFO] [stdout]     |         ^^^^^^ help: if this is intentional, prefix it with an underscore: `_buffer`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `delay`
[INFO] [stdout]    --> src/uc1638/lcd_async.rs:114:9
[INFO] [stdout]     |
[INFO] [stdout] 114 |         delay: &mut DELAY
[INFO] [stdout]     |         ^^^^^ help: if this is intentional, prefix it with an underscore: `_delay`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `spi`
[INFO] [stdout]    --> src/uc1638/lcd_async.rs:119:38
[INFO] [stdout]     |
[INFO] [stdout] 119 |     async  fn clear_frame(&mut self, spi: &mut SPI, _delay: &mut DELAY) -> Result<(), SPI::Error> {
[INFO] [stdout]     |                                      ^^^ help: if this is intentional, prefix it with an underscore: `_spi`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `color_value`
[INFO] [stdout]    --> src/uc1638/lcd_async.rs:120:13
[INFO] [stdout]     |
[INFO] [stdout] 120 |         let color_value = self.color.get_byte_value();
[INFO] [stdout]     |             ^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_color_value`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `spi`
[INFO] [stdout]    --> src/uc1638/lcd_async.rs:203:41
[INFO] [stdout]     |
[INFO] [stdout] 203 |     async fn send_resolution(&mut self, spi: &mut SPI) -> Result<(), SPI::Error> {
[INFO] [stdout]     |                                         ^^^ help: if this is intentional, prefix it with an underscore: `_spi`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `data_x_times` is never used
[INFO] [stdout]   --> src/interface_async.rs:87:25
[INFO] [stdout]    |
[INFO] [stdout] 22 | / impl<SPI,  DC, RST, DELAY> DisplayInterface<SPI,  DC, RST, DELAY>
[INFO] [stdout] 23 | | where
[INFO] [stdout] 24 | |     SPI: SpiDevice,
[INFO] [stdout] 25 | |     DC: OutputPin,
[INFO] [stdout] 26 | |     RST: OutputPin,
[INFO] [stdout] 27 | |     DELAY: DelayNs,
[INFO] [stdout]    | |___________________- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 87 |       pub(crate) async fn data_x_times(
[INFO] [stdout]    |                           ^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `command`, `cmd_with_data`, and `send_resolution` are never used
[INFO] [stdout]    --> src/uc1638/lcd_async.rs:191:14
[INFO] [stdout]     |
[INFO] [stdout] 142 | / impl<SPI, DC, RST, DELAY> Lcd2in7<SPI, DC, RST, DELAY>
[INFO] [stdout] 143 | |     where
[INFO] [stdout] 144 | |         SPI: SpiDevice,
[INFO] [stdout] 145 | |         DC: OutputPin,
[INFO] [stdout] 146 | |         RST: OutputPin,
[INFO] [stdout] 147 | |         DELAY: DelayNs,
[INFO] [stdout]     | |_______________________- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 191 |       async fn command(&mut self, spi: &mut SPI, command: Command) -> Result<(), SPI::Error> {
[INFO] [stdout]     |                ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 194 |       async fn cmd_with_data(
[INFO] [stdout]     |                ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 203 |       async fn send_resolution(&mut self, spi: &mut SPI) -> Result<(), SPI::Error> {
[INFO] [stdout]     |                ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of `async fn` in public traits is discouraged as auto trait bounds cannot be specified
[INFO] [stdout]   --> src/traits_async.rs:39:5
[INFO] [stdout]    |
[INFO] [stdout] 39 |     async fn new(
[INFO] [stdout]    |     ^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: you can suppress this lint if you plan to use the trait only in your own code, or do not care about auto traits like `Send` on the `Future`
[INFO] [stdout]    = note: `#[warn(async_fn_in_trait)]` on by default
[INFO] [stdout] help: you can alternatively desugar to a normal `fn` that returns `impl Future` and add any desired bounds such as `Send`, but these cannot be relaxed without a breaking API change
[INFO] [stdout]    |
[INFO] [stdout] 39 ~     fn new(
[INFO] [stdout] 40 |         spi: &mut SPI,
[INFO] [stdout] ...
[INFO] [stdout] 43 |         delay: &mut DELAY,
[INFO] [stdout] 44 ~     ) -> impl std::future::Future<Output = Result<Self, SPI::Error>> + Send
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of `async fn` in public traits is discouraged as auto trait bounds cannot be specified
[INFO] [stdout]   --> src/traits_async.rs:61:5
[INFO] [stdout]    |
[INFO] [stdout] 61 |     async fn update_frame(
[INFO] [stdout]    |     ^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: you can suppress this lint if you plan to use the trait only in your own code, or do not care about auto traits like `Send` on the `Future`
[INFO] [stdout] help: you can alternatively desugar to a normal `fn` that returns `impl Future` and add any desired bounds such as `Send`, but these cannot be relaxed without a breaking API change
[INFO] [stdout]    |
[INFO] [stdout] 61 ~     fn update_frame(
[INFO] [stdout] 62 |         &mut self,
[INFO] [stdout] ...
[INFO] [stdout] 65 |         delay: &mut DELAY
[INFO] [stdout] 66 ~     ) -> impl std::future::Future<Output = Result<(), SPI::Error>> + Send;
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of `async fn` in public traits is discouraged as auto trait bounds cannot be specified
[INFO] [stdout]   --> src/traits_async.rs:73:5
[INFO] [stdout]    |
[INFO] [stdout] 73 |     async  fn update_partial_frame(
[INFO] [stdout]    |     ^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: you can suppress this lint if you plan to use the trait only in your own code, or do not care about auto traits like `Send` on the `Future`
[INFO] [stdout] help: you can alternatively desugar to a normal `fn` that returns `impl Future` and add any desired bounds such as `Send`, but these cannot be relaxed without a breaking API change
[INFO] [stdout]    |
[INFO] [stdout] 73 ~     fn update_partial_frame(
[INFO] [stdout] 74 |         &mut self,
[INFO] [stdout] ...
[INFO] [stdout] 80 |         height: u32,
[INFO] [stdout] 81 ~     ) -> impl std::future::Future<Output = Result<(), SPI::Error>> + Send;
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of `async fn` in public traits is discouraged as auto trait bounds cannot be specified
[INFO] [stdout]   --> src/traits_async.rs:86:5
[INFO] [stdout]    |
[INFO] [stdout] 86 |     async  fn display_frame(&mut self, spi: &mut SPI,delay: &mut DELAY) -> Result<(), SPI::Error>;
[INFO] [stdout]    |     ^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: you can suppress this lint if you plan to use the trait only in your own code, or do not care about auto traits like `Send` on the `Future`
[INFO] [stdout] help: you can alternatively desugar to a normal `fn` that returns `impl Future` and add any desired bounds such as `Send`, but these cannot be relaxed without a breaking API change
[INFO] [stdout]    |
[INFO] [stdout] 86 -     async  fn display_frame(&mut self, spi: &mut SPI,delay: &mut DELAY) -> Result<(), SPI::Error>;
[INFO] [stdout] 86 +     fn display_frame(&mut self, spi: &mut SPI,delay: &mut DELAY) -> impl std::future::Future<Output = Result<(), SPI::Error>> + Send;
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of `async fn` in public traits is discouraged as auto trait bounds cannot be specified
[INFO] [stdout]   --> src/traits_async.rs:89:5
[INFO] [stdout]    |
[INFO] [stdout] 89 |     async  fn update_and_display_frame(
[INFO] [stdout]    |     ^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: you can suppress this lint if you plan to use the trait only in your own code, or do not care about auto traits like `Send` on the `Future`
[INFO] [stdout] help: you can alternatively desugar to a normal `fn` that returns `impl Future` and add any desired bounds such as `Send`, but these cannot be relaxed without a breaking API change
[INFO] [stdout]    |
[INFO] [stdout] 89 ~     fn update_and_display_frame(
[INFO] [stdout] 90 |         &mut self,
[INFO] [stdout] ...
[INFO] [stdout] 93 |         delay: &mut DELAY
[INFO] [stdout] 94 ~     ) -> impl std::future::Future<Output = Result<(), SPI::Error>> + Send;
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of `async fn` in public traits is discouraged as auto trait bounds cannot be specified
[INFO] [stdout]   --> src/traits_async.rs:99:5
[INFO] [stdout]    |
[INFO] [stdout] 99 |     async  fn clear_frame(&mut self, spi: &mut SPI, delay: &mut DELAY) -> Result<(), SPI::Error>;
[INFO] [stdout]    |     ^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: you can suppress this lint if you plan to use the trait only in your own code, or do not care about auto traits like `Send` on the `Future`
[INFO] [stdout] help: you can alternatively desugar to a normal `fn` that returns `impl Future` and add any desired bounds such as `Send`, but these cannot be relaxed without a breaking API change
[INFO] [stdout]    |
[INFO] [stdout] 99 -     async  fn clear_frame(&mut self, spi: &mut SPI, delay: &mut DELAY) -> Result<(), SPI::Error>;
[INFO] [stdout] 99 +     fn clear_frame(&mut self, spi: &mut SPI, delay: &mut DELAY) -> impl std::future::Future<Output = Result<(), SPI::Error>> + Send;
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable `X` should have a snake case name
[INFO] [stdout]    --> src/uc1638/lcd_async.rs:155:46
[INFO] [stdout]     |
[INFO] [stdout] 155 |     pub async fn goto(&mut self,spi:&mut SPI,X: u8, Y: u8) -> Result<(), SPI::Error>{
[INFO] [stdout]     |                                              ^ help: convert the identifier to snake case (notice the capitalization): `x`
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(non_snake_case)]` (part of `#[warn(nonstandard_style)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable `Y` should have a snake case name
[INFO] [stdout]    --> src/uc1638/lcd_async.rs:155:53
[INFO] [stdout]     |
[INFO] [stdout] 155 |     pub async fn goto(&mut self,spi:&mut SPI,X: u8, Y: u8) -> Result<(), SPI::Error>{
[INFO] [stdout]     |                                                     ^ help: convert the identifier to snake case (notice the capitalization): `y`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable `YY` should have a snake case name
[INFO] [stdout]    --> src/uc1638/lcd_async.rs:156:17
[INFO] [stdout]     |
[INFO] [stdout] 156 |         let mut YY = Y;
[INFO] [stdout]     |                 ^^ help: convert the identifier to snake case (notice the capitalization): `yy`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr]     Finished `test` profile [unoptimized + debuginfo] target(s) in 0.87s
[INFO] running `Command { std: "docker" "inspect" "c1796495ab39ec4d1e688fedab83be03536513fa16666099128d37c4e7d747fd", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "c1796495ab39ec4d1e688fedab83be03536513fa16666099128d37c4e7d747fd", kill_on_drop: false }`
[INFO] [stdout] c1796495ab39ec4d1e688fedab83be03536513fa16666099128d37c4e7d747fd
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-2-tc2/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-2-tc2/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=forbid" "-e" "RUSTDOCFLAGS=--cap-lints=forbid" "-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:845e597a41426bbf2703be69acdb67d10b6de511142d05cba7bbe119c898b2c7" "/opt/rustwide/cargo-home/bin/cargo" "+db823df02fd0c2cf67b43025ac3fef3f2d743245" "test" "--frozen", kill_on_drop: false }`
[INFO] [stdout] 9b409720600289b18b4039ae5a2eb10fb98aa6b674c827f6c6c009c1f3a69523
[INFO] running `Command { std: "docker" "start" "-a" "9b409720600289b18b4039ae5a2eb10fb98aa6b674c827f6c6c009c1f3a69523", kill_on_drop: false }`
[INFO] [stderr] warning: unused import: `Color`
[INFO] [stderr]  --> src/graphics.rs:4:20
[INFO] [stderr]   |
[INFO] [stderr] 4 | use crate::color::{Color, OctColor, TriColor, TwoBitColor};
[INFO] [stderr]   |                    ^^^^^
[INFO] [stderr]   |
[INFO] [stderr]   = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `digital::Wait`
[INFO] [stderr]  --> src/interface_async.rs:3:42
[INFO] [stderr]   |
[INFO] [stderr] 3 | use embedded_hal_async::{delay::DelayNs, digital::Wait, spi::SpiDevice};
[INFO] [stderr]   |                                          ^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `prelude::*`
[INFO] [stderr]  --> src/uc1638/mod.rs:2:33
[INFO] [stderr]   |
[INFO] [stderr] 2 | use crate::{color::TwoBitColor, prelude::*};
[INFO] [stderr]   |                                 ^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `command::Command`
[INFO] [stderr]  --> src/uc1638/mod.rs:3:5
[INFO] [stderr]   |
[INFO] [stderr] 3 | use command::Command;
[INFO] [stderr]   |     ^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `core::marker::Sized`
[INFO] [stderr]  --> src/uc1638/lcd_async.rs:1:5
[INFO] [stderr]   |
[INFO] [stderr] 1 | use core::marker::Sized;
[INFO] [stderr]   |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `digital::Wait`
[INFO] [stderr]  --> src/uc1638/lcd_async.rs:2:42
[INFO] [stderr]   |
[INFO] [stderr] 2 | use embedded_hal_async::{delay::DelayNs, digital::Wait, spi::SpiDevice};
[INFO] [stderr]   |                                          ^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `prelude::*`
[INFO] [stderr]  --> src/uc1638/lcd_async.rs:6:33
[INFO] [stderr]   |
[INFO] [stderr] 6 | use crate::{color::TwoBitColor, prelude::*};
[INFO] [stderr]   |                                 ^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unnecessary trailing semicolon
[INFO] [stderr]   --> src/uc1638/lcd_async.rs:50:56
[INFO] [stderr]    |
[INFO] [stderr] 50 |         self.cmd_with_data_u8(spi, 0xf1, &[95]).await?;;
[INFO] [stderr]    |                                                        ^ help: remove this semicolon
[INFO] [stderr]    |
[INFO] [stderr]    = note: `#[warn(redundant_semicolons)]` (part of `#[warn(unused)]`) on by default
[INFO] [stderr] 
[INFO] [stderr] warning: unnecessary parentheses around `if` condition
[INFO] [stderr]    --> src/uc1638/lcd_async.rs:157:11
[INFO] [stderr]     |
[INFO] [stderr] 157 |         if(Y>23){YY=0;}    //保证页面代码最大为11
[INFO] [stderr]     |           ^    ^
[INFO] [stderr]     |
[INFO] [stderr]     = note: `#[warn(unused_parens)]` (part of `#[warn(unused)]`) on by default
[INFO] [stderr] help: remove these parentheses
[INFO] [stderr]     |
[INFO] [stderr] 157 -         if(Y>23){YY=0;}    //保证页面代码最大为11
[INFO] [stderr] 157 +         if Y>23 {YY=0;}    //保证页面代码最大为11
[INFO] [stderr]     |
[INFO] [stderr] 
[INFO] [stderr] warning: unused imports: `Mode`, `Phase`, and `Polarity`
[INFO] [stderr]   --> src/lib.rs:71:28
[INFO] [stderr]    |
[INFO] [stderr] 71 | use embedded_hal_v2::spi::{Mode, Phase, Polarity};
[INFO] [stderr]    |                            ^^^^  ^^^^^  ^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `Display`
[INFO] [stderr]  --> src/uc1638/graphics.rs:9:23
[INFO] [stderr]   |
[INFO] [stderr] 9 | use crate::graphics::{Display, DisplayRotation};
[INFO] [stderr]   |                       ^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `digital::Wait`
[INFO] [stderr]  --> src/traits_async.rs:2:42
[INFO] [stderr]   |
[INFO] [stderr] 2 | use embedded_hal_async::{delay::DelayNs, digital::Wait, spi::SpiDevice};
[INFO] [stderr]   |                                          ^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `spi`
[INFO] [stderr]   --> src/uc1638/lcd_async.rs:96:9
[INFO] [stderr]    |
[INFO] [stderr] 96 |         spi: &mut SPI,
[INFO] [stderr]    |         ^^^ help: if this is intentional, prefix it with an underscore: `_spi`
[INFO] [stderr]    |
[INFO] [stderr]    = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `buffer`
[INFO] [stderr]   --> src/uc1638/lcd_async.rs:97:9
[INFO] [stderr]    |
[INFO] [stderr] 97 |         buffer: &[u8],
[INFO] [stderr]    |         ^^^^^^ help: if this is intentional, prefix it with an underscore: `_buffer`
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `x`
[INFO] [stderr]   --> src/uc1638/lcd_async.rs:98:9
[INFO] [stderr]    |
[INFO] [stderr] 98 |         x: u32,
[INFO] [stderr]    |         ^ help: if this is intentional, prefix it with an underscore: `_x`
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `y`
[INFO] [stderr]   --> src/uc1638/lcd_async.rs:99:9
[INFO] [stderr]    |
[INFO] [stderr] 99 |         y: u32,
[INFO] [stderr]    |         ^ help: if this is intentional, prefix it with an underscore: `_y`
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `width`
[INFO] [stderr]    --> src/uc1638/lcd_async.rs:100:9
[INFO] [stderr]     |
[INFO] [stderr] 100 |         width: u32,
[INFO] [stderr]     |         ^^^^^
[INFO] [stderr]     |
[INFO] [stderr] help: you might have meant to pattern match on the similarly named constant `WIDTH`
[INFO] [stderr]     |
[INFO] [stderr] 100 -         width: u32,
[INFO] [stderr] 100 +         uc1638::WIDTH: u32,
[INFO] [stderr]     |
[INFO] [stderr] help: if this is intentional, prefix it with an underscore
[INFO] [stderr]     |
[INFO] [stderr] 100 |         _width: u32,
[INFO] [stderr]     |         +
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `height`
[INFO] [stderr]    --> src/uc1638/lcd_async.rs:101:9
[INFO] [stderr]     |
[INFO] [stderr] 101 |         height: u32,
[INFO] [stderr]     |         ^^^^^^
[INFO] [stderr]     |
[INFO] [stderr] help: you might have meant to pattern match on the similarly named constant `HEIGHT`
[INFO] [stderr]     |
[INFO] [stderr] 101 -         height: u32,
[INFO] [stderr] 101 +         uc1638::HEIGHT: u32,
[INFO] [stderr]     |
[INFO] [stderr] help: if this is intentional, prefix it with an underscore
[INFO] [stderr]     |
[INFO] [stderr] 101 |         _height: u32,
[INFO] [stderr]     |         +
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `spi`
[INFO] [stderr]    --> src/uc1638/lcd_async.rs:106:40
[INFO] [stderr]     |
[INFO] [stderr] 106 |     async  fn display_frame(&mut self, spi: &mut SPI, _delay: &mut DELAY) -> Result<(), SPI::Error> {
[INFO] [stderr]     |                                        ^^^ help: if this is intentional, prefix it with an underscore: `_spi`
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `spi`
[INFO] [stderr]    --> src/uc1638/lcd_async.rs:112:9
[INFO] [stderr]     |
[INFO] [stderr] 112 |         spi: &mut SPI,
[INFO] [stderr]     |         ^^^ help: if this is intentional, prefix it with an underscore: `_spi`
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `buffer`
[INFO] [stderr]    --> src/uc1638/lcd_async.rs:113:9
[INFO] [stderr]     |
[INFO] [stderr] 113 |         buffer: &[u8],
[INFO] [stderr]     |         ^^^^^^ help: if this is intentional, prefix it with an underscore: `_buffer`
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `delay`
[INFO] [stderr]    --> src/uc1638/lcd_async.rs:114:9
[INFO] [stderr]     |
[INFO] [stderr] 114 |         delay: &mut DELAY
[INFO] [stderr]     |         ^^^^^ help: if this is intentional, prefix it with an underscore: `_delay`
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `spi`
[INFO] [stderr]    --> src/uc1638/lcd_async.rs:119:38
[INFO] [stderr]     |
[INFO] [stderr] 119 |     async  fn clear_frame(&mut self, spi: &mut SPI, _delay: &mut DELAY) -> Result<(), SPI::Error> {
[INFO] [stderr]     |                                      ^^^ help: if this is intentional, prefix it with an underscore: `_spi`
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `color_value`
[INFO] [stderr]    --> src/uc1638/lcd_async.rs:120:13
[INFO] [stderr]     |
[INFO] [stderr] 120 |         let color_value = self.color.get_byte_value();
[INFO] [stderr]     |             ^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_color_value`
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `spi`
[INFO] [stderr]    --> src/uc1638/lcd_async.rs:203:41
[INFO] [stderr]     |
[INFO] [stderr] 203 |     async fn send_resolution(&mut self, spi: &mut SPI) -> Result<(), SPI::Error> {
[INFO] [stderr]     |                                         ^^^ help: if this is intentional, prefix it with an underscore: `_spi`
[INFO] [stderr] 
[INFO] [stderr] warning: method `data_x_times` is never used
[INFO] [stderr]   --> src/interface_async.rs:87:25
[INFO] [stderr]    |
[INFO] [stderr] 22 | / impl<SPI,  DC, RST, DELAY> DisplayInterface<SPI,  DC, RST, DELAY>
[INFO] [stderr] 23 | | where
[INFO] [stderr] 24 | |     SPI: SpiDevice,
[INFO] [stderr] 25 | |     DC: OutputPin,
[INFO] [stderr] 26 | |     RST: OutputPin,
[INFO] [stderr] 27 | |     DELAY: DelayNs,
[INFO] [stderr]    | |___________________- method in this implementation
[INFO] [stderr] ...
[INFO] [stderr] 87 |       pub(crate) async fn data_x_times(
[INFO] [stderr]    |                           ^^^^^^^^^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stderr] 
[INFO] [stderr] warning: methods `command`, `cmd_with_data`, and `send_resolution` are never used
[INFO] [stderr]    --> src/uc1638/lcd_async.rs:191:14
[INFO] [stderr]     |
[INFO] [stderr] 142 | / impl<SPI, DC, RST, DELAY> Lcd2in7<SPI, DC, RST, DELAY>
[INFO] [stderr] 143 | |     where
[INFO] [stderr] 144 | |         SPI: SpiDevice,
[INFO] [stderr] 145 | |         DC: OutputPin,
[INFO] [stderr] 146 | |         RST: OutputPin,
[INFO] [stderr] 147 | |         DELAY: DelayNs,
[INFO] [stderr]     | |_______________________- methods in this implementation
[INFO] [stderr] ...
[INFO] [stderr] 191 |       async fn command(&mut self, spi: &mut SPI, command: Command) -> Result<(), SPI::Error> {
[INFO] [stderr]     |                ^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 194 |       async fn cmd_with_data(
[INFO] [stderr]     |                ^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 203 |       async fn send_resolution(&mut self, spi: &mut SPI) -> Result<(), SPI::Error> {
[INFO] [stderr]     |                ^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: use of `async fn` in public traits is discouraged as auto trait bounds cannot be specified
[INFO] [stderr]   --> src/traits_async.rs:39:5
[INFO] [stderr]    |
[INFO] [stderr] 39 |     async fn new(
[INFO] [stderr]    |     ^^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: you can suppress this lint if you plan to use the trait only in your own code, or do not care about auto traits like `Send` on the `Future`
[INFO] [stderr]    = note: `#[warn(async_fn_in_trait)]` on by default
[INFO] [stderr] help: you can alternatively desugar to a normal `fn` that returns `impl Future` and add any desired bounds such as `Send`, but these cannot be relaxed without a breaking API change
[INFO] [stderr]    |
[INFO] [stderr] 39 ~     fn new(
[INFO] [stderr] 40 |         spi: &mut SPI,
[INFO] [stderr] ...
[INFO] [stderr] 43 |         delay: &mut DELAY,
[INFO] [stderr] 44 ~     ) -> impl std::future::Future<Output = Result<Self, SPI::Error>> + Send
[INFO] [stderr]    |
[INFO] [stderr] 
[INFO] [stderr] warning: use of `async fn` in public traits is discouraged as auto trait bounds cannot be specified
[INFO] [stderr]   --> src/traits_async.rs:61:5
[INFO] [stderr]    |
[INFO] [stderr] 61 |     async fn update_frame(
[INFO] [stderr]    |     ^^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: you can suppress this lint if you plan to use the trait only in your own code, or do not care about auto traits like `Send` on the `Future`
[INFO] [stderr] help: you can alternatively desugar to a normal `fn` that returns `impl Future` and add any desired bounds such as `Send`, but these cannot be relaxed without a breaking API change
[INFO] [stderr]    |
[INFO] [stderr] 61 ~     fn update_frame(
[INFO] [stderr] 62 |         &mut self,
[INFO] [stderr] ...
[INFO] [stderr] 65 |         delay: &mut DELAY
[INFO] [stderr] 66 ~     ) -> impl std::future::Future<Output = Result<(), SPI::Error>> + Send;
[INFO] [stderr]    |
[INFO] [stderr] 
[INFO] [stderr] warning: use of `async fn` in public traits is discouraged as auto trait bounds cannot be specified
[INFO] [stderr]   --> src/traits_async.rs:73:5
[INFO] [stderr]    |
[INFO] [stderr] 73 |     async  fn update_partial_frame(
[INFO] [stderr]    |     ^^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: you can suppress this lint if you plan to use the trait only in your own code, or do not care about auto traits like `Send` on the `Future`
[INFO] [stderr] help: you can alternatively desugar to a normal `fn` that returns `impl Future` and add any desired bounds such as `Send`, but these cannot be relaxed without a breaking API change
[INFO] [stderr]    |
[INFO] [stderr] 73 ~     fn update_partial_frame(
[INFO] [stderr] 74 |         &mut self,
[INFO] [stderr] ...
[INFO] [stderr] 80 |         height: u32,
[INFO] [stderr] 81 ~     ) -> impl std::future::Future<Output = Result<(), SPI::Error>> + Send;
[INFO] [stderr]    |
[INFO] [stderr] 
[INFO] [stderr] warning: use of `async fn` in public traits is discouraged as auto trait bounds cannot be specified
[INFO] [stderr]   --> src/traits_async.rs:86:5
[INFO] [stderr]    |
[INFO] [stderr] 86 |     async  fn display_frame(&mut self, spi: &mut SPI,delay: &mut DELAY) -> Result<(), SPI::Error>;
[INFO] [stderr]    |     ^^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: you can suppress this lint if you plan to use the trait only in your own code, or do not care about auto traits like `Send` on the `Future`
[INFO] [stderr] help: you can alternatively desugar to a normal `fn` that returns `impl Future` and add any desired bounds such as `Send`, but these cannot be relaxed without a breaking API change
[INFO] [stderr]    |
[INFO] [stderr] 86 -     async  fn display_frame(&mut self, spi: &mut SPI,delay: &mut DELAY) -> Result<(), SPI::Error>;
[INFO] [stderr] 86 +     fn display_frame(&mut self, spi: &mut SPI,delay: &mut DELAY) -> impl std::future::Future<Output = Result<(), SPI::Error>> + Send;
[INFO] [stderr]    |
[INFO] [stderr] 
[INFO] [stderr] warning: use of `async fn` in public traits is discouraged as auto trait bounds cannot be specified
[INFO] [stderr]   --> src/traits_async.rs:89:5
[INFO] [stderr]    |
[INFO] [stderr] 89 |     async  fn update_and_display_frame(
[INFO] [stderr]    |     ^^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: you can suppress this lint if you plan to use the trait only in your own code, or do not care about auto traits like `Send` on the `Future`
[INFO] [stderr] help: you can alternatively desugar to a normal `fn` that returns `impl Future` and add any desired bounds such as `Send`, but these cannot be relaxed without a breaking API change
[INFO] [stderr]    |
[INFO] [stderr] 89 ~     fn update_and_display_frame(
[INFO] [stderr] 90 |         &mut self,
[INFO] [stderr] ...
[INFO] [stderr] 93 |         delay: &mut DELAY
[INFO] [stderr] 94 ~     ) -> impl std::future::Future<Output = Result<(), SPI::Error>> + Send;
[INFO] [stderr]    |
[INFO] [stderr] 
[INFO] [stderr] warning: use of `async fn` in public traits is discouraged as auto trait bounds cannot be specified
[INFO] [stderr]   --> src/traits_async.rs:99:5
[INFO] [stderr]    |
[INFO] [stderr] 99 |     async  fn clear_frame(&mut self, spi: &mut SPI, delay: &mut DELAY) -> Result<(), SPI::Error>;
[INFO] [stderr]    |     ^^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: you can suppress this lint if you plan to use the trait only in your own code, or do not care about auto traits like `Send` on the `Future`
[INFO] [stderr] help: you can alternatively desugar to a normal `fn` that returns `impl Future` and add any desired bounds such as `Send`, but these cannot be relaxed without a breaking API change
[INFO] [stderr]    |
[INFO] [stderr] 99 -     async  fn clear_frame(&mut self, spi: &mut SPI, delay: &mut DELAY) -> Result<(), SPI::Error>;
[INFO] [stderr] 99 +     fn clear_frame(&mut self, spi: &mut SPI, delay: &mut DELAY) -> impl std::future::Future<Output = Result<(), SPI::Error>> + Send;
[INFO] [stderr]    |
[INFO] [stderr] 
[INFO] [stderr] warning: variable `X` should have a snake case name
[INFO] [stderr]    --> src/uc1638/lcd_async.rs:155:46
[INFO] [stderr]     |
[INFO] [stderr] 155 |     pub async fn goto(&mut self,spi:&mut SPI,X: u8, Y: u8) -> Result<(), SPI::Error>{
[INFO] [stderr]     |                                              ^ help: convert the identifier to snake case (notice the capitalization): `x`
[INFO] [stderr]     |
[INFO] [stderr]     = note: `#[warn(non_snake_case)]` (part of `#[warn(nonstandard_style)]`) on by default
[INFO] [stderr] 
[INFO] [stderr] warning: variable `Y` should have a snake case name
[INFO] [stderr]    --> src/uc1638/lcd_async.rs:155:53
[INFO] [stderr]     |
[INFO] [stderr] 155 |     pub async fn goto(&mut self,spi:&mut SPI,X: u8, Y: u8) -> Result<(), SPI::Error>{
[INFO] [stderr]     |                                                     ^ help: convert the identifier to snake case (notice the capitalization): `y`
[INFO] [stderr] 
[INFO] [stderr] warning: variable `YY` should have a snake case name
[INFO] [stderr]    --> src/uc1638/lcd_async.rs:156:17
[INFO] [stderr]     |
[INFO] [stderr] 156 |         let mut YY = Y;
[INFO] [stderr]     |                 ^^ help: convert the identifier to snake case (notice the capitalization): `yy`
[INFO] [stderr] 
[INFO] [stderr] warning: unused imports: `DisplayRotation`, `Display`, `VarDisplay`, `buffer_len`, `find_position`, and `outside_display`
[INFO] [stderr]    --> src/graphics.rs:479:17
[INFO] [stderr]     |
[INFO] [stderr] 479 |     use super::{buffer_len, find_position, outside_display, Display, DisplayRotation, VarDisplay};
[INFO] [stderr]     |                 ^^^^^^^^^^  ^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^  ^^^^^^^  ^^^^^^^^^^^^^^^  ^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `crate::color::Black`
[INFO] [stderr]    --> src/graphics.rs:480:9
[INFO] [stderr]     |
[INFO] [stderr] 480 |     use crate::color::Black;
[INFO] [stderr]     |         ^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `crate::color::Color`
[INFO] [stderr]    --> src/graphics.rs:481:9
[INFO] [stderr]     |
[INFO] [stderr] 481 |     use crate::color::Color;
[INFO] [stderr]     |         ^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused imports: `Line`, `PrimitiveStyle`, and `prelude::*`
[INFO] [stderr]    --> src/graphics.rs:483:9
[INFO] [stderr]     |
[INFO] [stderr] 483 |         prelude::*,
[INFO] [stderr]     |         ^^^^^^^^^^
[INFO] [stderr] 484 |         primitives::{Line, PrimitiveStyle},
[INFO] [stderr]     |                      ^^^^  ^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: `lcd-drivers` (lib) generated 36 warnings (run `cargo fix --lib -p lcd-drivers` to apply 22 suggestions)
[INFO] [stderr] warning: `lcd-drivers` (lib test) generated 40 warnings (36 duplicates) (run `cargo fix --lib -p lcd-drivers --tests` to apply 4 suggestions)
[INFO] [stderr]     Finished `test` profile [unoptimized + debuginfo] target(s) in 0.10s
[INFO] [stderr]      Running unittests src/lib.rs (/opt/rustwide/target/debug/deps/lcd_drivers-7eb5d650c85d6a95)
[INFO] [stdout] 
[INFO] [stdout] running 5 tests
[INFO] [stdout] test color::tests::test_oct ... ok
[INFO] [stdout] test color::tests::u8_conversion_black ... ok
[INFO] [stdout] test color::tests::u8_conversion_white ... ok
[INFO] [stdout] test color::tests::from_u8 ... ok
[INFO] [stdout] test color::tests::from_u8_panic ... ok
[INFO] [stderr]    Doc-tests lcd_drivers
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 5 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.13s
[INFO] [stdout] 
[INFO] [stderr] warning: unnecessary trailing semicolon
[INFO] [stderr]   --> src/uc1638/lcd_async.rs:50:56
[INFO] [stderr]    |
[INFO] [stderr] 50 |         self.cmd_with_data_u8(spi, 0xf1, &[95]).await?;;
[INFO] [stderr]    |                                                        ^ help: remove this semicolon
[INFO] [stderr]    |
[INFO] [stderr]    = note: `#[warn(redundant_semicolons)]` (part of `#[warn(unused)]`) on by default
[INFO] [stderr] 
[INFO] [stderr] warning: unnecessary parentheses around `if` condition
[INFO] [stderr]    --> src/uc1638/lcd_async.rs:157:11
[INFO] [stderr]     |
[INFO] [stderr] 157 |         if(Y>23){YY=0;}    //保证页面代码最大为11
[INFO] [stderr]     |           ^    ^
[INFO] [stderr]     |
[INFO] [stderr]     = note: `#[warn(unused_parens)]` (part of `#[warn(unused)]`) on by default
[INFO] [stderr] help: remove these parentheses
[INFO] [stderr]     |
[INFO] [stderr] 157 -         if(Y>23){YY=0;}    //保证页面代码最大为11
[INFO] [stderr] 157 +         if Y>23 {YY=0;}    //保证页面代码最大为11
[INFO] [stderr]     |
[INFO] [stderr] 
[INFO] [stderr] warning: 2 warnings emitted
[INFO] [stderr] 
[INFO] [stdout] 
[INFO] [stdout] running 1 test
[INFO] [stdout] test src/graphics.rs - graphics::VarDisplay (line 319) - compile ... FAILED
[INFO] [stdout] 
[INFO] [stdout] failures:
[INFO] [stdout] 
[INFO] [stdout] ---- src/graphics.rs - graphics::VarDisplay (line 319) stdout ----
[INFO] [stdout] error[E0433]: failed to resolve: use of unresolved module or unlinked crate `epd_waveshare`
[INFO] [stdout]    --> src/graphics.rs:321:5
[INFO] [stdout]     |
[INFO] [stdout] 321 | use epd_waveshare::prelude::*;
[INFO] [stdout]     |     ^^^^^^^^^^^^^ use of unresolved module or unlinked crate `epd_waveshare`
[INFO] [stdout]     |
[INFO] [stdout]     = help: if you wanted to use a crate named `epd_waveshare`, use `cargo add epd_waveshare` to add it to your `Cargo.toml`
[INFO] [stdout] 
[INFO] [stdout] error[E0433]: failed to resolve: use of unresolved module or unlinked crate `epd_waveshare`
[INFO] [stdout]    --> src/graphics.rs:320:5
[INFO] [stdout]     |
[INFO] [stdout] 320 | use epd_waveshare::epd2in9::DEFAULT_BACKGROUND_COLOR;
[INFO] [stdout]     |     ^^^^^^^^^^^^^ use of unresolved module or unlinked crate `epd_waveshare`
[INFO] [stdout]     |
[INFO] [stdout]     = help: if you wanted to use a crate named `epd_waveshare`, use `cargo add epd_waveshare` to add it to your `Cargo.toml`
[INFO] [stdout] 
[INFO] [stdout] error[E0433]: failed to resolve: use of unresolved module or unlinked crate `epd_waveshare`
[INFO] [stdout]    --> src/graphics.rs:322:5
[INFO] [stdout]     |
[INFO] [stdout] 322 | use epd_waveshare::graphics::VarDisplay;
[INFO] [stdout]     |     ^^^^^^^^^^^^^ use of unresolved module or unlinked crate `epd_waveshare`
[INFO] [stdout]     |
[INFO] [stdout]     = help: if you wanted to use a crate named `epd_waveshare`, use `cargo add epd_waveshare` to add it to your `Cargo.toml`
[INFO] [stdout] 
[INFO] [stdout] error[E0433]: failed to resolve: use of unresolved module or unlinked crate `epd_waveshare`
[INFO] [stdout]    --> src/graphics.rs:323:5
[INFO] [stdout]     |
[INFO] [stdout] 323 | use epd_waveshare::color::Black;
[INFO] [stdout]     |     ^^^^^^^^^^^^^ use of unresolved module or unlinked crate `epd_waveshare`
[INFO] [stdout]     |
[INFO] [stdout]     = help: if you wanted to use a crate named `epd_waveshare`, use `cargo add epd_waveshare` to add it to your `Cargo.toml`
[INFO] [stdout] 
[INFO] [stdout] error[E0432]: unresolved imports `epd_waveshare::epd2in9::DEFAULT_BACKGROUND_COLOR`, `epd_waveshare::graphics::VarDisplay`, `epd_waveshare::color::Black`
[INFO] [stdout]    --> src/graphics.rs:320:5
[INFO] [stdout]     |
[INFO] [stdout] 320 | use epd_waveshare::epd2in9::DEFAULT_BACKGROUND_COLOR;
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 321 | use epd_waveshare::prelude::*;
[INFO] [stdout] 322 | use epd_waveshare::graphics::VarDisplay;
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 323 | use epd_waveshare::color::Black;
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] error[E0433]: failed to resolve: use of undeclared type `DisplayRotation`
[INFO] [stdout]    --> src/graphics.rs:332:22
[INFO] [stdout]     |
[INFO] [stdout] 332 | display.set_rotation(DisplayRotation::Rotate90);
[INFO] [stdout]     |                      ^^^^^^^^^^^^^^^ use of undeclared type `DisplayRotation`
[INFO] [stdout]     |
[INFO] [stdout] help: consider importing this enum
[INFO] [stdout]     |
[INFO] [stdout] 319 + use lcd_drivers::prelude::DisplayRotation;
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] error: aborting due to 6 previous errors
[INFO] [stdout] 
[INFO] [stdout] Some errors have detailed explanations: E0432, E0433.
[INFO] [stdout] For more information about an error, try `rustc --explain E0432`.
[INFO] [stdout] Couldn't compile the test.
[INFO] [stdout] 
[INFO] [stdout] failures:
[INFO] [stdout]     src/graphics.rs - graphics::VarDisplay (line 319)
[INFO] [stdout] 
[INFO] [stdout] test result: FAILED. 0 passed; 1 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.17s
[INFO] [stdout] 
[INFO] [stderr] error: doctest failed, to rerun pass `--doc`
[INFO] running `Command { std: "docker" "inspect" "9b409720600289b18b4039ae5a2eb10fb98aa6b674c827f6c6c009c1f3a69523", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "9b409720600289b18b4039ae5a2eb10fb98aa6b674c827f6c6c009c1f3a69523", kill_on_drop: false }`
[INFO] [stdout] 9b409720600289b18b4039ae5a2eb10fb98aa6b674c827f6c6c009c1f3a69523
