[INFO] cloning repository https://github.com/BigBuildBench/cncf_gitvote
[INFO] running `Command { std: "git" "-c" "credential.helper=" "-c" "credential.helper=/workspace/cargo-home/bin/git-credential-null" "clone" "--bare" "https://github.com/BigBuildBench/cncf_gitvote" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2FBigBuildBench%2Fcncf_gitvote", kill_on_drop: false }`
[INFO] [stderr] Cloning into bare repository '/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2FBigBuildBench%2Fcncf_gitvote'...
[INFO] running `Command { std: "git" "rev-parse" "HEAD", kill_on_drop: false }`
[INFO] [stdout] afe7ce9de337cb7033df8e2f1f237a60bbda873e
[INFO] checking BigBuildBench/cncf_gitvote against master#04ff05c9c0cfbca33115c5f1b8bb20a66a54b799 for pr-147834
[INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2FBigBuildBench%2Fcncf_gitvote" "/workspace/builds/worker-6-tc1/source", kill_on_drop: false }`
[INFO] [stderr] Cloning into '/workspace/builds/worker-6-tc1/source'...
[INFO] [stderr] done.
[INFO] started tweaking git repo https://github.com/BigBuildBench/cncf_gitvote
[INFO] finished tweaking git repo https://github.com/BigBuildBench/cncf_gitvote
[INFO] tweaked toml for git repo https://github.com/BigBuildBench/cncf_gitvote written to /workspace/builds/worker-6-tc1/source/Cargo.toml
[INFO] validating manifest of git repo https://github.com/BigBuildBench/cncf_gitvote on toolchain 04ff05c9c0cfbca33115c5f1b8bb20a66a54b799
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+04ff05c9c0cfbca33115c5f1b8bb20a66a54b799" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }`
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+04ff05c9c0cfbca33115c5f1b8bb20a66a54b799" "generate-lockfile" "--manifest-path" "Cargo.toml", kill_on_drop: false }`
[INFO] [stderr]     Updating crates.io index
[INFO] [stderr]      Locking 22 packages to latest compatible versions
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+04ff05c9c0cfbca33115c5f1b8bb20a66a54b799" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-6-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-6-tc1/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:e90291280db7d1fac5b66fc6dad9f9662629e7365a55743daf9bdf73ebc4ea79" "/opt/rustwide/cargo-home/bin/cargo" "+04ff05c9c0cfbca33115c5f1b8bb20a66a54b799" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }`
[INFO] [stdout] c9c10c92b4255169afd0ee114b4867037291a49711037210955f3ad42dbc5807
[INFO] running `Command { std: "docker" "start" "-a" "c9c10c92b4255169afd0ee114b4867037291a49711037210955f3ad42dbc5807", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "c9c10c92b4255169afd0ee114b4867037291a49711037210955f3ad42dbc5807", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "c9c10c92b4255169afd0ee114b4867037291a49711037210955f3ad42dbc5807", kill_on_drop: false }`
[INFO] [stdout] c9c10c92b4255169afd0ee114b4867037291a49711037210955f3ad42dbc5807
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-6-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-6-tc1/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:e90291280db7d1fac5b66fc6dad9f9662629e7365a55743daf9bdf73ebc4ea79" "/opt/rustwide/cargo-home/bin/cargo" "+04ff05c9c0cfbca33115c5f1b8bb20a66a54b799" "check" "--frozen" "--all" "--all-targets" "--message-format=json", kill_on_drop: false }`
[INFO] [stdout] e31f6ba2d2879e50a068089a1d299864400c924b8b94d4b22651ef126e4b7112
[INFO] running `Command { std: "docker" "start" "-a" "e31f6ba2d2879e50a068089a1d299864400c924b8b94d4b22651ef126e4b7112", kill_on_drop: false }`
[INFO] [stderr]     Checking predicates-core v1.0.9
[INFO] [stderr]    Compiling mockall_derive v0.13.1
[INFO] [stderr]     Checking termtree v0.5.1
[INFO] [stderr]    Compiling cfg-if v1.0.4
[INFO] [stderr]     Checking anstyle v1.0.13
[INFO] [stderr]     Checking fragile v2.0.1
[INFO] [stderr]     Checking tokio v1.48.0
[INFO] [stderr]     Checking downcast v0.11.0
[INFO] [stderr]     Checking gitvote v1.3.0 (/opt/rustwide/workdir)
[INFO] [stderr]    Compiling syn v2.0.108
[INFO] [stdout] error[E0432]: unresolved import `anyhow`
[INFO] [stdout]   --> src/main.rs:12:5
[INFO] [stdout]    |
[INFO] [stdout] 12 | use anyhow::{Context, Result};
[INFO] [stdout]    |     ^^^^^^ use of unresolved module or unlinked crate `anyhow`
[INFO] [stdout]    |
[INFO] [stdout]    = help: if you wanted to use a crate named `anyhow`, use `cargo add anyhow` to add it to your `Cargo.toml`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0432]: unresolved import `clap`
[INFO] [stdout]   --> src/main.rs:13:5
[INFO] [stdout]    |
[INFO] [stdout] 13 | use clap::Parser;
[INFO] [stdout]    |     ^^^^ use of unresolved module or unlinked crate `clap`
[INFO] [stdout]    |
[INFO] [stdout]    = help: if you wanted to use a crate named `clap`, use `cargo add clap` to add it to your `Cargo.toml`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0432]: unresolved import `config`
[INFO] [stdout]   --> src/main.rs:14:5
[INFO] [stdout]    |
[INFO] [stdout] 14 | use config::{Config, File};
[INFO] [stdout]    |     ^^^^^^ use of unresolved module or unlinked crate `config`
[INFO] [stdout]    |
[INFO] [stdout]    = help: if you wanted to use a crate named `config`, use `cargo add config` to add it to your `Cargo.toml`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0432]: unresolved import `deadpool_postgres`
[INFO] [stdout]   --> src/main.rs:15:5
[INFO] [stdout]    |
[INFO] [stdout] 15 | use deadpool_postgres::{Config as DbConfig, Runtime};
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^ use of unresolved module or unlinked crate `deadpool_postgres`
[INFO] [stdout]    |
[INFO] [stdout]    = help: if you wanted to use a crate named `deadpool_postgres`, use `cargo add deadpool_postgres` to add it to your `Cargo.toml`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0433]: failed to resolve: use of unresolved module or unlinked crate `openssl`
[INFO] [stdout]   --> src/main.rs:17:5
[INFO] [stdout]    |
[INFO] [stdout] 17 | use openssl::ssl::{SslConnector, SslMethod, SslVerifyMode};
[INFO] [stdout]    |     ^^^^^^^ use of unresolved module or unlinked crate `openssl`
[INFO] [stdout]    |
[INFO] [stdout]    = help: if you wanted to use a crate named `openssl`, use `cargo add openssl` to add it to your `Cargo.toml`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0432]: unresolved import `octocrab`
[INFO] [stdout]   --> src/main.rs:16:5
[INFO] [stdout]    |
[INFO] [stdout] 16 | use octocrab::Octocrab;
[INFO] [stdout]    |     ^^^^^^^^ use of unresolved module or unlinked crate `octocrab`
[INFO] [stdout]    |
[INFO] [stdout]    = help: if you wanted to use a crate named `octocrab`, use `cargo add octocrab` to add it to your `Cargo.toml`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0433]: failed to resolve: use of unresolved module or unlinked crate `tokio`
[INFO] [stdout]   --> src/main.rs:20:5
[INFO] [stdout]    |
[INFO] [stdout] 20 | use tokio::{net::TcpListener, signal, sync::broadcast};
[INFO] [stdout]    |     ^^^^^ use of unresolved module or unlinked crate `tokio`
[INFO] [stdout]    |
[INFO] [stdout]    = help: if you wanted to use a crate named `tokio`, use `cargo add tokio` to add it to your `Cargo.toml`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0432]: unresolved import `postgres_openssl`
[INFO] [stdout]   --> src/main.rs:18:5
[INFO] [stdout]    |
[INFO] [stdout] 18 | use postgres_openssl::MakeTlsConnector;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^ use of unresolved module or unlinked crate `postgres_openssl`
[INFO] [stdout]    |
[INFO] [stdout]    = help: if you wanted to use a crate named `postgres_openssl`, use `cargo add postgres_openssl` to add it to your `Cargo.toml`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0432]: unresolved import `tokio`
[INFO] [stdout]   --> src/main.rs:20:5
[INFO] [stdout]    |
[INFO] [stdout] 20 | use tokio::{net::TcpListener, signal, sync::broadcast};
[INFO] [stdout]    |     ^^^^^ use of unresolved module or unlinked crate `tokio`
[INFO] [stdout]    |
[INFO] [stdout]    = help: if you wanted to use a crate named `tokio`, use `cargo add tokio` to add it to your `Cargo.toml`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0432]: unresolved import `tracing`
[INFO] [stdout]   --> src/main.rs:21:5
[INFO] [stdout]    |
[INFO] [stdout] 21 | use tracing::{debug, info};
[INFO] [stdout]    |     ^^^^^^^ use of unresolved module or unlinked crate `tracing`
[INFO] [stdout]    |
[INFO] [stdout]    = help: if you wanted to use a crate named `tracing`, use `cargo add tracing` to add it to your `Cargo.toml`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0432]: unresolved import `tracing_subscriber`
[INFO] [stdout]   --> src/main.rs:22:5
[INFO] [stdout]    |
[INFO] [stdout] 22 | use tracing_subscriber::EnvFilter;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^ use of unresolved module or unlinked crate `tracing_subscriber`
[INFO] [stdout]    |
[INFO] [stdout]    = help: if you wanted to use a crate named `tracing_subscriber`, use `cargo add tracing_subscriber` to add it to your `Cargo.toml`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0433]: failed to resolve: use of unresolved module or unlinked crate `ignore`
[INFO] [stdout]  --> src/cfg.rs:3:5
[INFO] [stdout]   |
[INFO] [stdout] 3 | use ignore::gitignore::GitignoreBuilder;
[INFO] [stdout]   |     ^^^^^^ use of unresolved module or unlinked crate `ignore`
[INFO] [stdout]   |
[INFO] [stdout]   = help: if you wanted to use a crate named `ignore`, use `cargo add ignore` to add it to your `Cargo.toml`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0432]: unresolved import `anyhow`
[INFO] [stdout]  --> src/cfg.rs:2:5
[INFO] [stdout]   |
[INFO] [stdout] 2 | use anyhow::{bail, Result};
[INFO] [stdout]   |     ^^^^^^ use of unresolved module or unlinked crate `anyhow`
[INFO] [stdout]   |
[INFO] [stdout]   = help: if you wanted to use a crate named `anyhow`, use `cargo add anyhow` to add it to your `Cargo.toml`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0432]: unresolved import `serde`
[INFO] [stdout]  --> src/cfg.rs:4:5
[INFO] [stdout]   |
[INFO] [stdout] 4 | use serde::{Deserialize, Serialize};
[INFO] [stdout]   |     ^^^^^ use of unresolved module or unlinked crate `serde`
[INFO] [stdout]   |
[INFO] [stdout]   = help: if you wanted to use a crate named `serde`, use `cargo add serde` to add it to your `Cargo.toml`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0432]: unresolved import `thiserror`
[INFO] [stdout]  --> src/cfg.rs:6:5
[INFO] [stdout]   |
[INFO] [stdout] 6 | use thiserror::Error;
[INFO] [stdout]   |     ^^^^^^^^^ use of unresolved module or unlinked crate `thiserror`
[INFO] [stdout]   |
[INFO] [stdout]   = help: if you wanted to use a crate named `thiserror`, use `cargo add thiserror` to add it to your `Cargo.toml`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0432]: unresolved import `anyhow`
[INFO] [stdout]  --> src/cmd.rs:5:5
[INFO] [stdout]   |
[INFO] [stdout] 5 | use anyhow::Result;
[INFO] [stdout]   |     ^^^^^^ use of unresolved module or unlinked crate `anyhow`
[INFO] [stdout]   |
[INFO] [stdout]   = help: if you wanted to use a crate named `anyhow`, use `cargo add anyhow` to add it to your `Cargo.toml`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0432]: unresolved import `lazy_static`
[INFO] [stdout]  --> src/cmd.rs:6:5
[INFO] [stdout]   |
[INFO] [stdout] 6 | use lazy_static::lazy_static;
[INFO] [stdout]   |     ^^^^^^^^^^^ use of unresolved module or unlinked crate `lazy_static`
[INFO] [stdout]   |
[INFO] [stdout]   = help: if you wanted to use a crate named `lazy_static`, use `cargo add lazy_static` to add it to your `Cargo.toml`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0432]: unresolved import `regex`
[INFO] [stdout]  --> src/cmd.rs:7:5
[INFO] [stdout]   |
[INFO] [stdout] 7 | use regex::Regex;
[INFO] [stdout]   |     ^^^^^ use of unresolved module or unlinked crate `regex`
[INFO] [stdout]   |
[INFO] [stdout]   = help: if you wanted to use a crate named `regex`, use `cargo add regex` to add it to your `Cargo.toml`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0432]: unresolved import `serde`
[INFO] [stdout]  --> src/cmd.rs:8:5
[INFO] [stdout]   |
[INFO] [stdout] 8 | use serde::{Deserialize, Serialize};
[INFO] [stdout]   |     ^^^^^ use of unresolved module or unlinked crate `serde`
[INFO] [stdout]   |
[INFO] [stdout]   = help: if you wanted to use a crate named `serde`, use `cargo add serde` to add it to your `Cargo.toml`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0432]: unresolved import `tracing`
[INFO] [stdout]  --> src/cmd.rs:9:5
[INFO] [stdout]   |
[INFO] [stdout] 9 | use tracing::error;
[INFO] [stdout]   |     ^^^^^^^ use of unresolved module or unlinked crate `tracing`
[INFO] [stdout]   |
[INFO] [stdout]   = help: if you wanted to use a crate named `tracing`, use `cargo add tracing` to add it to your `Cargo.toml`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0432]: unresolved import `anyhow`
[INFO] [stdout]  --> src/db.rs:7:5
[INFO] [stdout]   |
[INFO] [stdout] 7 | use anyhow::Result;
[INFO] [stdout]   |     ^^^^^^ use of unresolved module or unlinked crate `anyhow`
[INFO] [stdout]   |
[INFO] [stdout]   = help: if you wanted to use a crate named `anyhow`, use `cargo add anyhow` to add it to your `Cargo.toml`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0432]: unresolved import `async_trait`
[INFO] [stdout]  --> src/db.rs:8:5
[INFO] [stdout]   |
[INFO] [stdout] 8 | use async_trait::async_trait;
[INFO] [stdout]   |     ^^^^^^^^^^^ use of unresolved module or unlinked crate `async_trait`
[INFO] [stdout]   |
[INFO] [stdout]   = help: if you wanted to use a crate named `async_trait`, use `cargo add async_trait` to add it to your `Cargo.toml`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0433]: failed to resolve: use of unresolved module or unlinked crate `tokio_postgres`
[INFO] [stdout]   --> src/db.rs:13:5
[INFO] [stdout]    |
[INFO] [stdout] 13 | use tokio_postgres::types::Json;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^ use of unresolved module or unlinked crate `tokio_postgres`
[INFO] [stdout]    |
[INFO] [stdout]    = help: if you wanted to use a crate named `tokio_postgres`, use `cargo add tokio_postgres` to add it to your `Cargo.toml`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0432]: unresolved import `deadpool_postgres`
[INFO] [stdout]  --> src/db.rs:9:5
[INFO] [stdout]   |
[INFO] [stdout] 9 | use deadpool_postgres::{Pool, Transaction};
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^ use of unresolved module or unlinked crate `deadpool_postgres`
[INFO] [stdout]   |
[INFO] [stdout]   = help: if you wanted to use a crate named `deadpool_postgres`, use `cargo add deadpool_postgres` to add it to your `Cargo.toml`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0432]: unresolved import `uuid`
[INFO] [stdout]   --> src/db.rs:14:5
[INFO] [stdout]    |
[INFO] [stdout] 14 | use uuid::Uuid;
[INFO] [stdout]    |     ^^^^ use of unresolved module or unlinked crate `uuid`
[INFO] [stdout]    |
[INFO] [stdout]    = help: if you wanted to use a crate named `uuid`, use `cargo add uuid` to add it to your `Cargo.toml`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0432]: unresolved import `anyhow`
[INFO] [stdout]  --> src/github.rs:2:5
[INFO] [stdout]   |
[INFO] [stdout] 2 | use anyhow::{bail, Context, Error, Result};
[INFO] [stdout]   |     ^^^^^^ use of unresolved module or unlinked crate `anyhow`
[INFO] [stdout]   |
[INFO] [stdout]   = help: if you wanted to use a crate named `anyhow`, use `cargo add anyhow` to add it to your `Cargo.toml`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0433]: failed to resolve: use of unresolved module or unlinked crate `axum`
[INFO] [stdout]  --> src/github.rs:4:5
[INFO] [stdout]   |
[INFO] [stdout] 4 | use axum::http::HeaderValue;
[INFO] [stdout]   |     ^^^^ use of unresolved module or unlinked crate `axum`
[INFO] [stdout]   |
[INFO] [stdout]   = help: if you wanted to use a crate named `axum`, use `cargo add axum` to add it to your `Cargo.toml`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0432]: unresolved import `async_trait`
[INFO] [stdout]  --> src/github.rs:3:5
[INFO] [stdout]   |
[INFO] [stdout] 3 | use async_trait::async_trait;
[INFO] [stdout]   |     ^^^^^^^^^^^ use of unresolved module or unlinked crate `async_trait`
[INFO] [stdout]   |
[INFO] [stdout]   = help: if you wanted to use a crate named `async_trait`, use `cargo add async_trait` to add it to your `Cargo.toml`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0432]: unresolved import `graphql_client`
[INFO] [stdout]  --> src/github.rs:5:5
[INFO] [stdout]   |
[INFO] [stdout] 5 | use graphql_client::GraphQLQuery;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^ use of unresolved module or unlinked crate `graphql_client`
[INFO] [stdout]   |
[INFO] [stdout]   = help: if you wanted to use a crate named `graphql_client`, use `cargo add graphql_client` to add it to your `Cargo.toml`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0433]: failed to resolve: use of unresolved module or unlinked crate `octocrab`
[INFO] [stdout]  --> src/github.rs:9:5
[INFO] [stdout]   |
[INFO] [stdout] 9 | use octocrab::{models::InstallationId, Octocrab, Page};
[INFO] [stdout]   |     ^^^^^^^^ use of unresolved module or unlinked crate `octocrab`
[INFO] [stdout]   |
[INFO] [stdout]   = help: if you wanted to use a crate named `octocrab`, use `cargo add octocrab` to add it to your `Cargo.toml`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0432]: unresolved import `http`
[INFO] [stdout]  --> src/github.rs:6:5
[INFO] [stdout]   |
[INFO] [stdout] 6 | use http::StatusCode;
[INFO] [stdout]   |     ^^^^ use of unresolved module or unlinked crate `http`
[INFO] [stdout]   |
[INFO] [stdout]   = help: if you wanted to use a crate named `http`, use `cargo add http` to add it to your `Cargo.toml`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0432]: unresolved import `octocrab`
[INFO] [stdout]  --> src/github.rs:9:5
[INFO] [stdout]   |
[INFO] [stdout] 9 | use octocrab::{models::InstallationId, Octocrab, Page};
[INFO] [stdout]   |     ^^^^^^^^ use of unresolved module or unlinked crate `octocrab`
[INFO] [stdout]   |
[INFO] [stdout]   = help: if you wanted to use a crate named `octocrab`, use `cargo add octocrab` to add it to your `Cargo.toml`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0432]: unresolved import `serde`
[INFO] [stdout]   --> src/github.rs:10:5
[INFO] [stdout]    |
[INFO] [stdout] 10 | use serde::{Deserialize, Serialize};
[INFO] [stdout]    |     ^^^^^ use of unresolved module or unlinked crate `serde`
[INFO] [stdout]    |
[INFO] [stdout]    = help: if you wanted to use a crate named `serde`, use `cargo add serde` to add it to your `Cargo.toml`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0432]: unresolved import `serde_json`
[INFO] [stdout]   --> src/github.rs:11:5
[INFO] [stdout]    |
[INFO] [stdout] 11 | use serde_json::{json, Value};
[INFO] [stdout]    |     ^^^^^^^^^^ use of unresolved module or unlinked crate `serde_json`
[INFO] [stdout]    |
[INFO] [stdout]    = help: if you wanted to use a crate named `serde_json`, use `cargo add serde_json` to add it to your `Cargo.toml`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0432]: unresolved import `thiserror`
[INFO] [stdout]   --> src/github.rs:13:5
[INFO] [stdout]    |
[INFO] [stdout] 13 | use thiserror::Error;
[INFO] [stdout]    |     ^^^^^^^^^ use of unresolved module or unlinked crate `thiserror`
[INFO] [stdout]    |
[INFO] [stdout]    = help: if you wanted to use a crate named `thiserror`, use `cargo add thiserror` to add it to your `Cargo.toml`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0433]: failed to resolve: use of unresolved module or unlinked crate `axum`
[INFO] [stdout]  --> src/handlers.rs:3:5
[INFO] [stdout]   |
[INFO] [stdout] 3 | use axum::{
[INFO] [stdout]   |     ^^^^ use of unresolved module or unlinked crate `axum`
[INFO] [stdout]   |
[INFO] [stdout]   = help: if you wanted to use a crate named `axum`, use `cargo add axum` to add it to your `Cargo.toml`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0432]: unresolved import `anyhow`
[INFO] [stdout]  --> src/handlers.rs:2:5
[INFO] [stdout]   |
[INFO] [stdout] 2 | use anyhow::{format_err, Error, Result};
[INFO] [stdout]   |     ^^^^^^ use of unresolved module or unlinked crate `anyhow`
[INFO] [stdout]   |
[INFO] [stdout]   = help: if you wanted to use a crate named `anyhow`, use `cargo add anyhow` to add it to your `Cargo.toml`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0432]: unresolved import `axum`
[INFO] [stdout]  --> src/handlers.rs:3:5
[INFO] [stdout]   |
[INFO] [stdout] 3 | use axum::{
[INFO] [stdout]   |     ^^^^ use of unresolved module or unlinked crate `axum`
[INFO] [stdout]   |
[INFO] [stdout]   = help: if you wanted to use a crate named `axum`, use `cargo add axum` to add it to your `Cargo.toml`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0432]: unresolved import `config`
[INFO] [stdout]   --> src/handlers.rs:11:5
[INFO] [stdout]    |
[INFO] [stdout] 11 | use config::{Config, ConfigError};
[INFO] [stdout]    |     ^^^^^^ use of unresolved module or unlinked crate `config`
[INFO] [stdout]    |
[INFO] [stdout]    = help: if you wanted to use a crate named `config`, use `cargo add config` to add it to your `Cargo.toml`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0432]: unresolved import `hmac`
[INFO] [stdout]   --> src/handlers.rs:12:5
[INFO] [stdout]    |
[INFO] [stdout] 12 | use hmac::{Hmac, Mac};
[INFO] [stdout]    |     ^^^^ use of unresolved module or unlinked crate `hmac`
[INFO] [stdout]    |
[INFO] [stdout]    = help: if you wanted to use a crate named `hmac`, use `cargo add hmac` to add it to your `Cargo.toml`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0432]: unresolved import `sha2`
[INFO] [stdout]   --> src/handlers.rs:13:5
[INFO] [stdout]    |
[INFO] [stdout] 13 | use sha2::Sha256;
[INFO] [stdout]    |     ^^^^ use of unresolved module or unlinked crate `sha2`
[INFO] [stdout]    |
[INFO] [stdout]    = help: if you wanted to use a crate named `sha2`, use `cargo add sha2` to add it to your `Cargo.toml`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0433]: failed to resolve: use of unresolved module or unlinked crate `tower_http`
[INFO] [stdout]   --> src/handlers.rs:16:5
[INFO] [stdout]    |
[INFO] [stdout] 16 | use tower_http::trace::TraceLayer;
[INFO] [stdout]    |     ^^^^^^^^^^ use of unresolved module or unlinked crate `tower_http`
[INFO] [stdout]    |
[INFO] [stdout]    = help: if you wanted to use a crate named `tower_http`, use `cargo add tower_http` to add it to your `Cargo.toml`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0432]: unresolved import `tower`
[INFO] [stdout]   --> src/handlers.rs:15:5
[INFO] [stdout]    |
[INFO] [stdout] 15 | use tower::ServiceBuilder;
[INFO] [stdout]    |     ^^^^^ use of unresolved module or unlinked crate `tower`
[INFO] [stdout]    |
[INFO] [stdout]    = help: if you wanted to use a crate named `tower`, use `cargo add tower` to add it to your `Cargo.toml`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0432]: unresolved import `tracing`
[INFO] [stdout]   --> src/handlers.rs:17:5
[INFO] [stdout]    |
[INFO] [stdout] 17 | use tracing::{error, instrument, trace};
[INFO] [stdout]    |     ^^^^^^^ use of unresolved module or unlinked crate `tracing`
[INFO] [stdout]    |
[INFO] [stdout]    = help: if you wanted to use a crate named `tracing`, use `cargo add tracing` to add it to your `Cargo.toml`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0432]: unresolved import `anyhow`
[INFO] [stdout]  --> src/processor.rs:8:5
[INFO] [stdout]   |
[INFO] [stdout] 8 | use anyhow::Result;
[INFO] [stdout]   |     ^^^^^^ use of unresolved module or unlinked crate `anyhow`
[INFO] [stdout]   |
[INFO] [stdout]   = help: if you wanted to use a crate named `anyhow`, use `cargo add anyhow` to add it to your `Cargo.toml`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0432]: unresolved import `askama`
[INFO] [stdout]  --> src/processor.rs:9:5
[INFO] [stdout]   |
[INFO] [stdout] 9 | use askama::Template;
[INFO] [stdout]   |     ^^^^^^ use of unresolved module or unlinked crate `askama`
[INFO] [stdout]   |
[INFO] [stdout]   = help: if you wanted to use a crate named `askama`, use `cargo add askama` to add it to your `Cargo.toml`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0433]: failed to resolve: use of unresolved module or unlinked crate `futures`
[INFO] [stdout]   --> src/processor.rs:10:5
[INFO] [stdout]    |
[INFO] [stdout] 10 | use futures::future::{self, JoinAll};
[INFO] [stdout]    |     ^^^^^^^ use of unresolved module or unlinked crate `futures`
[INFO] [stdout]    |
[INFO] [stdout]    = help: if you wanted to use a crate named `futures`, use `cargo add futures` to add it to your `Cargo.toml`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0432]: unresolved import `futures`
[INFO] [stdout]   --> src/processor.rs:10:5
[INFO] [stdout]    |
[INFO] [stdout] 10 | use futures::future::{self, JoinAll};
[INFO] [stdout]    |     ^^^^^^^ use of unresolved module or unlinked crate `futures`
[INFO] [stdout]    |
[INFO] [stdout]    = help: if you wanted to use a crate named `futures`, use `cargo add futures` to add it to your `Cargo.toml`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0433]: failed to resolve: use of unresolved module or unlinked crate `tokio`
[INFO] [stdout]   --> src/processor.rs:13:5
[INFO] [stdout]    |
[INFO] [stdout] 13 | use tokio::{
[INFO] [stdout]    |     ^^^^^ use of unresolved module or unlinked crate `tokio`
[INFO] [stdout]    |
[INFO] [stdout]    = help: if you wanted to use a crate named `tokio`, use `cargo add tokio` to add it to your `Cargo.toml`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0432]: unresolved import `time`
[INFO] [stdout]   --> src/processor.rs:12:5
[INFO] [stdout]    |
[INFO] [stdout] 12 | use time::OffsetDateTime;
[INFO] [stdout]    |     ^^^^ help: a similar path exists: `std::time`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0432]: unresolved import `tracing`
[INFO] [stdout]   --> src/processor.rs:18:5
[INFO] [stdout]    |
[INFO] [stdout] 18 | use tracing::{debug, error, instrument, warn};
[INFO] [stdout]    |     ^^^^^^^ use of unresolved module or unlinked crate `tracing`
[INFO] [stdout]    |
[INFO] [stdout]    = help: if you wanted to use a crate named `tracing`, use `cargo add tracing` to add it to your `Cargo.toml`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0432]: unresolved import `uuid`
[INFO] [stdout]   --> src/processor.rs:19:5
[INFO] [stdout]    |
[INFO] [stdout] 19 | use uuid::Uuid;
[INFO] [stdout]    |     ^^^^ use of unresolved module or unlinked crate `uuid`
[INFO] [stdout]    |
[INFO] [stdout]    = help: if you wanted to use a crate named `uuid`, use `cargo add uuid` to add it to your `Cargo.toml`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0432]: unresolved import `anyhow`
[INFO] [stdout]  --> src/results.rs:5:5
[INFO] [stdout]   |
[INFO] [stdout] 5 | use anyhow::{bail, Result};
[INFO] [stdout]   |     ^^^^^^ use of unresolved module or unlinked crate `anyhow`
[INFO] [stdout]   |
[INFO] [stdout]   = help: if you wanted to use a crate named `anyhow`, use `cargo add anyhow` to add it to your `Cargo.toml`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0433]: failed to resolve: use of unresolved module or unlinked crate `time`
[INFO] [stdout]  --> src/results.rs:8:5
[INFO] [stdout]   |
[INFO] [stdout] 8 | use time::{format_description::well_known::Rfc3339, OffsetDateTime};
[INFO] [stdout]   |     ^^^^ use of unresolved module or unlinked crate `time`
[INFO] [stdout]   |
[INFO] [stdout]   = help: if you wanted to use a crate named `time`, use `cargo add time` to add it to your `Cargo.toml`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0432]: unresolved import `serde`
[INFO] [stdout]  --> src/results.rs:6:5
[INFO] [stdout]   |
[INFO] [stdout] 6 | use serde::{Deserialize, Serialize};
[INFO] [stdout]   |     ^^^^^ use of unresolved module or unlinked crate `serde`
[INFO] [stdout]   |
[INFO] [stdout]   = help: if you wanted to use a crate named `serde`, use `cargo add serde` to add it to your `Cargo.toml`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0433]: failed to resolve: use of unresolved module or unlinked crate `tokio_postgres`
[INFO] [stdout]  --> src/results.rs:9:5
[INFO] [stdout]   |
[INFO] [stdout] 9 | use tokio_postgres::{types::Json, Row};
[INFO] [stdout]   |     ^^^^^^^^^^^^^^ use of unresolved module or unlinked crate `tokio_postgres`
[INFO] [stdout]   |
[INFO] [stdout]   = help: if you wanted to use a crate named `tokio_postgres`, use `cargo add tokio_postgres` to add it to your `Cargo.toml`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0432]: unresolved import `time`
[INFO] [stdout]  --> src/results.rs:8:5
[INFO] [stdout]   |
[INFO] [stdout] 8 | use time::{format_description::well_known::Rfc3339, OffsetDateTime};
[INFO] [stdout]   |     ^^^^ help: a similar path exists: `std::time`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0432]: unresolved import `tokio_postgres`
[INFO] [stdout]  --> src/results.rs:9:5
[INFO] [stdout]   |
[INFO] [stdout] 9 | use tokio_postgres::{types::Json, Row};
[INFO] [stdout]   |     ^^^^^^^^^^^^^^ use of unresolved module or unlinked crate `tokio_postgres`
[INFO] [stdout]   |
[INFO] [stdout]   = help: if you wanted to use a crate named `tokio_postgres`, use `cargo add tokio_postgres` to add it to your `Cargo.toml`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0432]: unresolved import `uuid`
[INFO] [stdout]   --> src/results.rs:10:5
[INFO] [stdout]    |
[INFO] [stdout] 10 | use uuid::Uuid;
[INFO] [stdout]    |     ^^^^ use of unresolved module or unlinked crate `uuid`
[INFO] [stdout]    |
[INFO] [stdout]    = help: if you wanted to use a crate named `uuid`, use `cargo add uuid` to add it to your `Cargo.toml`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0432]: unresolved import `askama`
[INFO] [stdout]  --> src/tmpl.rs:7:5
[INFO] [stdout]   |
[INFO] [stdout] 7 | use askama::Template;
[INFO] [stdout]   |     ^^^^^^ use of unresolved module or unlinked crate `askama`
[INFO] [stdout]   |
[INFO] [stdout]   = help: if you wanted to use a crate named `askama`, use `cargo add askama` to add it to your `Cargo.toml`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0433]: failed to resolve: use of unresolved module or unlinked crate `serde_json`
[INFO] [stdout]    --> src/github.rs:390:23
[INFO] [stdout]     |
[INFO] [stdout] 390 |                 Some(&serde_json::json!({
[INFO] [stdout]     |                       ^^^^^^^^^^ use of unresolved module or unlinked crate `serde_json`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0433]: failed to resolve: use of unresolved module or unlinked crate `tokio`
[INFO] [stdout]    --> src/processor.rs:105:17
[INFO] [stdout]     |
[INFO] [stdout] 105 |                 tokio::select! {
[INFO] [stdout]     |                 ^^^^^ use of unresolved module or unlinked crate `tokio`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0433]: failed to resolve: use of unresolved module or unlinked crate `tokio`
[INFO] [stdout]    --> src/processor.rs:143:33
[INFO] [stdout]     |
[INFO] [stdout] 143 |                     Ok(None) => tokio::select! {
[INFO] [stdout]     |                                 ^^^^^ use of unresolved module or unlinked crate `tokio`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0433]: failed to resolve: use of unresolved module or unlinked crate `tokio`
[INFO] [stdout]    --> src/processor.rs:152:25
[INFO] [stdout]     |
[INFO] [stdout] 152 |                         tokio::select! {
[INFO] [stdout]     |                         ^^^^^ use of unresolved module or unlinked crate `tokio`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0433]: failed to resolve: use of unresolved module or unlinked crate `tokio`
[INFO] [stdout]    --> src/processor.rs:190:17
[INFO] [stdout]     |
[INFO] [stdout] 190 |                 tokio::select! {
[INFO] [stdout]     |                 ^^^^^ use of unresolved module or unlinked crate `tokio`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0433]: failed to resolve: use of unresolved module or unlinked crate `tokio`
[INFO] [stdout]    --> src/processor.rs:231:17
[INFO] [stdout]     |
[INFO] [stdout] 231 |                 tokio::select! {
[INFO] [stdout]     |                 ^^^^^ use of unresolved module or unlinked crate `tokio`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0433]: failed to resolve: use of unresolved module or unlinked crate `tokio`
[INFO] [stdout]   --> src/main.rs:43:3
[INFO] [stdout]    |
[INFO] [stdout] 43 | #[tokio::main]
[INFO] [stdout]    |   ^^^^^ use of unresolved module or unlinked crate `tokio`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0433]: failed to resolve: use of unresolved module or unlinked crate `tokio`
[INFO] [stdout]    --> src/main.rs:124:5
[INFO] [stdout]     |
[INFO] [stdout] 124 |     tokio::select! {
[INFO] [stdout]     |     ^^^^^ use of unresolved module or unlinked crate `tokio`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: cannot find attribute `serde` in this scope
[INFO] [stdout]   --> src/cfg.rs:21:7
[INFO] [stdout]    |
[INFO] [stdout] 21 |     #[serde(skip_serializing_if = "Option::is_none")]
[INFO] [stdout]    |       ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: cannot find attribute `serde` in this scope
[INFO] [stdout]   --> src/cfg.rs:76:7
[INFO] [stdout]    |
[INFO] [stdout] 76 |     #[serde(with = "humantime_serde")]
[INFO] [stdout]    |       ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: cannot find attribute `serde` in this scope
[INFO] [stdout]   --> src/cfg.rs:79:7
[INFO] [stdout]    |
[INFO] [stdout] 79 |     #[serde(skip_serializing_if = "Option::is_none")]
[INFO] [stdout]    |       ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: cannot find attribute `serde` in this scope
[INFO] [stdout]   --> src/cfg.rs:81:7
[INFO] [stdout]    |
[INFO] [stdout] 81 |     #[serde(skip_serializing_if = "Option::is_none")]
[INFO] [stdout]    |       ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: cannot find attribute `serde` in this scope
[INFO] [stdout]   --> src/cfg.rs:83:7
[INFO] [stdout]    |
[INFO] [stdout] 83 |     #[serde(skip_serializing_if = "Option::is_none")]
[INFO] [stdout]    |       ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: cannot find attribute `serde` in this scope
[INFO] [stdout]   --> src/cfg.rs:85:7
[INFO] [stdout]    |
[INFO] [stdout] 85 |     #[serde(skip_serializing_if = "Option::is_none")]
[INFO] [stdout]    |       ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: cannot find attribute `serde` in this scope
[INFO] [stdout]    --> src/cfg.rs:132:7
[INFO] [stdout]     |
[INFO] [stdout] 132 |     #[serde(skip_serializing_if = "Option::is_none")]
[INFO] [stdout]     |       ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: cannot find attribute `serde` in this scope
[INFO] [stdout]    --> src/cfg.rs:134:7
[INFO] [stdout]     |
[INFO] [stdout] 134 |     #[serde(skip_serializing_if = "Option::is_none")]
[INFO] [stdout]     |       ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: cannot find attribute `serde` in this scope
[INFO] [stdout]    --> src/cfg.rs:136:7
[INFO] [stdout]     |
[INFO] [stdout] 136 |     #[serde(skip_serializing_if = "Option::is_none")]
[INFO] [stdout]     |       ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: cannot find attribute `serde` in this scope
[INFO] [stdout]    --> src/cfg.rs:143:7
[INFO] [stdout]     |
[INFO] [stdout] 143 |     #[serde(skip_serializing_if = "Option::is_none")]
[INFO] [stdout]     |       ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: cannot find attribute `error` in this scope
[INFO] [stdout]    --> src/cfg.rs:156:7
[INFO] [stdout]     |
[INFO] [stdout] 156 |     #[error("config not found")]
[INFO] [stdout]     |       ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: cannot find attribute `error` in this scope
[INFO] [stdout]    --> src/cfg.rs:158:7
[INFO] [stdout]     |
[INFO] [stdout] 158 |     #[error("invalid config: {0}")]
[INFO] [stdout]     |       ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: cannot find attribute `error` in this scope
[INFO] [stdout]    --> src/cfg.rs:160:7
[INFO] [stdout]     |
[INFO] [stdout] 160 |     #[error("profile not found")]
[INFO] [stdout]     |       ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: cannot find attribute `graphql` in this scope
[INFO] [stdout]   --> src/github.rs:41:3
[INFO] [stdout]    |
[INFO] [stdout] 41 | #[graphql(
[INFO] [stdout]    |   ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: cannot find attribute `graphql` in this scope
[INFO] [stdout]   --> src/github.rs:50:3
[INFO] [stdout]    |
[INFO] [stdout] 50 | #[graphql(
[INFO] [stdout]    |   ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: cannot find attribute `error` in this scope
[INFO] [stdout]    --> src/github.rs:494:7
[INFO] [stdout]     |
[INFO] [stdout] 494 |     #[error("event header missing")]
[INFO] [stdout]     |       ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: cannot find attribute `error` in this scope
[INFO] [stdout]    --> src/github.rs:496:7
[INFO] [stdout]     |
[INFO] [stdout] 496 |     #[error("unsupported event")]
[INFO] [stdout]     |       ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: cannot find attribute `error` in this scope
[INFO] [stdout]    --> src/github.rs:498:7
[INFO] [stdout]     |
[INFO] [stdout] 498 |     #[error("invalid body: {0}")]
[INFO] [stdout]     |       ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: cannot find attribute `serde` in this scope
[INFO] [stdout]    --> src/github.rs:513:3
[INFO] [stdout]     |
[INFO] [stdout] 513 | #[serde(rename_all = "lowercase")]
[INFO] [stdout]     |   ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: cannot find attribute `serde` in this scope
[INFO] [stdout]    --> src/github.rs:516:7
[INFO] [stdout]     |
[INFO] [stdout] 516 |     #[serde(other)]
[INFO] [stdout]     |       ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: cannot find attribute `serde` in this scope
[INFO] [stdout]    --> src/github.rs:532:3
[INFO] [stdout]     |
[INFO] [stdout] 532 | #[serde(rename_all = "lowercase")]
[INFO] [stdout]     |   ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: cannot find attribute `serde` in this scope
[INFO] [stdout]    --> src/github.rs:535:7
[INFO] [stdout]     |
[INFO] [stdout] 535 |     #[serde(other)]
[INFO] [stdout]     |       ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: cannot find attribute `serde` in this scope
[INFO] [stdout]    --> src/github.rs:550:3
[INFO] [stdout]     |
[INFO] [stdout] 550 | #[serde(rename_all = "snake_case")]
[INFO] [stdout]     |   ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: cannot find attribute `serde` in this scope
[INFO] [stdout]    --> src/github.rs:554:7
[INFO] [stdout]     |
[INFO] [stdout] 554 |     #[serde(other)]
[INFO] [stdout]     |       ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: cannot find attribute `serde` in this scope
[INFO] [stdout]    --> src/github.rs:604:7
[INFO] [stdout]     |
[INFO] [stdout] 604 |     #[serde(rename = "ref")]
[INFO] [stdout]     |       ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: cannot find attribute `template` in this scope
[INFO] [stdout]   --> src/tmpl.rs:11:3
[INFO] [stdout]    |
[INFO] [stdout] 11 | #[template(path = "config-not-found.md")]
[INFO] [stdout]    |   ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: cannot find attribute `template` in this scope
[INFO] [stdout]   --> src/tmpl.rs:16:3
[INFO] [stdout]    |
[INFO] [stdout] 16 | #[template(path = "config-profile-not-found.md")]
[INFO] [stdout]    |   ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: cannot find attribute `template` in this scope
[INFO] [stdout]   --> src/tmpl.rs:21:3
[INFO] [stdout]    |
[INFO] [stdout] 21 | #[template(path = "index.html")]
[INFO] [stdout]    |   ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: cannot find attribute `template` in this scope
[INFO] [stdout]   --> src/tmpl.rs:26:3
[INFO] [stdout]    |
[INFO] [stdout] 26 | #[template(path = "invalid-config.md")]
[INFO] [stdout]    |   ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: cannot find attribute `template` in this scope
[INFO] [stdout]   --> src/tmpl.rs:40:3
[INFO] [stdout]    |
[INFO] [stdout] 40 | #[template(path = "no-vote-in-progress.md")]
[INFO] [stdout]    |   ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: cannot find attribute `template` in this scope
[INFO] [stdout]   --> src/tmpl.rs:58:3
[INFO] [stdout]    |
[INFO] [stdout] 58 | #[template(path = "vote-cancelled.md")]
[INFO] [stdout]    |   ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: cannot find attribute `template` in this scope
[INFO] [stdout]   --> src/tmpl.rs:76:3
[INFO] [stdout]    |
[INFO] [stdout] 76 | #[template(path = "vote-checked-recently.md")]
[INFO] [stdout]    |   ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: cannot find attribute `template` in this scope
[INFO] [stdout]   --> src/tmpl.rs:81:3
[INFO] [stdout]    |
[INFO] [stdout] 81 | #[template(path = "vote-closed.md")]
[INFO] [stdout]    |   ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: cannot find attribute `template` in this scope
[INFO] [stdout]   --> src/tmpl.rs:95:3
[INFO] [stdout]    |
[INFO] [stdout] 95 | #[template(path = "vote-closed-announcement.md")]
[INFO] [stdout]    |   ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: cannot find attribute `template` in this scope
[INFO] [stdout]    --> src/tmpl.rs:115:3
[INFO] [stdout]     |
[INFO] [stdout] 115 | #[template(path = "vote-created.md")]
[INFO] [stdout]     |   ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: cannot find attribute `template` in this scope
[INFO] [stdout]    --> src/tmpl.rs:162:3
[INFO] [stdout]     |
[INFO] [stdout] 162 | #[template(path = "vote-in-progress.md")]
[INFO] [stdout]     |   ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: cannot find attribute `template` in this scope
[INFO] [stdout]    --> src/tmpl.rs:180:3
[INFO] [stdout]     |
[INFO] [stdout] 180 | #[template(path = "vote-restricted.md")]
[INFO] [stdout]     |   ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: cannot find attribute `template` in this scope
[INFO] [stdout]    --> src/tmpl.rs:194:3
[INFO] [stdout]     |
[INFO] [stdout] 194 | #[template(path = "vote-status.md")]
[INFO] [stdout]     |   ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: cannot find attribute `clap` in this scope
[INFO] [stdout]   --> src/main.rs:36:3
[INFO] [stdout]    |
[INFO] [stdout] 36 | #[clap(author, version, about)]
[INFO] [stdout]    |   ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: cannot find attribute `clap` in this scope
[INFO] [stdout]   --> src/main.rs:39:7
[INFO] [stdout]    |
[INFO] [stdout] 39 |     #[clap(short, long)]
[INFO] [stdout]    |       ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr]     Checking predicates-tree v1.0.12
[INFO] [stdout] error[E0433]: failed to resolve: use of unresolved module or unlinked crate `tracing`
[INFO] [stdout]    --> src/processor.rs:369:9
[INFO] [stdout]     |
[INFO] [stdout] 369 |         tracing::Span::current().record("vote_id", vote.vote_id.to_string());
[INFO] [stdout]     |         ^^^^^^^ use of unresolved module or unlinked crate `tracing`
[INFO] [stdout]     |
[INFO] [stdout]     = help: if you wanted to use a crate named `tracing`, use `cargo add tracing` to add it to your `Cargo.toml`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0433]: failed to resolve: use of unresolved module or unlinked crate `tracing`
[INFO] [stdout]    --> src/processor.rs:406:9
[INFO] [stdout]     |
[INFO] [stdout] 406 |         tracing::Span::current().record("vote_id", vote.vote_id.to_string());
[INFO] [stdout]     |         ^^^^^^^ use of unresolved module or unlinked crate `tracing`
[INFO] [stdout]     |
[INFO] [stdout]     = help: if you wanted to use a crate named `tracing`, use `cargo add tracing` to add it to your `Cargo.toml`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0433]: failed to resolve: use of unresolved module or unlinked crate `jsonwebtoken`
[INFO] [stdout]   --> src/main.rs:77:27
[INFO] [stdout]    |
[INFO] [stdout] 77 |     let app_private_key = jsonwebtoken::EncodingKey::from_rsa_pem(app_private_key.as_bytes())?;
[INFO] [stdout]    |                           ^^^^^^^^^^^^ use of unresolved module or unlinked crate `jsonwebtoken`
[INFO] [stdout]    |
[INFO] [stdout]    = help: if you wanted to use a crate named `jsonwebtoken`, use `cargo add jsonwebtoken` to add it to your `Cargo.toml`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0425]: cannot find value `CMD` in this scope
[INFO] [stdout]   --> src/cmd.rs:74:37
[INFO] [stdout]    |
[INFO] [stdout] 74 |             if let Some(captures) = CMD.captures(content) {
[INFO] [stdout]    |                                     ^^^ not found in this scope
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0433]: failed to resolve: use of unresolved module or unlinked crate `octocrab`
[INFO] [stdout]    --> src/github.rs:650:17
[INFO] [stdout]     |
[INFO] [stdout] 650 |     if let Some(octocrab::Error::GitHub { source, backtrace: _ }) = err.downcast_ref::<octocrab::Error>() {
[INFO] [stdout]     |                 ^^^^^^^^ use of unresolved module or unlinked crate `octocrab`
[INFO] [stdout]     |
[INFO] [stdout]     = help: if you wanted to use a crate named `octocrab`, use `cargo add octocrab` to add it to your `Cargo.toml`
[INFO] [stdout] help: consider importing one of these items
[INFO] [stdout]     |
[INFO] [stdout]   1 + use std::error::Error;
[INFO] [stdout]     |
[INFO] [stdout]   1 + use std::fmt::Error;
[INFO] [stdout]     |
[INFO] [stdout]   1 + use std::io::Error;
[INFO] [stdout]     |
[INFO] [stdout]   1 + use core::error::Error;
[INFO] [stdout]     |
[INFO] [stdout]     = and 1 other candidate
[INFO] [stdout] help: if you import `Error`, refer to it directly
[INFO] [stdout]     |
[INFO] [stdout] 650 -     if let Some(octocrab::Error::GitHub { source, backtrace: _ }) = err.downcast_ref::<octocrab::Error>() {
[INFO] [stdout] 650 +     if let Some(Error::GitHub { source, backtrace: _ }) = err.downcast_ref::<octocrab::Error>() {
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0038]: the trait `github::GH` is not dyn compatible
[INFO] [stdout]    --> src/cfg.rs:34:15
[INFO] [stdout]     |
[INFO] [stdout]  34 |         match gh.get_config_file(inst_id, owner, repo).await {
[INFO] [stdout]     |               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ `github::GH` is not dyn compatible
[INFO] [stdout]     |
[INFO] [stdout] note: for a trait to be dyn compatible it needs to allow building a vtable
[INFO] [stdout]       for more information, visit <https://doc.rust-lang.org/reference/items/traits.html#dyn-compatibility>
[INFO] [stdout]    --> src/github.rs:62:14
[INFO] [stdout]     |
[INFO] [stdout]  60 | pub(crate) trait GH {
[INFO] [stdout]     |                  -- this trait is not dyn compatible...
[INFO] [stdout]  61 |     /// Add labels to the provided issue.
[INFO] [stdout]  62 |     async fn add_labels(
[INFO] [stdout]     |              ^^^^^^^^^^ ...because method `add_labels` is `async`
[INFO] [stdout] ...
[INFO] [stdout]  72 |     async fn create_check_run(
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^^ ...because method `create_check_run` is `async`
[INFO] [stdout] ...
[INFO] [stdout]  82 |     async fn create_discussion(
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^^^ ...because method `create_discussion` is `async`
[INFO] [stdout] ...
[INFO] [stdout]  93 |     async fn get_allowed_voters(
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^^^^ ...because method `get_allowed_voters` is `async`
[INFO] [stdout] ...
[INFO] [stdout] 104 |     async fn get_collaborators(&self, inst_id: u64, owner: &str, repo: &str) -> Result<Vec<UserName>>;
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^^^ ...because method `get_collaborators` is `async`
[INFO] [stdout] ...
[INFO] [stdout] 107 |     async fn get_comment_reactions(
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^^^^^^^ ...because method `get_comment_reactions` is `async`
[INFO] [stdout] ...
[INFO] [stdout] 116 |     async fn get_config_file(&self, inst_id: u64, owner: &str, repo: &str) -> Option<String>;
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^ ...because method `get_config_file` is `async`
[INFO] [stdout] ...
[INFO] [stdout] 119 |     async fn get_pr_files(&self, inst_id: u64, owner: &str, repo: &str, pr_number: i64) -> Result<Vec<File>>;
[INFO] [stdout]     |              ^^^^^^^^^^^^ ...because method `get_pr_files` is `async`
[INFO] [stdout] ...
[INFO] [stdout] 123 |     async fn get_team_members(
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^^ ...because method `get_team_members` is `async`
[INFO] [stdout] ...
[INFO] [stdout] 133 |     async fn is_check_required(&self, inst_id: u64, owner: &str, repo: &str, branch: &str) -> Result<bool>;
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^^^ ...because method `is_check_required` is `async`
[INFO] [stdout] ...
[INFO] [stdout] 136 |     async fn post_comment(
[INFO] [stdout]     |              ^^^^^^^^^^^^ ...because method `post_comment` is `async`
[INFO] [stdout] ...
[INFO] [stdout] 146 |     async fn remove_label(
[INFO] [stdout]     |              ^^^^^^^^^^^^ ...because method `remove_label` is `async`
[INFO] [stdout] ...
[INFO] [stdout] 156 |     async fn user_is_collaborator(&self, inst_id: u64, owner: &str, repo: &str, user: &str) -> Result<bool>;
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^^^^^^ ...because method `user_is_collaborator` is `async`
[INFO] [stdout]     = help: consider moving `get_config_file` to another trait
[INFO] [stdout]     = help: consider moving `get_pr_files` to another trait
[INFO] [stdout]     = help: consider moving `add_labels` to another trait
[INFO] [stdout]     = help: consider moving `create_check_run` to another trait
[INFO] [stdout]     = help: consider moving `create_discussion` to another trait
[INFO] [stdout]     = help: consider moving `get_allowed_voters` to another trait
[INFO] [stdout]     = help: consider moving `get_collaborators` to another trait
[INFO] [stdout]     = help: consider moving `get_comment_reactions` to another trait
[INFO] [stdout]     = help: consider moving `get_team_members` to another trait
[INFO] [stdout]     = help: consider moving `is_check_required` to another trait
[INFO] [stdout]     = help: consider moving `post_comment` to another trait
[INFO] [stdout]     = help: consider moving `remove_label` to another trait
[INFO] [stdout]     = help: consider moving `user_is_collaborator` to another trait
[INFO] [stdout]     = help: only type `github::GHApi` implements `github::GH`; consider using it directly instead.
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0433]: failed to resolve: use of unresolved module or unlinked crate `serde_yaml`
[INFO] [stdout]   --> src/cfg.rs:37:21
[INFO] [stdout]    |
[INFO] [stdout] 37 |                     serde_yaml::from_str(&content).map_err(|e| CfgError::InvalidConfig(e.to_string()))?;
[INFO] [stdout]    |                     ^^^^^^^^^^ use of unresolved module or unlinked crate `serde_yaml`
[INFO] [stdout]    |
[INFO] [stdout]    = help: if you wanted to use a crate named `serde_yaml`, use `cargo add serde_yaml` to add it to your `Cargo.toml`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0282]: type annotations needed
[INFO] [stdout]   --> src/cfg.rs:37:61
[INFO] [stdout]    |
[INFO] [stdout] 37 |                     serde_yaml::from_str(&content).map_err(|e| CfgError::InvalidConfig(e.to_string()))?;
[INFO] [stdout]    |                                                             ^                          - type must be known at this point
[INFO] [stdout]    |
[INFO] [stdout] help: consider giving this closure parameter an explicit type
[INFO] [stdout]    |
[INFO] [stdout] 37 |                     serde_yaml::from_str(&content).map_err(|e: /* Type */| CfgError::InvalidConfig(e.to_string()))?;
[INFO] [stdout]    |                                                              ++++++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0038]: the trait `github::GH` is not dyn compatible
[INFO] [stdout]    --> src/cfg.rs:100:32
[INFO] [stdout]     |
[INFO] [stdout] 100 |         let mut cfg = Cfg::get(gh, inst_id, owner, repo).await?;
[INFO] [stdout]     |                                ^^ `github::GH` is not dyn compatible
[INFO] [stdout]     |
[INFO] [stdout] note: for a trait to be dyn compatible it needs to allow building a vtable
[INFO] [stdout]       for more information, visit <https://doc.rust-lang.org/reference/items/traits.html#dyn-compatibility>
[INFO] [stdout]    --> src/github.rs:62:14
[INFO] [stdout]     |
[INFO] [stdout]  60 | pub(crate) trait GH {
[INFO] [stdout]     |                  -- this trait is not dyn compatible...
[INFO] [stdout]  61 |     /// Add labels to the provided issue.
[INFO] [stdout]  62 |     async fn add_labels(
[INFO] [stdout]     |              ^^^^^^^^^^ ...because method `add_labels` is `async`
[INFO] [stdout] ...
[INFO] [stdout]  72 |     async fn create_check_run(
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^^ ...because method `create_check_run` is `async`
[INFO] [stdout] ...
[INFO] [stdout]  82 |     async fn create_discussion(
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^^^ ...because method `create_discussion` is `async`
[INFO] [stdout] ...
[INFO] [stdout]  93 |     async fn get_allowed_voters(
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^^^^ ...because method `get_allowed_voters` is `async`
[INFO] [stdout] ...
[INFO] [stdout] 104 |     async fn get_collaborators(&self, inst_id: u64, owner: &str, repo: &str) -> Result<Vec<UserName>>;
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^^^ ...because method `get_collaborators` is `async`
[INFO] [stdout] ...
[INFO] [stdout] 107 |     async fn get_comment_reactions(
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^^^^^^^ ...because method `get_comment_reactions` is `async`
[INFO] [stdout] ...
[INFO] [stdout] 116 |     async fn get_config_file(&self, inst_id: u64, owner: &str, repo: &str) -> Option<String>;
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^ ...because method `get_config_file` is `async`
[INFO] [stdout] ...
[INFO] [stdout] 119 |     async fn get_pr_files(&self, inst_id: u64, owner: &str, repo: &str, pr_number: i64) -> Result<Vec<File>>;
[INFO] [stdout]     |              ^^^^^^^^^^^^ ...because method `get_pr_files` is `async`
[INFO] [stdout] ...
[INFO] [stdout] 123 |     async fn get_team_members(
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^^ ...because method `get_team_members` is `async`
[INFO] [stdout] ...
[INFO] [stdout] 133 |     async fn is_check_required(&self, inst_id: u64, owner: &str, repo: &str, branch: &str) -> Result<bool>;
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^^^ ...because method `is_check_required` is `async`
[INFO] [stdout] ...
[INFO] [stdout] 136 |     async fn post_comment(
[INFO] [stdout]     |              ^^^^^^^^^^^^ ...because method `post_comment` is `async`
[INFO] [stdout] ...
[INFO] [stdout] 146 |     async fn remove_label(
[INFO] [stdout]     |              ^^^^^^^^^^^^ ...because method `remove_label` is `async`
[INFO] [stdout] ...
[INFO] [stdout] 156 |     async fn user_is_collaborator(&self, inst_id: u64, owner: &str, repo: &str, user: &str) -> Result<bool>;
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^^^^^^ ...because method `user_is_collaborator` is `async`
[INFO] [stdout]     = help: consider moving `get_config_file` to another trait
[INFO] [stdout]     = help: consider moving `get_pr_files` to another trait
[INFO] [stdout]     = help: consider moving `add_labels` to another trait
[INFO] [stdout]     = help: consider moving `create_check_run` to another trait
[INFO] [stdout]     = help: consider moving `create_discussion` to another trait
[INFO] [stdout]     = help: consider moving `get_allowed_voters` to another trait
[INFO] [stdout]     = help: consider moving `get_collaborators` to another trait
[INFO] [stdout]     = help: consider moving `get_comment_reactions` to another trait
[INFO] [stdout]     = help: consider moving `get_team_members` to another trait
[INFO] [stdout]     = help: consider moving `is_check_required` to another trait
[INFO] [stdout]     = help: consider moving `post_comment` to another trait
[INFO] [stdout]     = help: consider moving `remove_label` to another trait
[INFO] [stdout]     = help: consider moving `user_is_collaborator` to another trait
[INFO] [stdout]     = help: only type `github::GHApi` implements `github::GH`; consider using it directly instead.
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0282]: type annotations needed
[INFO] [stdout]    --> src/cfg.rs:103:36
[INFO] [stdout]     |
[INFO] [stdout] 103 |             Some(profile) => match profile.validate(is_org) {
[INFO] [stdout]     |                                    ^^^^^^^ cannot infer type
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0282]: type annotations needed
[INFO] [stdout]    --> src/cfg.rs:105:57
[INFO] [stdout]     |
[INFO] [stdout] 105 |                 Err(err) => Err(CfgError::InvalidConfig(err.to_string())),
[INFO] [stdout]     |                                                         ^^^ cannot infer type
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0038]: the trait `github::GH` is not dyn compatible
[INFO] [stdout]    --> src/cmd.rs:48:49
[INFO] [stdout]     |
[INFO] [stdout]  48 |             match Command::from_event_automatic(gh, event).await {
[INFO] [stdout]     |                                                 ^^ `github::GH` is not dyn compatible
[INFO] [stdout]     |
[INFO] [stdout] note: for a trait to be dyn compatible it needs to allow building a vtable
[INFO] [stdout]       for more information, visit <https://doc.rust-lang.org/reference/items/traits.html#dyn-compatibility>
[INFO] [stdout]    --> src/github.rs:62:14
[INFO] [stdout]     |
[INFO] [stdout]  60 | pub(crate) trait GH {
[INFO] [stdout]     |                  -- this trait is not dyn compatible...
[INFO] [stdout]  61 |     /// Add labels to the provided issue.
[INFO] [stdout]  62 |     async fn add_labels(
[INFO] [stdout]     |              ^^^^^^^^^^ ...because method `add_labels` is `async`
[INFO] [stdout] ...
[INFO] [stdout]  72 |     async fn create_check_run(
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^^ ...because method `create_check_run` is `async`
[INFO] [stdout] ...
[INFO] [stdout]  82 |     async fn create_discussion(
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^^^ ...because method `create_discussion` is `async`
[INFO] [stdout] ...
[INFO] [stdout]  93 |     async fn get_allowed_voters(
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^^^^ ...because method `get_allowed_voters` is `async`
[INFO] [stdout] ...
[INFO] [stdout] 104 |     async fn get_collaborators(&self, inst_id: u64, owner: &str, repo: &str) -> Result<Vec<UserName>>;
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^^^ ...because method `get_collaborators` is `async`
[INFO] [stdout] ...
[INFO] [stdout] 107 |     async fn get_comment_reactions(
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^^^^^^^ ...because method `get_comment_reactions` is `async`
[INFO] [stdout] ...
[INFO] [stdout] 116 |     async fn get_config_file(&self, inst_id: u64, owner: &str, repo: &str) -> Option<String>;
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^ ...because method `get_config_file` is `async`
[INFO] [stdout] ...
[INFO] [stdout] 119 |     async fn get_pr_files(&self, inst_id: u64, owner: &str, repo: &str, pr_number: i64) -> Result<Vec<File>>;
[INFO] [stdout]     |              ^^^^^^^^^^^^ ...because method `get_pr_files` is `async`
[INFO] [stdout] ...
[INFO] [stdout] 123 |     async fn get_team_members(
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^^ ...because method `get_team_members` is `async`
[INFO] [stdout] ...
[INFO] [stdout] 133 |     async fn is_check_required(&self, inst_id: u64, owner: &str, repo: &str, branch: &str) -> Result<bool>;
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^^^ ...because method `is_check_required` is `async`
[INFO] [stdout] ...
[INFO] [stdout] 136 |     async fn post_comment(
[INFO] [stdout]     |              ^^^^^^^^^^^^ ...because method `post_comment` is `async`
[INFO] [stdout] ...
[INFO] [stdout] 146 |     async fn remove_label(
[INFO] [stdout]     |              ^^^^^^^^^^^^ ...because method `remove_label` is `async`
[INFO] [stdout] ...
[INFO] [stdout] 156 |     async fn user_is_collaborator(&self, inst_id: u64, owner: &str, repo: &str, user: &str) -> Result<bool>;
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^^^^^^ ...because method `user_is_collaborator` is `async`
[INFO] [stdout]     = help: consider moving `get_config_file` to another trait
[INFO] [stdout]     = help: consider moving `get_pr_files` to another trait
[INFO] [stdout]     = help: consider moving `add_labels` to another trait
[INFO] [stdout]     = help: consider moving `create_check_run` to another trait
[INFO] [stdout]     = help: consider moving `create_discussion` to another trait
[INFO] [stdout]     = help: consider moving `get_allowed_voters` to another trait
[INFO] [stdout]     = help: consider moving `get_collaborators` to another trait
[INFO] [stdout]     = help: consider moving `get_comment_reactions` to another trait
[INFO] [stdout]     = help: consider moving `get_team_members` to another trait
[INFO] [stdout]     = help: consider moving `is_check_required` to another trait
[INFO] [stdout]     = help: consider moving `post_comment` to another trait
[INFO] [stdout]     = help: consider moving `remove_label` to another trait
[INFO] [stdout]     = help: consider moving `user_is_collaborator` to another trait
[INFO] [stdout]     = help: only type `github::GHApi` implements `github::GH`; consider using it directly instead.
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0038]: the trait `github::GH` is not dyn compatible
[INFO] [stdout]    --> src/cmd.rs:102:42
[INFO] [stdout]     |
[INFO] [stdout] 102 |                 let cfg = match Cfg::get(gh.clone(), inst_id, owner, repo).await {
[INFO] [stdout]     |                                          ^^^^^^^^^^ `github::GH` is not dyn compatible
[INFO] [stdout]     |
[INFO] [stdout] note: for a trait to be dyn compatible it needs to allow building a vtable
[INFO] [stdout]       for more information, visit <https://doc.rust-lang.org/reference/items/traits.html#dyn-compatibility>
[INFO] [stdout]    --> src/github.rs:62:14
[INFO] [stdout]     |
[INFO] [stdout]  60 | pub(crate) trait GH {
[INFO] [stdout]     |                  -- this trait is not dyn compatible...
[INFO] [stdout]  61 |     /// Add labels to the provided issue.
[INFO] [stdout]  62 |     async fn add_labels(
[INFO] [stdout]     |              ^^^^^^^^^^ ...because method `add_labels` is `async`
[INFO] [stdout] ...
[INFO] [stdout]  72 |     async fn create_check_run(
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^^ ...because method `create_check_run` is `async`
[INFO] [stdout] ...
[INFO] [stdout]  82 |     async fn create_discussion(
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^^^ ...because method `create_discussion` is `async`
[INFO] [stdout] ...
[INFO] [stdout]  93 |     async fn get_allowed_voters(
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^^^^ ...because method `get_allowed_voters` is `async`
[INFO] [stdout] ...
[INFO] [stdout] 104 |     async fn get_collaborators(&self, inst_id: u64, owner: &str, repo: &str) -> Result<Vec<UserName>>;
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^^^ ...because method `get_collaborators` is `async`
[INFO] [stdout] ...
[INFO] [stdout] 107 |     async fn get_comment_reactions(
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^^^^^^^ ...because method `get_comment_reactions` is `async`
[INFO] [stdout] ...
[INFO] [stdout] 116 |     async fn get_config_file(&self, inst_id: u64, owner: &str, repo: &str) -> Option<String>;
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^ ...because method `get_config_file` is `async`
[INFO] [stdout] ...
[INFO] [stdout] 119 |     async fn get_pr_files(&self, inst_id: u64, owner: &str, repo: &str, pr_number: i64) -> Result<Vec<File>>;
[INFO] [stdout]     |              ^^^^^^^^^^^^ ...because method `get_pr_files` is `async`
[INFO] [stdout] ...
[INFO] [stdout] 123 |     async fn get_team_members(
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^^ ...because method `get_team_members` is `async`
[INFO] [stdout] ...
[INFO] [stdout] 133 |     async fn is_check_required(&self, inst_id: u64, owner: &str, repo: &str, branch: &str) -> Result<bool>;
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^^^ ...because method `is_check_required` is `async`
[INFO] [stdout] ...
[INFO] [stdout] 136 |     async fn post_comment(
[INFO] [stdout]     |              ^^^^^^^^^^^^ ...because method `post_comment` is `async`
[INFO] [stdout] ...
[INFO] [stdout] 146 |     async fn remove_label(
[INFO] [stdout]     |              ^^^^^^^^^^^^ ...because method `remove_label` is `async`
[INFO] [stdout] ...
[INFO] [stdout] 156 |     async fn user_is_collaborator(&self, inst_id: u64, owner: &str, repo: &str, user: &str) -> Result<bool>;
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^^^^^^ ...because method `user_is_collaborator` is `async`
[INFO] [stdout]     = help: consider moving `get_config_file` to another trait
[INFO] [stdout]     = help: consider moving `get_pr_files` to another trait
[INFO] [stdout]     = help: consider moving `add_labels` to another trait
[INFO] [stdout]     = help: consider moving `create_check_run` to another trait
[INFO] [stdout]     = help: consider moving `create_discussion` to another trait
[INFO] [stdout]     = help: consider moving `get_allowed_voters` to another trait
[INFO] [stdout]     = help: consider moving `get_collaborators` to another trait
[INFO] [stdout]     = help: consider moving `get_comment_reactions` to another trait
[INFO] [stdout]     = help: consider moving `get_team_members` to another trait
[INFO] [stdout]     = help: consider moving `is_check_required` to another trait
[INFO] [stdout]     = help: consider moving `post_comment` to another trait
[INFO] [stdout]     = help: consider moving `remove_label` to another trait
[INFO] [stdout]     = help: consider moving `user_is_collaborator` to another trait
[INFO] [stdout]     = help: only type `github::GHApi` implements `github::GH`; consider using it directly instead.
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0038]: the trait `github::GH` is not dyn compatible
[INFO] [stdout]    --> src/cmd.rs:116:36
[INFO] [stdout]     |
[INFO] [stdout] 116 |                     let pr_files = gh.get_pr_files(inst_id, owner, repo, pr_number).await?;
[INFO] [stdout]     |                                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ `github::GH` is not dyn compatible
[INFO] [stdout]     |
[INFO] [stdout] note: for a trait to be dyn compatible it needs to allow building a vtable
[INFO] [stdout]       for more information, visit <https://doc.rust-lang.org/reference/items/traits.html#dyn-compatibility>
[INFO] [stdout]    --> src/github.rs:62:14
[INFO] [stdout]     |
[INFO] [stdout]  60 | pub(crate) trait GH {
[INFO] [stdout]     |                  -- this trait is not dyn compatible...
[INFO] [stdout]  61 |     /// Add labels to the provided issue.
[INFO] [stdout]  62 |     async fn add_labels(
[INFO] [stdout]     |              ^^^^^^^^^^ ...because method `add_labels` is `async`
[INFO] [stdout] ...
[INFO] [stdout]  72 |     async fn create_check_run(
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^^ ...because method `create_check_run` is `async`
[INFO] [stdout] ...
[INFO] [stdout]  82 |     async fn create_discussion(
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^^^ ...because method `create_discussion` is `async`
[INFO] [stdout] ...
[INFO] [stdout]  93 |     async fn get_allowed_voters(
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^^^^ ...because method `get_allowed_voters` is `async`
[INFO] [stdout] ...
[INFO] [stdout] 104 |     async fn get_collaborators(&self, inst_id: u64, owner: &str, repo: &str) -> Result<Vec<UserName>>;
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^^^ ...because method `get_collaborators` is `async`
[INFO] [stdout] ...
[INFO] [stdout] 107 |     async fn get_comment_reactions(
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^^^^^^^ ...because method `get_comment_reactions` is `async`
[INFO] [stdout] ...
[INFO] [stdout] 116 |     async fn get_config_file(&self, inst_id: u64, owner: &str, repo: &str) -> Option<String>;
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^ ...because method `get_config_file` is `async`
[INFO] [stdout] ...
[INFO] [stdout] 119 |     async fn get_pr_files(&self, inst_id: u64, owner: &str, repo: &str, pr_number: i64) -> Result<Vec<File>>;
[INFO] [stdout]     |              ^^^^^^^^^^^^ ...because method `get_pr_files` is `async`
[INFO] [stdout] ...
[INFO] [stdout] 123 |     async fn get_team_members(
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^^ ...because method `get_team_members` is `async`
[INFO] [stdout] ...
[INFO] [stdout] 133 |     async fn is_check_required(&self, inst_id: u64, owner: &str, repo: &str, branch: &str) -> Result<bool>;
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^^^ ...because method `is_check_required` is `async`
[INFO] [stdout] ...
[INFO] [stdout] 136 |     async fn post_comment(
[INFO] [stdout]     |              ^^^^^^^^^^^^ ...because method `post_comment` is `async`
[INFO] [stdout] ...
[INFO] [stdout] 146 |     async fn remove_label(
[INFO] [stdout]     |              ^^^^^^^^^^^^ ...because method `remove_label` is `async`
[INFO] [stdout] ...
[INFO] [stdout] 156 |     async fn user_is_collaborator(&self, inst_id: u64, owner: &str, repo: &str, user: &str) -> Result<bool>;
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^^^^^^ ...because method `user_is_collaborator` is `async`
[INFO] [stdout]     = help: consider moving `get_config_file` to another trait
[INFO] [stdout]     = help: consider moving `get_pr_files` to another trait
[INFO] [stdout]     = help: consider moving `add_labels` to another trait
[INFO] [stdout]     = help: consider moving `create_check_run` to another trait
[INFO] [stdout]     = help: consider moving `create_discussion` to another trait
[INFO] [stdout]     = help: consider moving `get_allowed_voters` to another trait
[INFO] [stdout]     = help: consider moving `get_collaborators` to another trait
[INFO] [stdout]     = help: consider moving `get_comment_reactions` to another trait
[INFO] [stdout]     = help: consider moving `get_team_members` to another trait
[INFO] [stdout]     = help: consider moving `is_check_required` to another trait
[INFO] [stdout]     = help: consider moving `post_comment` to another trait
[INFO] [stdout]     = help: consider moving `remove_label` to another trait
[INFO] [stdout]     = help: consider moving `user_is_collaborator` to another trait
[INFO] [stdout]     = help: only type `github::GHApi` implements `github::GH`; consider using it directly instead.
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0282]: type annotations needed
[INFO] [stdout]    --> src/cmd.rs:118:28
[INFO] [stdout]     |
[INFO] [stdout] 118 |                         if rule.matches(pr_files.as_slice())? {
[INFO] [stdout]     |                            ^^^^ cannot infer type
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0282]: type annotations needed
[INFO] [stdout]    --> src/cmd.rs:116:25
[INFO] [stdout]     |
[INFO] [stdout] 116 |                     let pr_files = gh.get_pr_files(inst_id, owner, repo, pr_number).await?;
[INFO] [stdout]     |                         ^^^^^^^^
[INFO] [stdout] 117 |                     for rule in automation.rules {
[INFO] [stdout] 118 |                         if rule.matches(pr_files.as_slice())? {
[INFO] [stdout]     |                                         -------- type must be known at this point
[INFO] [stdout]     |
[INFO] [stdout] help: consider giving `pr_files` an explicit type
[INFO] [stdout]     |
[INFO] [stdout] 116 |                     let pr_files: /* Type */ = gh.get_pr_files(inst_id, owner, repo, pr_number).await?;
[INFO] [stdout]     |                                 ++++++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0282]: type annotations needed
[INFO] [stdout]   --> src/db.rs:72:20
[INFO] [stdout]    |
[INFO] [stdout] 72 |           let vote = tx
[INFO] [stdout]    |  ____________________^
[INFO] [stdout] 73 | |             .query_opt(
[INFO] [stdout] 74 | |                 "
[INFO] [stdout] 75 | |                 select *
[INFO] [stdout] ...  |
[INFO] [stdout] 85 | |             .await?
[INFO] [stdout]    | |___________________^ cannot infer type
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0282]: type annotations needed
[INFO] [stdout]    --> src/db.rs:115:13
[INFO] [stdout]     |
[INFO] [stdout] 115 |         let db = self.pool.get().await?;
[INFO] [stdout]     |             ^^
[INFO] [stdout] 116 |         let cancelled_vote_id = db
[INFO] [stdout]     |                                 -- type must be known at this point
[INFO] [stdout]     |
[INFO] [stdout] help: consider giving `db` an explicit type
[INFO] [stdout]     |
[INFO] [stdout] 115 |         let db: /* Type */ = self.pool.get().await?;
[INFO] [stdout]     |               ++++++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0308]: mismatched types
[INFO] [stdout]    --> src/db.rs:125:42
[INFO] [stdout]     |
[INFO] [stdout] 125 |                 &[&repository_full_name, &issue_number],
[INFO] [stdout]     |                                          ^^^^^^^^^^^^^ expected `&&str`, found `&i64`
[INFO] [stdout]     |
[INFO] [stdout]     = note: expected reference `&&str`
[INFO] [stdout]                found reference `&i64`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0282]: type annotations needed
[INFO] [stdout]    --> src/db.rs:116:33
[INFO] [stdout]     |
[INFO] [stdout] 116 |           let cancelled_vote_id = db
[INFO] [stdout]     |  _________________________________^
[INFO] [stdout] 117 | |             .query_opt(
[INFO] [stdout] 118 | |                 "
[INFO] [stdout] 119 | |                 delete from vote
[INFO] [stdout] ...   |
[INFO] [stdout] 127 | |             .await?
[INFO] [stdout]     | |___________________^ cannot infer type
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0282]: type annotations needed
[INFO] [stdout]    --> src/db.rs:128:24
[INFO] [stdout]     |
[INFO] [stdout] 128 |             .and_then(|row| row.get("vote_id"));
[INFO] [stdout]     |                        ^^^  --- type must be known at this point
[INFO] [stdout]     |
[INFO] [stdout] help: consider giving this closure parameter an explicit type
[INFO] [stdout]     |
[INFO] [stdout] 128 |             .and_then(|row: /* Type */| row.get("vote_id"));
[INFO] [stdout]     |                           ++++++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0282]: type annotations needed
[INFO] [stdout]    --> src/db.rs:135:13
[INFO] [stdout]     |
[INFO] [stdout] 135 |         let mut db = self.pool.get().await?;
[INFO] [stdout]     |             ^^^^^^
[INFO] [stdout] 136 |         let tx = db.transaction().await?;
[INFO] [stdout]     |                  -- type must be known at this point
[INFO] [stdout]     |
[INFO] [stdout] help: consider giving `db` an explicit type
[INFO] [stdout]     |
[INFO] [stdout] 135 |         let mut db: /* Type */ = self.pool.get().await?;
[INFO] [stdout]     |                   ++++++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0038]: the trait `github::GH` is not dyn compatible
[INFO] [stdout]    --> src/db.rs:143:48
[INFO] [stdout]     |
[INFO] [stdout] 143 |         let results = match results::calculate(gh, owner, repo, &vote).await {
[INFO] [stdout]     |                                                ^^ `github::GH` is not dyn compatible
[INFO] [stdout]     |
[INFO] [stdout] note: for a trait to be dyn compatible it needs to allow building a vtable
[INFO] [stdout]       for more information, visit <https://doc.rust-lang.org/reference/items/traits.html#dyn-compatibility>
[INFO] [stdout]    --> src/github.rs:62:14
[INFO] [stdout]     |
[INFO] [stdout]  60 | pub(crate) trait GH {
[INFO] [stdout]     |                  -- this trait is not dyn compatible...
[INFO] [stdout]  61 |     /// Add labels to the provided issue.
[INFO] [stdout]  62 |     async fn add_labels(
[INFO] [stdout]     |              ^^^^^^^^^^ ...because method `add_labels` is `async`
[INFO] [stdout] ...
[INFO] [stdout]  72 |     async fn create_check_run(
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^^ ...because method `create_check_run` is `async`
[INFO] [stdout] ...
[INFO] [stdout]  82 |     async fn create_discussion(
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^^^ ...because method `create_discussion` is `async`
[INFO] [stdout] ...
[INFO] [stdout]  93 |     async fn get_allowed_voters(
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^^^^ ...because method `get_allowed_voters` is `async`
[INFO] [stdout] ...
[INFO] [stdout] 104 |     async fn get_collaborators(&self, inst_id: u64, owner: &str, repo: &str) -> Result<Vec<UserName>>;
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^^^ ...because method `get_collaborators` is `async`
[INFO] [stdout] ...
[INFO] [stdout] 107 |     async fn get_comment_reactions(
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^^^^^^^ ...because method `get_comment_reactions` is `async`
[INFO] [stdout] ...
[INFO] [stdout] 116 |     async fn get_config_file(&self, inst_id: u64, owner: &str, repo: &str) -> Option<String>;
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^ ...because method `get_config_file` is `async`
[INFO] [stdout] ...
[INFO] [stdout] 119 |     async fn get_pr_files(&self, inst_id: u64, owner: &str, repo: &str, pr_number: i64) -> Result<Vec<File>>;
[INFO] [stdout]     |              ^^^^^^^^^^^^ ...because method `get_pr_files` is `async`
[INFO] [stdout] ...
[INFO] [stdout] 123 |     async fn get_team_members(
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^^ ...because method `get_team_members` is `async`
[INFO] [stdout] ...
[INFO] [stdout] 133 |     async fn is_check_required(&self, inst_id: u64, owner: &str, repo: &str, branch: &str) -> Result<bool>;
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^^^ ...because method `is_check_required` is `async`
[INFO] [stdout] ...
[INFO] [stdout] 136 |     async fn post_comment(
[INFO] [stdout]     |              ^^^^^^^^^^^^ ...because method `post_comment` is `async`
[INFO] [stdout] ...
[INFO] [stdout] 146 |     async fn remove_label(
[INFO] [stdout]     |              ^^^^^^^^^^^^ ...because method `remove_label` is `async`
[INFO] [stdout] ...
[INFO] [stdout] 156 |     async fn user_is_collaborator(&self, inst_id: u64, owner: &str, repo: &str, user: &str) -> Result<bool>;
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^^^^^^ ...because method `user_is_collaborator` is `async`
[INFO] [stdout]     = help: consider moving `get_config_file` to another trait
[INFO] [stdout]     = help: consider moving `get_pr_files` to another trait
[INFO] [stdout]     = help: consider moving `add_labels` to another trait
[INFO] [stdout]     = help: consider moving `create_check_run` to another trait
[INFO] [stdout]     = help: consider moving `create_discussion` to another trait
[INFO] [stdout]     = help: consider moving `get_allowed_voters` to another trait
[INFO] [stdout]     = help: consider moving `get_collaborators` to another trait
[INFO] [stdout]     = help: consider moving `get_comment_reactions` to another trait
[INFO] [stdout]     = help: consider moving `get_team_members` to another trait
[INFO] [stdout]     = help: consider moving `is_check_required` to another trait
[INFO] [stdout]     = help: consider moving `post_comment` to another trait
[INFO] [stdout]     = help: consider moving `remove_label` to another trait
[INFO] [stdout]     = help: consider moving `user_is_collaborator` to another trait
[INFO] [stdout]     = help: only type `github::GHApi` implements `github::GH`; consider using it directly instead.
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0282]: type annotations needed
[INFO] [stdout]    --> src/db.rs:165:13
[INFO] [stdout]     |
[INFO] [stdout] 165 |         let db = self.pool.get().await?;
[INFO] [stdout]     |             ^^
[INFO] [stdout] 166 |         let vote = db
[INFO] [stdout]     |                    -- type must be known at this point
[INFO] [stdout]     |
[INFO] [stdout] help: consider giving `db` an explicit type
[INFO] [stdout]     |
[INFO] [stdout] 165 |         let db: /* Type */ = self.pool.get().await?;
[INFO] [stdout]     |               ++++++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0308]: mismatched types
[INFO] [stdout]    --> src/db.rs:175:42
[INFO] [stdout]     |
[INFO] [stdout] 175 |                 &[&repository_full_name, &issue_number],
[INFO] [stdout]     |                                          ^^^^^^^^^^^^^ expected `&&str`, found `&i64`
[INFO] [stdout]     |
[INFO] [stdout]     = note: expected reference `&&str`
[INFO] [stdout]                found reference `&i64`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0282]: type annotations needed
[INFO] [stdout]    --> src/db.rs:166:20
[INFO] [stdout]     |
[INFO] [stdout] 166 |           let vote = db
[INFO] [stdout]     |  ____________________^
[INFO] [stdout] 167 | |             .query_opt(
[INFO] [stdout] 168 | |                 "
[INFO] [stdout] 169 | |                 select *
[INFO] [stdout] ...   |
[INFO] [stdout] 177 | |             .await?
[INFO] [stdout]     | |___________________^ cannot infer type
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0282]: type annotations needed
[INFO] [stdout]    --> src/db.rs:184:13
[INFO] [stdout]     |
[INFO] [stdout] 184 |         let db = self.pool.get().await?;
[INFO] [stdout]     |             ^^
[INFO] [stdout] 185 |         let votes = db
[INFO] [stdout]     |                     -- type must be known at this point
[INFO] [stdout]     |
[INFO] [stdout] help: consider giving `db` an explicit type
[INFO] [stdout]     |
[INFO] [stdout] 184 |         let db: /* Type */ = self.pool.get().await?;
[INFO] [stdout]     |               ++++++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0282]: type annotations needed
[INFO] [stdout]    --> src/db.rs:185:21
[INFO] [stdout]     |
[INFO] [stdout] 185 |           let votes = db
[INFO] [stdout]     |  _____________________^
[INFO] [stdout] 186 | |             .query(
[INFO] [stdout] 187 | |                 "
[INFO] [stdout] 188 | |                 select *
[INFO] [stdout] ...   |
[INFO] [stdout] 196 | |             .await?
[INFO] [stdout]     | |___________________^ cannot infer type
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0282]: type annotations needed
[INFO] [stdout]    --> src/db.rs:205:13
[INFO] [stdout]     |
[INFO] [stdout] 205 |         let db = self.pool.get().await?;
[INFO] [stdout]     |             ^^
[INFO] [stdout] 206 |         let inputs = db
[INFO] [stdout]     |                      -- type must be known at this point
[INFO] [stdout]     |
[INFO] [stdout] help: consider giving `db` an explicit type
[INFO] [stdout]     |
[INFO] [stdout] 205 |         let db: /* Type */ = self.pool.get().await?;
[INFO] [stdout]     |               ++++++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0282]: type annotations needed
[INFO] [stdout]    --> src/db.rs:206:22
[INFO] [stdout]     |
[INFO] [stdout] 206 |           let inputs = db
[INFO] [stdout]     |  ______________________^
[INFO] [stdout] 207 | |             .query(
[INFO] [stdout] 208 | |                 "
[INFO] [stdout] 209 | |                 select repository_full_name, issue_number
[INFO] [stdout] ...   |
[INFO] [stdout] 224 | |             .await?
[INFO] [stdout]     | |___________________^ cannot infer type
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0282]: type annotations needed
[INFO] [stdout]    --> src/db.rs:226:19
[INFO] [stdout]     |
[INFO] [stdout] 226 |             .map(|row| CheckVoteInput {
[INFO] [stdout]     |                   ^^^
[INFO] [stdout] 227 |                 repository_full_name: row.get("repository_full_name"),
[INFO] [stdout]     |                                       --- type must be known at this point
[INFO] [stdout]     |
[INFO] [stdout] help: consider giving this closure parameter an explicit type
[INFO] [stdout]     |
[INFO] [stdout] 226 |             .map(|row: /* Type */| CheckVoteInput {
[INFO] [stdout]     |                      ++++++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0282]: type annotations needed
[INFO] [stdout]    --> src/db.rs:236:13
[INFO] [stdout]     |
[INFO] [stdout] 236 |         let db = self.pool.get().await?;
[INFO] [stdout]     |             ^^
[INFO] [stdout] 237 |         let has_vote = db
[INFO] [stdout]     |                        -- type must be known at this point
[INFO] [stdout]     |
[INFO] [stdout] help: consider giving `db` an explicit type
[INFO] [stdout]     |
[INFO] [stdout] 236 |         let db: /* Type */ = self.pool.get().await?;
[INFO] [stdout]     |               ++++++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0308]: mismatched types
[INFO] [stdout]    --> src/db.rs:246:42
[INFO] [stdout]     |
[INFO] [stdout] 246 |                 &[&repository_full_name, &issue_number],
[INFO] [stdout]     |                                          ^^^^^^^^^^^^^ expected `&&str`, found `&i64`
[INFO] [stdout]     |
[INFO] [stdout]     = note: expected reference `&&str`
[INFO] [stdout]                found reference `&i64`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0282]: type annotations needed
[INFO] [stdout]    --> src/db.rs:237:24
[INFO] [stdout]     |
[INFO] [stdout] 237 |           let has_vote = db
[INFO] [stdout]     |  ________________________^
[INFO] [stdout] 238 | |             .query_one(
[INFO] [stdout] 239 | |                 "
[INFO] [stdout] 240 | |                 select exists (
[INFO] [stdout] ...   |
[INFO] [stdout] 248 | |             .await?
[INFO] [stdout]     | |___________________^ cannot infer type
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0282]: type annotations needed
[INFO] [stdout]    --> src/db.rs:255:13
[INFO] [stdout]     |
[INFO] [stdout] 255 |         let db = self.pool.get().await?;
[INFO] [stdout]     |             ^^
[INFO] [stdout] 256 |         let has_vote_open = db
[INFO] [stdout]     |                             -- type must be known at this point
[INFO] [stdout]     |
[INFO] [stdout] help: consider giving `db` an explicit type
[INFO] [stdout]     |
[INFO] [stdout] 255 |         let db: /* Type */ = self.pool.get().await?;
[INFO] [stdout]     |               ++++++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0308]: mismatched types
[INFO] [stdout]    --> src/db.rs:266:42
[INFO] [stdout]     |
[INFO] [stdout] 266 |                 &[&repository_full_name, &issue_number],
[INFO] [stdout]     |                                          ^^^^^^^^^^^^^ expected `&&str`, found `&i64`
[INFO] [stdout]     |
[INFO] [stdout]     = note: expected reference `&&str`
[INFO] [stdout]                found reference `&i64`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0282]: type annotations needed
[INFO] [stdout]    --> src/db.rs:256:29
[INFO] [stdout]     |
[INFO] [stdout] 256 |           let has_vote_open = db
[INFO] [stdout]     |  _____________________________^
[INFO] [stdout] 257 | |             .query_one(
[INFO] [stdout] 258 | |                 "
[INFO] [stdout] 259 | |                 select exists (
[INFO] [stdout] ...   |
[INFO] [stdout] 268 | |             .await?
[INFO] [stdout]     | |___________________^ cannot infer type
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0282]: type annotations needed
[INFO] [stdout]    --> src/db.rs:280:13
[INFO] [stdout]     |
[INFO] [stdout] 280 |         let db = self.pool.get().await?;
[INFO] [stdout]     |             ^^
[INFO] [stdout] 281 |         let vote_id = db
[INFO] [stdout]     |                       -- type must be known at this point
[INFO] [stdout]     |
[INFO] [stdout] help: consider giving `db` an explicit type
[INFO] [stdout]     |
[INFO] [stdout] 280 |         let db: /* Type */ = self.pool.get().await?;
[INFO] [stdout]     |               ++++++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0282]: type annotations needed
[INFO] [stdout]    --> src/db.rs:281:23
[INFO] [stdout]     |
[INFO] [stdout] 281 |           let vote_id = db
[INFO] [stdout]     |  _______________________^
[INFO] [stdout] 282 | |             .query_one(
[INFO] [stdout] 283 | |                 "
[INFO] [stdout] 284 | |                 insert into vote (
[INFO] [stdout] ...   |
[INFO] [stdout] 326 | |             .await?
[INFO] [stdout]     | |___________________^ cannot infer type
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0282]: type annotations needed
[INFO] [stdout]    --> src/db.rs:333:13
[INFO] [stdout]     |
[INFO] [stdout] 333 |         let db = self.pool.get().await?;
[INFO] [stdout]     |             ^^
[INFO] [stdout] 334 |         db.execute(
[INFO] [stdout]     |         -- type must be known at this point
[INFO] [stdout]     |
[INFO] [stdout] help: consider giving `db` an explicit type
[INFO] [stdout]     |
[INFO] [stdout] 333 |         let db: /* Type */ = self.pool.get().await?;
[INFO] [stdout]     |               ++++++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0282]: type annotations needed
[INFO] [stdout]    --> src/db.rs:348:13
[INFO] [stdout]     |
[INFO] [stdout] 348 |         let db = self.pool.get().await?;
[INFO] [stdout]     |             ^^
[INFO] [stdout] 349 |         db.execute(
[INFO] [stdout]     |         -- type must be known at this point
[INFO] [stdout]     |
[INFO] [stdout] help: consider giving `db` an explicit type
[INFO] [stdout]     |
[INFO] [stdout] 348 |         let db: /* Type */ = self.pool.get().await?;
[INFO] [stdout]     |               ++++++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0599]: no function or associated item named `build_query` found for struct `AnnouncementRepoQuery` in the current scope
[INFO] [stdout]    --> src/github.rs:237:46
[INFO] [stdout]     |
[INFO] [stdout]  46 | pub struct AnnouncementRepoQuery;
[INFO] [stdout]     | -------------------------------- function or associated item `build_query` not found for this struct
[INFO] [stdout] ...
[INFO] [stdout] 237 |             .graphql(&AnnouncementRepoQuery::build_query(
[INFO] [stdout]     |                                              ^^^^^^^^^^^ function or associated item not found in `AnnouncementRepoQuery`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0599]: no function or associated item named `build_query` found for struct `CreateDiscussion` in the current scope
[INFO] [stdout]    --> src/github.rs:254:41
[INFO] [stdout]     |
[INFO] [stdout]  55 | pub struct CreateDiscussion;
[INFO] [stdout]     | --------------------------- function or associated item `build_query` not found for this struct
[INFO] [stdout] ...
[INFO] [stdout] 254 |             .graphql(&CreateDiscussion::build_query(create_discussion::Variables {
[INFO] [stdout]     |                                         ^^^^^^^^^^^ function or associated item not found in `CreateDiscussion`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0282]: type annotations needed
[INFO] [stdout]    --> src/github.rs:253:76
[INFO] [stdout]     |
[INFO] [stdout] 253 |           let _: graphql_client::Response<create_discussion::ResponseData> = client
[INFO] [stdout]     |  ____________________________________________________________________________^
[INFO] [stdout] 254 | |             .graphql(&CreateDiscussion::build_query(create_discussion::Variables {
[INFO] [stdout] 255 | |                 repository_id,
[INFO] [stdout] 256 | |                 category_id,
[INFO] [stdout] ...   |
[INFO] [stdout] 259 | |             }))
[INFO] [stdout] 260 | |             .await
[INFO] [stdout]     | |__________________^ cannot infer type
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0282]: type annotations needed
[INFO] [stdout]    --> src/github.rs:327:29
[INFO] [stdout]     |
[INFO] [stdout] 327 |         let collaborators = client.all_pages(first_page).await?.into_iter().map(|u| u.login).collect();
[INFO] [stdout]     |                             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ cannot infer type
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0282]: type annotations needed
[INFO] [stdout]    --> src/github.rs:396:13
[INFO] [stdout]     |
[INFO] [stdout] 396 |             client.all_pages(first_page).await?.into_iter().map(|u| u.login).collect();
[INFO] [stdout]     |             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ cannot infer type
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0282]: type annotations needed
[INFO] [stdout]    --> src/github.rs:447:13
[INFO] [stdout]     |
[INFO] [stdout] 447 |         let resp = client._get(url).await?;
[INFO] [stdout]     |             ^^^^
[INFO] [stdout] 448 |         if resp.status() == StatusCode::NO_CONTENT {
[INFO] [stdout]     |            ---- type must be known at this point
[INFO] [stdout]     |
[INFO] [stdout] help: consider giving `resp` an explicit type
[INFO] [stdout]     |
[INFO] [stdout] 447 |         let resp: /* Type */ = client._get(url).await?;
[INFO] [stdout]     |                 ++++++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0038]: the trait `DB` is not dyn compatible
[INFO] [stdout]   --> src/handlers.rs:28:9
[INFO] [stdout]    |
[INFO] [stdout] 28 |     db: DynDB,
[INFO] [stdout]    |         ^^^^^ `DB` is not dyn compatible
[INFO] [stdout]    |
[INFO] [stdout] note: for a trait to be dyn compatible it needs to allow building a vtable
[INFO] [stdout]       for more information, visit <https://doc.rust-lang.org/reference/items/traits.html#dyn-compatibility>
[INFO] [stdout]   --> src/db.rs:24:14
[INFO] [stdout]    |
[INFO] [stdout] 22 | pub(crate) trait DB {
[INFO] [stdout]    |                  -- this trait is not dyn compatible...
[INFO] [stdout] 23 |     /// Cancel open vote (if exists) in the issue/pr provided.
[INFO] [stdout] 24 |     async fn cancel_vote(&self, repository_full_name: &str, issue_number: i64) -> Result<Option<Uuid>>;
[INFO] [stdout]    |              ^^^^^^^^^^^ ...because method `cancel_vote` is `async`
[INFO] [stdout] ...
[INFO] [stdout] 27 |     async fn close_finished_vote(&self, gh: DynGH) -> Result<Option<(Vote, Option<VoteResults>)>>;
[INFO] [stdout]    |              ^^^^^^^^^^^^^^^^^^^ ...because method `close_finished_vote` is `async`
[INFO] [stdout] ...
[INFO] [stdout] 30 |     async fn get_open_vote(&self, repository_full_name: &str, issue_number: i64) -> Result<Option<Vote>>;
[INFO] [stdout]    |              ^^^^^^^^^^^^^ ...because method `get_open_vote` is `async`
[INFO] [stdout] ...
[INFO] [stdout] 33 |     async fn get_open_votes_with_close_on_passing(&self) -> Result<Vec<Vote>>;
[INFO] [stdout]    |              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ...because method `get_open_votes_with_close_on_passing` is `async`
[INFO] [stdout] ...
[INFO] [stdout] 36 |     async fn get_pending_status_checks(&self) -> Result<Vec<CheckVoteInput>>;
[INFO] [stdout]    |              ^^^^^^^^^^^^^^^^^^^^^^^^^ ...because method `get_pending_status_checks` is `async`
[INFO] [stdout] ...
[INFO] [stdout] 39 |     async fn has_vote(&self, repository_full_name: &str, issue_number: i64) -> Result<bool>;
[INFO] [stdout]    |              ^^^^^^^^ ...because method `has_vote` is `async`
[INFO] [stdout] ...
[INFO] [stdout] 42 |     async fn has_vote_open(&self, repository_full_name: &str, issue_number: i64) -> Result<bool>;
[INFO] [stdout]    |              ^^^^^^^^^^^^^ ...because method `has_vote_open` is `async`
[INFO] [stdout] ...
[INFO] [stdout] 45 |     async fn store_vote(
[INFO] [stdout]    |              ^^^^^^^^^^ ...because method `store_vote` is `async`
[INFO] [stdout] ...
[INFO] [stdout] 53 |     async fn update_vote_ends_at(&self, vote_id: Uuid) -> Result<()>;
[INFO] [stdout]    |              ^^^^^^^^^^^^^^^^^^^ ...because method `update_vote_ends_at` is `async`
[INFO] [stdout] ...
[INFO] [stdout] 56 |     async fn update_vote_last_check(&self, vote_id: Uuid) -> Result<()>;
[INFO] [stdout]    |              ^^^^^^^^^^^^^^^^^^^^^^ ...because method `update_vote_last_check` is `async`
[INFO] [stdout]    = help: consider moving `cancel_vote` to another trait
[INFO] [stdout]    = help: consider moving `close_finished_vote` to another trait
[INFO] [stdout]    = help: consider moving `get_open_vote` to another trait
[INFO] [stdout]    = help: consider moving `get_open_votes_with_close_on_passing` to another trait
[INFO] [stdout]    = help: consider moving `get_pending_status_checks` to another trait
[INFO] [stdout]    = help: consider moving `has_vote` to another trait
[INFO] [stdout]    = help: consider moving `has_vote_open` to another trait
[INFO] [stdout]    = help: consider moving `store_vote` to another trait
[INFO] [stdout]    = help: consider moving `update_vote_ends_at` to another trait
[INFO] [stdout]    = help: consider moving `update_vote_last_check` to another trait
[INFO] [stdout]    = help: only type `db::PgDB` implements `DB`; consider using it directly instead.
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0038]: the trait `github::GH` is not dyn compatible
[INFO] [stdout]    --> src/handlers.rs:29:9
[INFO] [stdout]     |
[INFO] [stdout]  29 |     gh: DynGH,
[INFO] [stdout]     |         ^^^^^ `github::GH` is not dyn compatible
[INFO] [stdout]     |
[INFO] [stdout] note: for a trait to be dyn compatible it needs to allow building a vtable
[INFO] [stdout]       for more information, visit <https://doc.rust-lang.org/reference/items/traits.html#dyn-compatibility>
[INFO] [stdout]    --> src/github.rs:62:14
[INFO] [stdout]     |
[INFO] [stdout]  60 | pub(crate) trait GH {
[INFO] [stdout]     |                  -- this trait is not dyn compatible...
[INFO] [stdout]  61 |     /// Add labels to the provided issue.
[INFO] [stdout]  62 |     async fn add_labels(
[INFO] [stdout]     |              ^^^^^^^^^^ ...because method `add_labels` is `async`
[INFO] [stdout] ...
[INFO] [stdout]  72 |     async fn create_check_run(
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^^ ...because method `create_check_run` is `async`
[INFO] [stdout] ...
[INFO] [stdout]  82 |     async fn create_discussion(
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^^^ ...because method `create_discussion` is `async`
[INFO] [stdout] ...
[INFO] [stdout]  93 |     async fn get_allowed_voters(
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^^^^ ...because method `get_allowed_voters` is `async`
[INFO] [stdout] ...
[INFO] [stdout] 104 |     async fn get_collaborators(&self, inst_id: u64, owner: &str, repo: &str) -> Result<Vec<UserName>>;
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^^^ ...because method `get_collaborators` is `async`
[INFO] [stdout] ...
[INFO] [stdout] 107 |     async fn get_comment_reactions(
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^^^^^^^ ...because method `get_comment_reactions` is `async`
[INFO] [stdout] ...
[INFO] [stdout] 116 |     async fn get_config_file(&self, inst_id: u64, owner: &str, repo: &str) -> Option<String>;
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^ ...because method `get_config_file` is `async`
[INFO] [stdout] ...
[INFO] [stdout] 119 |     async fn get_pr_files(&self, inst_id: u64, owner: &str, repo: &str, pr_number: i64) -> Result<Vec<File>>;
[INFO] [stdout]     |              ^^^^^^^^^^^^ ...because method `get_pr_files` is `async`
[INFO] [stdout] ...
[INFO] [stdout] 123 |     async fn get_team_members(
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^^ ...because method `get_team_members` is `async`
[INFO] [stdout] ...
[INFO] [stdout] 133 |     async fn is_check_required(&self, inst_id: u64, owner: &str, repo: &str, branch: &str) -> Result<bool>;
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^^^ ...because method `is_check_required` is `async`
[INFO] [stdout] ...
[INFO] [stdout] 136 |     async fn post_comment(
[INFO] [stdout]     |              ^^^^^^^^^^^^ ...because method `post_comment` is `async`
[INFO] [stdout] ...
[INFO] [stdout] 146 |     async fn remove_label(
[INFO] [stdout]     |              ^^^^^^^^^^^^ ...because method `remove_label` is `async`
[INFO] [stdout] ...
[INFO] [stdout] 156 |     async fn user_is_collaborator(&self, inst_id: u64, owner: &str, repo: &str, user: &str) -> Result<bool>;
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^^^^^^ ...because method `user_is_collaborator` is `async`
[INFO] [stdout]     = help: consider moving `get_config_file` to another trait
[INFO] [stdout]     = help: consider moving `get_pr_files` to another trait
[INFO] [stdout]     = help: consider moving `add_labels` to another trait
[INFO] [stdout]     = help: consider moving `create_check_run` to another trait
[INFO] [stdout]     = help: consider moving `create_discussion` to another trait
[INFO] [stdout]     = help: consider moving `get_allowed_voters` to another trait
[INFO] [stdout]     = help: consider moving `get_collaborators` to another trait
[INFO] [stdout]     = help: consider moving `get_comment_reactions` to another trait
[INFO] [stdout]     = help: consider moving `get_team_members` to another trait
[INFO] [stdout]     = help: consider moving `is_check_required` to another trait
[INFO] [stdout]     = help: consider moving `post_comment` to another trait
[INFO] [stdout]     = help: consider moving `remove_label` to another trait
[INFO] [stdout]     = help: consider moving `user_is_collaborator` to another trait
[INFO] [stdout]     = help: only type `github::GHApi` implements `github::GH`; consider using it directly instead.
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0038]: the trait `DB` is not dyn compatible
[INFO] [stdout]   --> src/handlers.rs:38:9
[INFO] [stdout]    |
[INFO] [stdout] 38 |     db: DynDB,
[INFO] [stdout]    |         ^^^^^ `DB` is not dyn compatible
[INFO] [stdout]    |
[INFO] [stdout] note: for a trait to be dyn compatible it needs to allow building a vtable
[INFO] [stdout]       for more information, visit <https://doc.rust-lang.org/reference/items/traits.html#dyn-compatibility>
[INFO] [stdout]   --> src/db.rs:24:14
[INFO] [stdout]    |
[INFO] [stdout] 22 | pub(crate) trait DB {
[INFO] [stdout]    |                  -- this trait is not dyn compatible...
[INFO] [stdout] 23 |     /// Cancel open vote (if exists) in the issue/pr provided.
[INFO] [stdout] 24 |     async fn cancel_vote(&self, repository_full_name: &str, issue_number: i64) -> Result<Option<Uuid>>;
[INFO] [stdout]    |              ^^^^^^^^^^^ ...because method `cancel_vote` is `async`
[INFO] [stdout] ...
[INFO] [stdout] 27 |     async fn close_finished_vote(&self, gh: DynGH) -> Result<Option<(Vote, Option<VoteResults>)>>;
[INFO] [stdout]    |              ^^^^^^^^^^^^^^^^^^^ ...because method `close_finished_vote` is `async`
[INFO] [stdout] ...
[INFO] [stdout] 30 |     async fn get_open_vote(&self, repository_full_name: &str, issue_number: i64) -> Result<Option<Vote>>;
[INFO] [stdout]    |              ^^^^^^^^^^^^^ ...because method `get_open_vote` is `async`
[INFO] [stdout] ...
[INFO] [stdout] 33 |     async fn get_open_votes_with_close_on_passing(&self) -> Result<Vec<Vote>>;
[INFO] [stdout]    |              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ...because method `get_open_votes_with_close_on_passing` is `async`
[INFO] [stdout] ...
[INFO] [stdout] 36 |     async fn get_pending_status_checks(&self) -> Result<Vec<CheckVoteInput>>;
[INFO] [stdout]    |              ^^^^^^^^^^^^^^^^^^^^^^^^^ ...because method `get_pending_status_checks` is `async`
[INFO] [stdout] ...
[INFO] [stdout] 39 |     async fn has_vote(&self, repository_full_name: &str, issue_number: i64) -> Result<bool>;
[INFO] [stdout]    |              ^^^^^^^^ ...because method `has_vote` is `async`
[INFO] [stdout] ...
[INFO] [stdout] 42 |     async fn has_vote_open(&self, repository_full_name: &str, issue_number: i64) -> Result<bool>;
[INFO] [stdout]    |              ^^^^^^^^^^^^^ ...because method `has_vote_open` is `async`
[INFO] [stdout] ...
[INFO] [stdout] 45 |     async fn store_vote(
[INFO] [stdout]    |              ^^^^^^^^^^ ...because method `store_vote` is `async`
[INFO] [stdout] ...
[INFO] [stdout] 53 |     async fn update_vote_ends_at(&self, vote_id: Uuid) -> Result<()>;
[INFO] [stdout]    |              ^^^^^^^^^^^^^^^^^^^ ...because method `update_vote_ends_at` is `async`
[INFO] [stdout] ...
[INFO] [stdout] 56 |     async fn update_vote_last_check(&self, vote_id: Uuid) -> Result<()>;
[INFO] [stdout]    |              ^^^^^^^^^^^^^^^^^^^^^^ ...because method `update_vote_last_check` is `async`
[INFO] [stdout]    = help: consider moving `cancel_vote` to another trait
[INFO] [stdout]    = help: consider moving `close_finished_vote` to another trait
[INFO] [stdout]    = help: consider moving `get_open_vote` to another trait
[INFO] [stdout]    = help: consider moving `get_open_votes_with_close_on_passing` to another trait
[INFO] [stdout]    = help: consider moving `get_pending_status_checks` to another trait
[INFO] [stdout]    = help: consider moving `has_vote` to another trait
[INFO] [stdout]    = help: consider moving `has_vote_open` to another trait
[INFO] [stdout]    = help: consider moving `store_vote` to another trait
[INFO] [stdout]    = help: consider moving `update_vote_ends_at` to another trait
[INFO] [stdout]    = help: consider moving `update_vote_last_check` to another trait
[INFO] [stdout]    = help: only type `db::PgDB` implements `DB`; consider using it directly instead.
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0038]: the trait `github::GH` is not dyn compatible
[INFO] [stdout]    --> src/handlers.rs:39:9
[INFO] [stdout]     |
[INFO] [stdout]  39 |     gh: DynGH,
[INFO] [stdout]     |         ^^^^^ `github::GH` is not dyn compatible
[INFO] [stdout]     |
[INFO] [stdout] note: for a trait to be dyn compatible it needs to allow building a vtable
[INFO] [stdout]       for more information, visit <https://doc.rust-lang.org/reference/items/traits.html#dyn-compatibility>
[INFO] [stdout]    --> src/github.rs:62:14
[INFO] [stdout]     |
[INFO] [stdout]  60 | pub(crate) trait GH {
[INFO] [stdout]     |                  -- this trait is not dyn compatible...
[INFO] [stdout]  61 |     /// Add labels to the provided issue.
[INFO] [stdout]  62 |     async fn add_labels(
[INFO] [stdout]     |              ^^^^^^^^^^ ...because method `add_labels` is `async`
[INFO] [stdout] ...
[INFO] [stdout]  72 |     async fn create_check_run(
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^^ ...because method `create_check_run` is `async`
[INFO] [stdout] ...
[INFO] [stdout]  82 |     async fn create_discussion(
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^^^ ...because method `create_discussion` is `async`
[INFO] [stdout] ...
[INFO] [stdout]  93 |     async fn get_allowed_voters(
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^^^^ ...because method `get_allowed_voters` is `async`
[INFO] [stdout] ...
[INFO] [stdout] 104 |     async fn get_collaborators(&self, inst_id: u64, owner: &str, repo: &str) -> Result<Vec<UserName>>;
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^^^ ...because method `get_collaborators` is `async`
[INFO] [stdout] ...
[INFO] [stdout] 107 |     async fn get_comment_reactions(
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^^^^^^^ ...because method `get_comment_reactions` is `async`
[INFO] [stdout] ...
[INFO] [stdout] 116 |     async fn get_config_file(&self, inst_id: u64, owner: &str, repo: &str) -> Option<String>;
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^ ...because method `get_config_file` is `async`
[INFO] [stdout] ...
[INFO] [stdout] 119 |     async fn get_pr_files(&self, inst_id: u64, owner: &str, repo: &str, pr_number: i64) -> Result<Vec<File>>;
[INFO] [stdout]     |              ^^^^^^^^^^^^ ...because method `get_pr_files` is `async`
[INFO] [stdout] ...
[INFO] [stdout] 123 |     async fn get_team_members(
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^^ ...because method `get_team_members` is `async`
[INFO] [stdout] ...
[INFO] [stdout] 133 |     async fn is_check_required(&self, inst_id: u64, owner: &str, repo: &str, branch: &str) -> Result<bool>;
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^^^ ...because method `is_check_required` is `async`
[INFO] [stdout] ...
[INFO] [stdout] 136 |     async fn post_comment(
[INFO] [stdout]     |              ^^^^^^^^^^^^ ...because method `post_comment` is `async`
[INFO] [stdout] ...
[INFO] [stdout] 146 |     async fn remove_label(
[INFO] [stdout]     |              ^^^^^^^^^^^^ ...because method `remove_label` is `async`
[INFO] [stdout] ...
[INFO] [stdout] 156 |     async fn user_is_collaborator(&self, inst_id: u64, owner: &str, repo: &str, user: &str) -> Result<bool>;
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^^^^^^ ...because method `user_is_collaborator` is `async`
[INFO] [stdout]     = help: consider moving `get_config_file` to another trait
[INFO] [stdout]     = help: consider moving `get_pr_files` to another trait
[INFO] [stdout]     = help: consider moving `add_labels` to another trait
[INFO] [stdout]     = help: consider moving `create_check_run` to another trait
[INFO] [stdout]     = help: consider moving `create_discussion` to another trait
[INFO] [stdout]     = help: consider moving `get_allowed_voters` to another trait
[INFO] [stdout]     = help: consider moving `get_collaborators` to another trait
[INFO] [stdout]     = help: consider moving `get_comment_reactions` to another trait
[INFO] [stdout]     = help: consider moving `get_team_members` to another trait
[INFO] [stdout]     = help: consider moving `is_check_required` to another trait
[INFO] [stdout]     = help: consider moving `post_comment` to another trait
[INFO] [stdout]     = help: consider moving `remove_label` to another trait
[INFO] [stdout]     = help: consider moving `user_is_collaborator` to another trait
[INFO] [stdout]     = help: only type `github::GHApi` implements `github::GH`; consider using it directly instead.
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0038]: the trait `DB` is not dyn compatible
[INFO] [stdout]    --> src/handlers.rs:166:31
[INFO] [stdout]     |
[INFO] [stdout] 166 | async fn set_check_status(db: DynDB, gh: DynGH, event: &PullRequestEvent) -> Result<()> {
[INFO] [stdout]     |                               ^^^^^ `DB` is not dyn compatible
[INFO] [stdout]     |
[INFO] [stdout] note: for a trait to be dyn compatible it needs to allow building a vtable
[INFO] [stdout]       for more information, visit <https://doc.rust-lang.org/reference/items/traits.html#dyn-compatibility>
[INFO] [stdout]    --> src/db.rs:24:14
[INFO] [stdout]     |
[INFO] [stdout]  22 | pub(crate) trait DB {
[INFO] [stdout]     |                  -- this trait is not dyn compatible...
[INFO] [stdout]  23 |     /// Cancel open vote (if exists) in the issue/pr provided.
[INFO] [stdout]  24 |     async fn cancel_vote(&self, repository_full_name: &str, issue_number: i64) -> Result<Option<Uuid>>;
[INFO] [stdout]     |              ^^^^^^^^^^^ ...because method `cancel_vote` is `async`
[INFO] [stdout] ...
[INFO] [stdout]  27 |     async fn close_finished_vote(&self, gh: DynGH) -> Result<Option<(Vote, Option<VoteResults>)>>;
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^^^^^ ...because method `close_finished_vote` is `async`
[INFO] [stdout] ...
[INFO] [stdout]  30 |     async fn get_open_vote(&self, repository_full_name: &str, issue_number: i64) -> Result<Option<Vote>>;
[INFO] [stdout]     |              ^^^^^^^^^^^^^ ...because method `get_open_vote` is `async`
[INFO] [stdout] ...
[INFO] [stdout]  33 |     async fn get_open_votes_with_close_on_passing(&self) -> Result<Vec<Vote>>;
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ...because method `get_open_votes_with_close_on_passing` is `async`
[INFO] [stdout] ...
[INFO] [stdout]  36 |     async fn get_pending_status_checks(&self) -> Result<Vec<CheckVoteInput>>;
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^^^^^^^^^^^ ...because method `get_pending_status_checks` is `async`
[INFO] [stdout] ...
[INFO] [stdout]  39 |     async fn has_vote(&self, repository_full_name: &str, issue_number: i64) -> Result<bool>;
[INFO] [stdout]     |              ^^^^^^^^ ...because method `has_vote` is `async`
[INFO] [stdout] ...
[INFO] [stdout]  42 |     async fn has_vote_open(&self, repository_full_name: &str, issue_number: i64) -> Result<bool>;
[INFO] [stdout]     |              ^^^^^^^^^^^^^ ...because method `has_vote_open` is `async`
[INFO] [stdout] ...
[INFO] [stdout]  45 |     async fn store_vote(
[INFO] [stdout]     |              ^^^^^^^^^^ ...because method `store_vote` is `async`
[INFO] [stdout] ...
[INFO] [stdout]  53 |     async fn update_vote_ends_at(&self, vote_id: Uuid) -> Result<()>;
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^^^^^ ...because method `update_vote_ends_at` is `async`
[INFO] [stdout] ...
[INFO] [stdout]  56 |     async fn update_vote_last_check(&self, vote_id: Uuid) -> Result<()>;
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^^^^^^^^ ...because method `update_vote_last_check` is `async`
[INFO] [stdout]     = help: consider moving `cancel_vote` to another trait
[INFO] [stdout]     = help: consider moving `close_finished_vote` to another trait
[INFO] [stdout]     = help: consider moving `get_open_vote` to another trait
[INFO] [stdout]     = help: consider moving `get_open_votes_with_close_on_passing` to another trait
[INFO] [stdout]     = help: consider moving `get_pending_status_checks` to another trait
[INFO] [stdout]     = help: consider moving `has_vote` to another trait
[INFO] [stdout]     = help: consider moving `has_vote_open` to another trait
[INFO] [stdout]     = help: consider moving `store_vote` to another trait
[INFO] [stdout]     = help: consider moving `update_vote_ends_at` to another trait
[INFO] [stdout]     = help: consider moving `update_vote_last_check` to another trait
[INFO] [stdout]     = help: only type `db::PgDB` implements `DB`; consider using it directly instead.
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0038]: the trait `github::GH` is not dyn compatible
[INFO] [stdout]    --> src/handlers.rs:166:42
[INFO] [stdout]     |
[INFO] [stdout] 166 | async fn set_check_status(db: DynDB, gh: DynGH, event: &PullRequestEvent) -> Result<()> {
[INFO] [stdout]     |                                          ^^^^^ `github::GH` is not dyn compatible
[INFO] [stdout]     |
[INFO] [stdout] note: for a trait to be dyn compatible it needs to allow building a vtable
[INFO] [stdout]       for more information, visit <https://doc.rust-lang.org/reference/items/traits.html#dyn-compatibility>
[INFO] [stdout]    --> src/github.rs:62:14
[INFO] [stdout]     |
[INFO] [stdout]  60 | pub(crate) trait GH {
[INFO] [stdout]     |                  -- this trait is not dyn compatible...
[INFO] [stdout]  61 |     /// Add labels to the provided issue.
[INFO] [stdout]  62 |     async fn add_labels(
[INFO] [stdout]     |              ^^^^^^^^^^ ...because method `add_labels` is `async`
[INFO] [stdout] ...
[INFO] [stdout]  72 |     async fn create_check_run(
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^^ ...because method `create_check_run` is `async`
[INFO] [stdout] ...
[INFO] [stdout]  82 |     async fn create_discussion(
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^^^ ...because method `create_discussion` is `async`
[INFO] [stdout] ...
[INFO] [stdout]  93 |     async fn get_allowed_voters(
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^^^^ ...because method `get_allowed_voters` is `async`
[INFO] [stdout] ...
[INFO] [stdout] 104 |     async fn get_collaborators(&self, inst_id: u64, owner: &str, repo: &str) -> Result<Vec<UserName>>;
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^^^ ...because method `get_collaborators` is `async`
[INFO] [stdout] ...
[INFO] [stdout] 107 |     async fn get_comment_reactions(
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^^^^^^^ ...because method `get_comment_reactions` is `async`
[INFO] [stdout] ...
[INFO] [stdout] 116 |     async fn get_config_file(&self, inst_id: u64, owner: &str, repo: &str) -> Option<String>;
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^ ...because method `get_config_file` is `async`
[INFO] [stdout] ...
[INFO] [stdout] 119 |     async fn get_pr_files(&self, inst_id: u64, owner: &str, repo: &str, pr_number: i64) -> Result<Vec<File>>;
[INFO] [stdout]     |              ^^^^^^^^^^^^ ...because method `get_pr_files` is `async`
[INFO] [stdout] ...
[INFO] [stdout] 123 |     async fn get_team_members(
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^^ ...because method `get_team_members` is `async`
[INFO] [stdout] ...
[INFO] [stdout] 133 |     async fn is_check_required(&self, inst_id: u64, owner: &str, repo: &str, branch: &str) -> Result<bool>;
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^^^ ...because method `is_check_required` is `async`
[INFO] [stdout] ...
[INFO] [stdout] 136 |     async fn post_comment(
[INFO] [stdout]     |              ^^^^^^^^^^^^ ...because method `post_comment` is `async`
[INFO] [stdout] ...
[INFO] [stdout] 146 |     async fn remove_label(
[INFO] [stdout]     |              ^^^^^^^^^^^^ ...because method `remove_label` is `async`
[INFO] [stdout] ...
[INFO] [stdout] 156 |     async fn user_is_collaborator(&self, inst_id: u64, owner: &str, repo: &str, user: &str) -> Result<bool>;
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^^^^^^ ...because method `user_is_collaborator` is `async`
[INFO] [stdout]     = help: consider moving `get_config_file` to another trait
[INFO] [stdout]     = help: consider moving `get_pr_files` to another trait
[INFO] [stdout]     = help: consider moving `add_labels` to another trait
[INFO] [stdout]     = help: consider moving `create_check_run` to another trait
[INFO] [stdout]     = help: consider moving `create_discussion` to another trait
[INFO] [stdout]     = help: consider moving `get_allowed_voters` to another trait
[INFO] [stdout]     = help: consider moving `get_collaborators` to another trait
[INFO] [stdout]     = help: consider moving `get_comment_reactions` to another trait
[INFO] [stdout]     = help: consider moving `get_team_members` to another trait
[INFO] [stdout]     = help: consider moving `is_check_required` to another trait
[INFO] [stdout]     = help: consider moving `post_comment` to another trait
[INFO] [stdout]     = help: consider moving `remove_label` to another trait
[INFO] [stdout]     = help: consider moving `user_is_collaborator` to another trait
[INFO] [stdout]     = help: only type `github::GHApi` implements `github::GH`; consider using it directly instead.
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0038]: the trait `DB` is not dyn compatible
[INFO] [stdout]   --> src/processor.rs:52:9
[INFO] [stdout]    |
[INFO] [stdout] 52 |     db: DynDB,
[INFO] [stdout]    |         ^^^^^ `DB` is not dyn compatible
[INFO] [stdout]    |
[INFO] [stdout] note: for a trait to be dyn compatible it needs to allow building a vtable
[INFO] [stdout]       for more information, visit <https://doc.rust-lang.org/reference/items/traits.html#dyn-compatibility>
[INFO] [stdout]   --> src/db.rs:24:14
[INFO] [stdout]    |
[INFO] [stdout] 22 | pub(crate) trait DB {
[INFO] [stdout]    |                  -- this trait is not dyn compatible...
[INFO] [stdout] 23 |     /// Cancel open vote (if exists) in the issue/pr provided.
[INFO] [stdout] 24 |     async fn cancel_vote(&self, repository_full_name: &str, issue_number: i64) -> Result<Option<Uuid>>;
[INFO] [stdout]    |              ^^^^^^^^^^^ ...because method `cancel_vote` is `async`
[INFO] [stdout] ...
[INFO] [stdout] 27 |     async fn close_finished_vote(&self, gh: DynGH) -> Result<Option<(Vote, Option<VoteResults>)>>;
[INFO] [stdout]    |              ^^^^^^^^^^^^^^^^^^^ ...because method `close_finished_vote` is `async`
[INFO] [stdout] ...
[INFO] [stdout] 30 |     async fn get_open_vote(&self, repository_full_name: &str, issue_number: i64) -> Result<Option<Vote>>;
[INFO] [stdout]    |              ^^^^^^^^^^^^^ ...because method `get_open_vote` is `async`
[INFO] [stdout] ...
[INFO] [stdout] 33 |     async fn get_open_votes_with_close_on_passing(&self) -> Result<Vec<Vote>>;
[INFO] [stdout]    |              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ...because method `get_open_votes_with_close_on_passing` is `async`
[INFO] [stdout] ...
[INFO] [stdout] 36 |     async fn get_pending_status_checks(&self) -> Result<Vec<CheckVoteInput>>;
[INFO] [stdout]    |              ^^^^^^^^^^^^^^^^^^^^^^^^^ ...because method `get_pending_status_checks` is `async`
[INFO] [stdout] ...
[INFO] [stdout] 39 |     async fn has_vote(&self, repository_full_name: &str, issue_number: i64) -> Result<bool>;
[INFO] [stdout]    |              ^^^^^^^^ ...because method `has_vote` is `async`
[INFO] [stdout] ...
[INFO] [stdout] 42 |     async fn has_vote_open(&self, repository_full_name: &str, issue_number: i64) -> Result<bool>;
[INFO] [stdout]    |              ^^^^^^^^^^^^^ ...because method `has_vote_open` is `async`
[INFO] [stdout] ...
[INFO] [stdout] 45 |     async fn store_vote(
[INFO] [stdout]    |              ^^^^^^^^^^ ...because method `store_vote` is `async`
[INFO] [stdout] ...
[INFO] [stdout] 53 |     async fn update_vote_ends_at(&self, vote_id: Uuid) -> Result<()>;
[INFO] [stdout]    |              ^^^^^^^^^^^^^^^^^^^ ...because method `update_vote_ends_at` is `async`
[INFO] [stdout] ...
[INFO] [stdout] 56 |     async fn update_vote_last_check(&self, vote_id: Uuid) -> Result<()>;
[INFO] [stdout]    |              ^^^^^^^^^^^^^^^^^^^^^^ ...because method `update_vote_last_check` is `async`
[INFO] [stdout]    = help: consider moving `cancel_vote` to another trait
[INFO] [stdout]    = help: consider moving `close_finished_vote` to another trait
[INFO] [stdout]    = help: consider moving `get_open_vote` to another trait
[INFO] [stdout]    = help: consider moving `get_open_votes_with_close_on_passing` to another trait
[INFO] [stdout]    = help: consider moving `get_pending_status_checks` to another trait
[INFO] [stdout]    = help: consider moving `has_vote` to another trait
[INFO] [stdout]    = help: consider moving `has_vote_open` to another trait
[INFO] [stdout]    = help: consider moving `store_vote` to another trait
[INFO] [stdout]    = help: consider moving `update_vote_ends_at` to another trait
[INFO] [stdout]    = help: consider moving `update_vote_last_check` to another trait
[INFO] [stdout]    = help: only type `db::PgDB` implements `DB`; consider using it directly instead.
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0038]: the trait `github::GH` is not dyn compatible
[INFO] [stdout]    --> src/processor.rs:53:9
[INFO] [stdout]     |
[INFO] [stdout]  53 |     gh: DynGH,
[INFO] [stdout]     |         ^^^^^ `github::GH` is not dyn compatible
[INFO] [stdout]     |
[INFO] [stdout] note: for a trait to be dyn compatible it needs to allow building a vtable
[INFO] [stdout]       for more information, visit <https://doc.rust-lang.org/reference/items/traits.html#dyn-compatibility>
[INFO] [stdout]    --> src/github.rs:62:14
[INFO] [stdout]     |
[INFO] [stdout]  60 | pub(crate) trait GH {
[INFO] [stdout]     |                  -- this trait is not dyn compatible...
[INFO] [stdout]  61 |     /// Add labels to the provided issue.
[INFO] [stdout]  62 |     async fn add_labels(
[INFO] [stdout]     |              ^^^^^^^^^^ ...because method `add_labels` is `async`
[INFO] [stdout] ...
[INFO] [stdout]  72 |     async fn create_check_run(
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^^ ...because method `create_check_run` is `async`
[INFO] [stdout] ...
[INFO] [stdout]  82 |     async fn create_discussion(
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^^^ ...because method `create_discussion` is `async`
[INFO] [stdout] ...
[INFO] [stdout]  93 |     async fn get_allowed_voters(
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^^^^ ...because method `get_allowed_voters` is `async`
[INFO] [stdout] ...
[INFO] [stdout] 104 |     async fn get_collaborators(&self, inst_id: u64, owner: &str, repo: &str) -> Result<Vec<UserName>>;
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^^^ ...because method `get_collaborators` is `async`
[INFO] [stdout] ...
[INFO] [stdout] 107 |     async fn get_comment_reactions(
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^^^^^^^ ...because method `get_comment_reactions` is `async`
[INFO] [stdout] ...
[INFO] [stdout] 116 |     async fn get_config_file(&self, inst_id: u64, owner: &str, repo: &str) -> Option<String>;
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^ ...because method `get_config_file` is `async`
[INFO] [stdout] ...
[INFO] [stdout] 119 |     async fn get_pr_files(&self, inst_id: u64, owner: &str, repo: &str, pr_number: i64) -> Result<Vec<File>>;
[INFO] [stdout]     |              ^^^^^^^^^^^^ ...because method `get_pr_files` is `async`
[INFO] [stdout] ...
[INFO] [stdout] 123 |     async fn get_team_members(
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^^ ...because method `get_team_members` is `async`
[INFO] [stdout] ...
[INFO] [stdout] 133 |     async fn is_check_required(&self, inst_id: u64, owner: &str, repo: &str, branch: &str) -> Result<bool>;
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^^^ ...because method `is_check_required` is `async`
[INFO] [stdout] ...
[INFO] [stdout] 136 |     async fn post_comment(
[INFO] [stdout]     |              ^^^^^^^^^^^^ ...because method `post_comment` is `async`
[INFO] [stdout] ...
[INFO] [stdout] 146 |     async fn remove_label(
[INFO] [stdout]     |              ^^^^^^^^^^^^ ...because method `remove_label` is `async`
[INFO] [stdout] ...
[INFO] [stdout] 156 |     async fn user_is_collaborator(&self, inst_id: u64, owner: &str, repo: &str, user: &str) -> Result<bool>;
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^^^^^^ ...because method `user_is_collaborator` is `async`
[INFO] [stdout]     = help: consider moving `get_config_file` to another trait
[INFO] [stdout]     = help: consider moving `get_pr_files` to another trait
[INFO] [stdout]     = help: consider moving `add_labels` to another trait
[INFO] [stdout]     = help: consider moving `create_check_run` to another trait
[INFO] [stdout]     = help: consider moving `create_discussion` to another trait
[INFO] [stdout]     = help: consider moving `get_allowed_voters` to another trait
[INFO] [stdout]     = help: consider moving `get_collaborators` to another trait
[INFO] [stdout]     = help: consider moving `get_comment_reactions` to another trait
[INFO] [stdout]     = help: consider moving `get_team_members` to another trait
[INFO] [stdout]     = help: consider moving `is_check_required` to another trait
[INFO] [stdout]     = help: consider moving `post_comment` to another trait
[INFO] [stdout]     = help: consider moving `remove_label` to another trait
[INFO] [stdout]     = help: consider moving `user_is_collaborator` to another trait
[INFO] [stdout]     = help: only type `github::GHApi` implements `github::GH`; consider using it directly instead.
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0038]: the trait `github::GH` is not dyn compatible
[INFO] [stdout]    --> src/results.rs:125:9
[INFO] [stdout]     |
[INFO] [stdout] 125 |     gh: DynGH,
[INFO] [stdout]     |         ^^^^^ `github::GH` is not dyn compatible
[INFO] [stdout]     |
[INFO] [stdout] note: for a trait to be dyn compatible it needs to allow building a vtable
[INFO] [stdout]       for more information, visit <https://doc.rust-lang.org/reference/items/traits.html#dyn-compatibility>
[INFO] [stdout]    --> src/github.rs:62:14
[INFO] [stdout]     |
[INFO] [stdout]  60 | pub(crate) trait GH {
[INFO] [stdout]     |                  -- this trait is not dyn compatible...
[INFO] [stdout]  61 |     /// Add labels to the provided issue.
[INFO] [stdout]  62 |     async fn add_labels(
[INFO] [stdout]     |              ^^^^^^^^^^ ...because method `add_labels` is `async`
[INFO] [stdout] ...
[INFO] [stdout]  72 |     async fn create_check_run(
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^^ ...because method `create_check_run` is `async`
[INFO] [stdout] ...
[INFO] [stdout]  82 |     async fn create_discussion(
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^^^ ...because method `create_discussion` is `async`
[INFO] [stdout] ...
[INFO] [stdout]  93 |     async fn get_allowed_voters(
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^^^^ ...because method `get_allowed_voters` is `async`
[INFO] [stdout] ...
[INFO] [stdout] 104 |     async fn get_collaborators(&self, inst_id: u64, owner: &str, repo: &str) -> Result<Vec<UserName>>;
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^^^ ...because method `get_collaborators` is `async`
[INFO] [stdout] ...
[INFO] [stdout] 107 |     async fn get_comment_reactions(
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^^^^^^^ ...because method `get_comment_reactions` is `async`
[INFO] [stdout] ...
[INFO] [stdout] 116 |     async fn get_config_file(&self, inst_id: u64, owner: &str, repo: &str) -> Option<String>;
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^ ...because method `get_config_file` is `async`
[INFO] [stdout] ...
[INFO] [stdout] 119 |     async fn get_pr_files(&self, inst_id: u64, owner: &str, repo: &str, pr_number: i64) -> Result<Vec<File>>;
[INFO] [stdout]     |              ^^^^^^^^^^^^ ...because method `get_pr_files` is `async`
[INFO] [stdout] ...
[INFO] [stdout] 123 |     async fn get_team_members(
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^^ ...because method `get_team_members` is `async`
[INFO] [stdout] ...
[INFO] [stdout] 133 |     async fn is_check_required(&self, inst_id: u64, owner: &str, repo: &str, branch: &str) -> Result<bool>;
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^^^ ...because method `is_check_required` is `async`
[INFO] [stdout] ...
[INFO] [stdout] 136 |     async fn post_comment(
[INFO] [stdout]     |              ^^^^^^^^^^^^ ...because method `post_comment` is `async`
[INFO] [stdout] ...
[INFO] [stdout] 146 |     async fn remove_label(
[INFO] [stdout]     |              ^^^^^^^^^^^^ ...because method `remove_label` is `async`
[INFO] [stdout] ...
[INFO] [stdout] 156 |     async fn user_is_collaborator(&self, inst_id: u64, owner: &str, repo: &str, user: &str) -> Result<bool>;
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^^^^^^ ...because method `user_is_collaborator` is `async`
[INFO] [stdout]     = help: consider moving `get_config_file` to another trait
[INFO] [stdout]     = help: consider moving `get_pr_files` to another trait
[INFO] [stdout]     = help: consider moving `add_labels` to another trait
[INFO] [stdout]     = help: consider moving `create_check_run` to another trait
[INFO] [stdout]     = help: consider moving `create_discussion` to another trait
[INFO] [stdout]     = help: consider moving `get_allowed_voters` to another trait
[INFO] [stdout]     = help: consider moving `get_collaborators` to another trait
[INFO] [stdout]     = help: consider moving `get_comment_reactions` to another trait
[INFO] [stdout]     = help: consider moving `get_team_members` to another trait
[INFO] [stdout]     = help: consider moving `is_check_required` to another trait
[INFO] [stdout]     = help: consider moving `post_comment` to another trait
[INFO] [stdout]     = help: consider moving `remove_label` to another trait
[INFO] [stdout]     = help: consider moving `user_is_collaborator` to another trait
[INFO] [stdout]     = help: only type `github::GHApi` implements `github::GH`; consider using it directly instead.
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0433]: failed to resolve: use of unresolved module or unlinked crate `axum`
[INFO] [stdout]   --> src/main.rs:93:5
[INFO] [stdout]    |
[INFO] [stdout] 93 |     axum::serve(listener, router).with_graceful_shutdown(shutdown_signal()).await.unwrap();
[INFO] [stdout]    |     ^^^^ use of unresolved module or unlinked crate `axum`
[INFO] [stdout]    |
[INFO] [stdout]    = help: if you wanted to use a crate named `axum`, use `cargo add axum` to add it to your `Cargo.toml`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0433]: failed to resolve: use of unresolved module or unlinked crate `graphql_client`
[INFO] [stdout]    --> src/github.rs:236:23
[INFO] [stdout]     |
[INFO] [stdout] 236 |         let response: graphql_client::Response<announcement_repo_query::ResponseData> = client
[INFO] [stdout]     |                       ^^^^^^^^^^^^^^ use of unresolved module or unlinked crate `graphql_client`
[INFO] [stdout]     |
[INFO] [stdout]     = help: if you wanted to use a crate named `graphql_client`, use `cargo add graphql_client` to add it to your `Cargo.toml`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0433]: failed to resolve: use of unresolved module or unlinked crate `announcement_repo_query`
[INFO] [stdout]    --> src/github.rs:236:48
[INFO] [stdout]     |
[INFO] [stdout] 236 |         let response: graphql_client::Response<announcement_repo_query::ResponseData> = client
[INFO] [stdout]     |                                                ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |                                                |
[INFO] [stdout]     |                                                use of unresolved module or unlinked crate `announcement_repo_query`
[INFO] [stdout]     |                                                help: a struct with a similar name exists: `AnnouncementRepoQuery`
[INFO] [stdout]     |
[INFO] [stdout]     = help: if you wanted to use a crate named `announcement_repo_query`, use `cargo add announcement_repo_query` to add it to your `Cargo.toml`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0433]: failed to resolve: use of unresolved module or unlinked crate `announcement_repo_query`
[INFO] [stdout]    --> src/github.rs:238:17
[INFO] [stdout]     |
[INFO] [stdout] 238 |                 announcement_repo_query::Variables {
[INFO] [stdout]     |                 ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |                 |
[INFO] [stdout]     |                 use of unresolved module or unlinked crate `announcement_repo_query`
[INFO] [stdout]     |                 help: a struct with a similar name exists: `AnnouncementRepoQuery`
[INFO] [stdout]     |
[INFO] [stdout]     = help: if you wanted to use a crate named `announcement_repo_query`, use `cargo add announcement_repo_query` to add it to your `Cargo.toml`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0433]: failed to resolve: use of unresolved module or unlinked crate `graphql_client`
[INFO] [stdout]    --> src/github.rs:253:16
[INFO] [stdout]     |
[INFO] [stdout] 253 |         let _: graphql_client::Response<create_discussion::ResponseData> = client
[INFO] [stdout]     |                ^^^^^^^^^^^^^^ use of unresolved module or unlinked crate `graphql_client`
[INFO] [stdout]     |
[INFO] [stdout]     = help: if you wanted to use a crate named `graphql_client`, use `cargo add graphql_client` to add it to your `Cargo.toml`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0433]: failed to resolve: use of unresolved module or unlinked crate `create_discussion`
[INFO] [stdout]    --> src/github.rs:253:41
[INFO] [stdout]     |
[INFO] [stdout] 253 |         let _: graphql_client::Response<create_discussion::ResponseData> = client
[INFO] [stdout]     |                                         ^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |                                         |
[INFO] [stdout]     |                                         use of unresolved module or unlinked crate `create_discussion`
[INFO] [stdout]     |                                         help: a struct with a similar name exists: `CreateDiscussion`
[INFO] [stdout]     |
[INFO] [stdout]     = help: if you wanted to use a crate named `create_discussion`, use `cargo add create_discussion` to add it to your `Cargo.toml`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0433]: failed to resolve: use of unresolved module or unlinked crate `create_discussion`
[INFO] [stdout]    --> src/github.rs:254:53
[INFO] [stdout]     |
[INFO] [stdout] 254 |             .graphql(&CreateDiscussion::build_query(create_discussion::Variables {
[INFO] [stdout]     |                                                     ^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |                                                     |
[INFO] [stdout]     |                                                     use of unresolved module or unlinked crate `create_discussion`
[INFO] [stdout]     |                                                     help: a struct with a similar name exists: `CreateDiscussion`
[INFO] [stdout]     |
[INFO] [stdout]     = help: if you wanted to use a crate named `create_discussion`, use `cargo add create_discussion` to add it to your `Cargo.toml`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0433]: failed to resolve: use of unresolved module or unlinked crate `serde_json`
[INFO] [stdout]    --> src/github.rs:470:45
[INFO] [stdout]     |
[INFO] [stdout] 470 |                     let event: IssueEvent = serde_json::from_slice(event_body)
[INFO] [stdout]     |                                             ^^^^^^^^^^ use of unresolved module or unlinked crate `serde_json`
[INFO] [stdout]     |
[INFO] [stdout]     = help: if you wanted to use a crate named `serde_json`, use `cargo add serde_json` to add it to your `Cargo.toml`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0433]: failed to resolve: use of unresolved module or unlinked crate `serde_json`
[INFO] [stdout]    --> src/github.rs:475:52
[INFO] [stdout]     |
[INFO] [stdout] 475 |                     let event: IssueCommentEvent = serde_json::from_slice(event_body)
[INFO] [stdout]     |                                                    ^^^^^^^^^^ use of unresolved module or unlinked crate `serde_json`
[INFO] [stdout]     |
[INFO] [stdout]     = help: if you wanted to use a crate named `serde_json`, use `cargo add serde_json` to add it to your `Cargo.toml`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0433]: failed to resolve: use of unresolved module or unlinked crate `serde_json`
[INFO] [stdout]    --> src/github.rs:480:51
[INFO] [stdout]     |
[INFO] [stdout] 480 |                     let event: PullRequestEvent = serde_json::from_slice(event_body)
[INFO] [stdout]     |                                                   ^^^^^^^^^^ use of unresolved module or unlinked crate `serde_json`
[INFO] [stdout]     |
[INFO] [stdout]     = help: if you wanted to use a crate named `serde_json`, use `cargo add serde_json` to add it to your `Cargo.toml`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0433]: failed to resolve: use of unresolved module or unlinked crate `octocrab`
[INFO] [stdout]    --> src/github.rs:650:88
[INFO] [stdout]     |
[INFO] [stdout] 650 |     if let Some(octocrab::Error::GitHub { source, backtrace: _ }) = err.downcast_ref::<octocrab::Error>() {
[INFO] [stdout]     |                                                                                        ^^^^^^^^ use of unresolved module or unlinked crate `octocrab`
[INFO] [stdout]     |
[INFO] [stdout]     = help: if you wanted to use a crate named `octocrab`, use `cargo add octocrab` to add it to your `Cargo.toml`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0433]: failed to resolve: use of unresolved module or unlinked crate `async_channel`
[INFO] [stdout]   --> src/handlers.rs:30:14
[INFO] [stdout]    |
[INFO] [stdout] 30 |     cmds_tx: async_channel::Sender<Command>,
[INFO] [stdout]    |              ^^^^^^^^^^^^^ use of unresolved module or unlinked crate `async_channel`
[INFO] [stdout]    |
[INFO] [stdout]    = help: if you wanted to use a crate named `async_channel`, use `cargo add async_channel` to add it to your `Cargo.toml`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0433]: failed to resolve: use of unresolved module or unlinked crate `async_channel`
[INFO] [stdout]   --> src/handlers.rs:40:14
[INFO] [stdout]    |
[INFO] [stdout] 40 |     cmds_tx: async_channel::Sender<Command>,
[INFO] [stdout]    |              ^^^^^^^^^^^^^ use of unresolved module or unlinked crate `async_channel`
[INFO] [stdout]    |
[INFO] [stdout]    = help: if you wanted to use a crate named `async_channel`, use `cargo add async_channel` to add it to your `Cargo.toml`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0433]: failed to resolve: use of unresolved module or unlinked crate `async_channel`
[INFO] [stdout]   --> src/handlers.rs:78:27
[INFO] [stdout]    |
[INFO] [stdout] 78 |     State(cmds_tx): State<async_channel::Sender<Command>>,
[INFO] [stdout]    |                           ^^^^^^^^^^^^^ use of unresolved module or unlinked crate `async_channel`
[INFO] [stdout]    |
[INFO] [stdout]    = help: if you wanted to use a crate named `async_channel`, use `cargo add async_channel` to add it to your `Cargo.toml`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0433]: failed to resolve: use of unresolved module or unlinked crate `hex`
[INFO] [stdout]    --> src/handlers.rs:140:23
[INFO] [stdout]     |
[INFO] [stdout] 140 |         .and_then(|s| hex::decode(s).ok())
[INFO] [stdout]     |                       ^^^ use of unresolved module or unlinked crate `hex`
[INFO] [stdout]     |
[INFO] [stdout]     = help: if you wanted to use a crate named `hex`, use `cargo add hex` to add it to your `Cargo.toml`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0433]: failed to resolve: use of unresolved module or unlinked crate `async_channel`
[INFO] [stdout]   --> src/processor.rs:65:18
[INFO] [stdout]    |
[INFO] [stdout] 65 |         cmds_tx: async_channel::Sender<Command>,
[INFO] [stdout]    |                  ^^^^^^^^^^^^^ use of unresolved module or unlinked crate `async_channel`
[INFO] [stdout]    |
[INFO] [stdout]    = help: if you wanted to use a crate named `async_channel`, use `cargo add async_channel` to add it to your `Cargo.toml`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0433]: failed to resolve: use of unresolved module or unlinked crate `async_channel`
[INFO] [stdout]   --> src/processor.rs:66:19
[INFO] [stdout]    |
[INFO] [stdout] 66 |         cmds_rx: &async_channel::Receiver<Command>,
[INFO] [stdout]    |                   ^^^^^^^^^^^^^ use of unresolved module or unlinked crate `async_channel`
[INFO] [stdout]    |
[INFO] [stdout]    = help: if you wanted to use a crate named `async_channel`, use `cargo add async_channel` to add it to your `Cargo.toml`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0433]: failed to resolve: use of unresolved module or unlinked crate `async_channel`
[INFO] [stdout]    --> src/processor.rs:100:18
[INFO] [stdout]     |
[INFO] [stdout] 100 |         cmds_rx: async_channel::Receiver<Command>,
[INFO] [stdout]     |                  ^^^^^^^^^^^^^ use of unresolved module or unlinked crate `async_channel`
[INFO] [stdout]     |
[INFO] [stdout]     = help: if you wanted to use a crate named `async_channel`, use `cargo add async_channel` to add it to your `Cargo.toml`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr]     Checking predicates v3.1.3
[INFO] [stdout] error[E0433]: failed to resolve: use of unresolved module or unlinked crate `tokio`
[INFO] [stdout]    --> src/processor.rs:103:9
[INFO] [stdout]     |
[INFO] [stdout] 103 |         tokio::spawn(async move {
[INFO] [stdout]     |         ^^^^^ use of unresolved module or unlinked crate `tokio`
[INFO] [stdout]     |
[INFO] [stdout]     = help: if you wanted to use a crate named `tokio`, use `cargo add tokio` to add it to your `Cargo.toml`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0433]: failed to resolve: use of unresolved module or unlinked crate `tokio`
[INFO] [stdout]    --> src/processor.rs:135:9
[INFO] [stdout]     |
[INFO] [stdout] 135 |         tokio::spawn(async move {
[INFO] [stdout]     |         ^^^^^ use of unresolved module or unlinked crate `tokio`
[INFO] [stdout]     |
[INFO] [stdout]     = help: if you wanted to use a crate named `tokio`, use `cargo add tokio` to add it to your `Cargo.toml`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0433]: failed to resolve: use of unresolved module or unlinked crate `async_channel`
[INFO] [stdout]    --> src/processor.rs:170:18
[INFO] [stdout]     |
[INFO] [stdout] 170 |         cmds_tx: async_channel::Sender<Command>,
[INFO] [stdout]     |                  ^^^^^^^^^^^^^ use of unresolved module or unlinked crate `async_channel`
[INFO] [stdout]     |
[INFO] [stdout]     = help: if you wanted to use a crate named `async_channel`, use `cargo add async_channel` to add it to your `Cargo.toml`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0433]: failed to resolve: use of unresolved module or unlinked crate `tokio`
[INFO] [stdout]    --> src/processor.rs:173:9
[INFO] [stdout]     |
[INFO] [stdout] 173 |         tokio::spawn(async move {
[INFO] [stdout]     |         ^^^^^ use of unresolved module or unlinked crate `tokio`
[INFO] [stdout]     |
[INFO] [stdout]     = help: if you wanted to use a crate named `tokio`, use `cargo add tokio` to add it to your `Cargo.toml`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0433]: failed to resolve: use of unresolved module or unlinked crate `tokio`
[INFO] [stdout]    --> src/processor.rs:201:9
[INFO] [stdout]     |
[INFO] [stdout] 201 |         tokio::spawn(async move {
[INFO] [stdout]     |         ^^^^^ use of unresolved module or unlinked crate `tokio`
[INFO] [stdout]     |
[INFO] [stdout]     = help: if you wanted to use a crate named `tokio`, use `cargo add tokio` to add it to your `Cargo.toml`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0433]: failed to resolve: use of unresolved module or unlinked crate `humantime`
[INFO] [stdout]    --> src/tmpl.rs:151:23
[INFO] [stdout]     |
[INFO] [stdout] 151 |             duration: humantime::format_duration(cfg.duration).to_string(),
[INFO] [stdout]     |                       ^^^^^^^^^ use of unresolved module or unlinked crate `humantime`
[INFO] [stdout]     |
[INFO] [stdout]     = help: if you wanted to use a crate named `humantime`, use `cargo add humantime` to add it to your `Cargo.toml`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0433]: failed to resolve: use of unresolved module or unlinked crate `askama`
[INFO] [stdout]    --> src/tmpl.rs:217:10
[INFO] [stdout]     |
[INFO] [stdout] 217 |     ) -> askama::Result<Vec<(UserName, UserVote)>> {
[INFO] [stdout]     |          ^^^^^^ use of unresolved module or unlinked crate `askama`
[INFO] [stdout]     |
[INFO] [stdout]     = help: if you wanted to use a crate named `askama`, use `cargo add askama` to add it to your `Cargo.toml`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0433]: failed to resolve: use of unresolved module or unlinked crate `tracing_subscriber`
[INFO] [stdout]   --> src/main.rs:60:13
[INFO] [stdout]    |
[INFO] [stdout] 60 |     let s = tracing_subscriber::fmt().with_env_filter(EnvFilter::from_default_env());
[INFO] [stdout]    |             ^^^^^^^^^^^^^^^^^^ use of unresolved module or unlinked crate `tracing_subscriber`
[INFO] [stdout]    |
[INFO] [stdout]    = help: if you wanted to use a crate named `tracing_subscriber`, use `cargo add tracing_subscriber` to add it to your `Cargo.toml`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0433]: failed to resolve: use of unresolved module or unlinked crate `async_channel`
[INFO] [stdout]   --> src/main.rs:82:30
[INFO] [stdout]    |
[INFO] [stdout] 82 |     let (cmds_tx, cmds_rx) = async_channel::unbounded();
[INFO] [stdout]    |                              ^^^^^^^^^^^^^ use of unresolved module or unlinked crate `async_channel`
[INFO] [stdout]    |
[INFO] [stdout]    = help: if you wanted to use a crate named `async_channel`, use `cargo add async_channel` to add it to your `Cargo.toml`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] Some errors have detailed explanations: E0038, E0282, E0308, E0425, E0432, E0433, E0599.
[INFO] [stdout] 
[INFO] [stdout] For more information about an error, try `rustc --explain E0038`.
[INFO] [stdout] 
[INFO] [stderr] error: could not compile `gitvote` (bin "gitvote") due to 191 previous errors
[INFO] [stderr] warning: build failed, waiting for other jobs to finish...
[INFO] running `Command { std: "docker" "inspect" "e31f6ba2d2879e50a068089a1d299864400c924b8b94d4b22651ef126e4b7112", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "e31f6ba2d2879e50a068089a1d299864400c924b8b94d4b22651ef126e4b7112", kill_on_drop: false }`
[INFO] [stdout] e31f6ba2d2879e50a068089a1d299864400c924b8b94d4b22651ef126e4b7112
