[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] documenting BigBuildBench/cncf_gitvote against 1.91.0 for beta-1.92-rustdoc-1
[INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2FBigBuildBench%2Fcncf_gitvote" "/workspace/builds/worker-0-tc1/source", kill_on_drop: false }`
[INFO] [stderr] Cloning into '/workspace/builds/worker-0-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-0-tc1/source/Cargo.toml
[INFO] validating manifest of git repo https://github.com/BigBuildBench/cncf_gitvote on toolchain 1.91.0
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+1.91.0" "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" "+1.91.0" "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" "+1.91.0" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-0-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-0-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:4848fb76d95f26979359cc7e45710b1dbc8f3acb7aeedee7c460d7702230f228" "/opt/rustwide/cargo-home/bin/cargo" "+1.91.0" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }`
[INFO] [stdout] 0fe1ac7f4a019d644248d665e234aeaf1cb10fe9c67d6397de618d31cee78715
[INFO] running `Command { std: "docker" "start" "-a" "0fe1ac7f4a019d644248d665e234aeaf1cb10fe9c67d6397de618d31cee78715", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "0fe1ac7f4a019d644248d665e234aeaf1cb10fe9c67d6397de618d31cee78715", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "0fe1ac7f4a019d644248d665e234aeaf1cb10fe9c67d6397de618d31cee78715", kill_on_drop: false }`
[INFO] [stdout] 0fe1ac7f4a019d644248d665e234aeaf1cb10fe9c67d6397de618d31cee78715
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-0-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-0-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=warn" "-e" "RUSTDOCFLAGS=--cap-lints=warn" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:4848fb76d95f26979359cc7e45710b1dbc8f3acb7aeedee7c460d7702230f228" "/opt/rustwide/cargo-home/bin/cargo" "+1.91.0" "doc" "--frozen" "--no-deps" "--document-private-items" "--message-format=json", kill_on_drop: false }`
[INFO] [stdout] 1e4ae5b64aac51c9bfde2610bc37a3f5a11e390b21948e31484f79191a63cfe2
[INFO] running `Command { std: "docker" "start" "-a" "1e4ae5b64aac51c9bfde2610bc37a3f5a11e390b21948e31484f79191a63cfe2", kill_on_drop: false }`
[INFO] [stderr]  Documenting gitvote v1.3.0 (/opt/rustwide/workdir)
[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] [stdout] error[E0038]: the trait `github::GH` is not dyn compatible
[INFO] [stdout]    --> src/db.rs:133:5
[INFO] [stdout]     |
[INFO] [stdout] 133 |     async fn close_finished_vote(&self, gh: DynGH) -> Result<Option<(Vote, Option<VoteResults>)>> {
[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::DB` is not dyn compatible
[INFO] [stdout]   --> src/handlers.rs:28:9
[INFO] [stdout]    |
[INFO] [stdout] 28 |     db: DynDB,
[INFO] [stdout]    |         ^^^^^ `db::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::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::DB` is not dyn compatible
[INFO] [stdout]   --> src/handlers.rs:38:9
[INFO] [stdout]    |
[INFO] [stdout] 38 |     db: DynDB,
[INFO] [stdout]    |         ^^^^^ `db::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::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::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::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::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::DB` is not dyn compatible
[INFO] [stdout]   --> src/processor.rs:52:9
[INFO] [stdout]    |
[INFO] [stdout] 52 |     db: DynDB,
[INFO] [stdout]    |         ^^^^^ `db::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::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[E0038]: the trait `github::GH` is not dyn compatible
[INFO] [stdout]    --> src/cfg.rs:29:13
[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 `github::GH` is not dyn compatible
[INFO] [stdout]    --> src/cfg.rs:93:13
[INFO] [stdout]     |
[INFO] [stdout]  93 |         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/cmd.rs:44:40
[INFO] [stdout]     |
[INFO] [stdout]  44 |     pub(crate) async fn from_event(gh: DynGH, event: &Event) -> Option<Self> {
[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:95:39
[INFO] [stdout]     |
[INFO] [stdout]  95 |     async fn from_event_automatic(gh: DynGH, event: &Event) -> Result<Option<Self>> {
[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/db.rs:133:45
[INFO] [stdout]     |
[INFO] [stdout] 133 |     async fn close_finished_vote(&self, gh: DynGH) -> Result<Option<(Vote, Option<VoteResults>)>> {
[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::DB` is not dyn compatible
[INFO] [stdout]   --> src/processor.rs:58:27
[INFO] [stdout]    |
[INFO] [stdout] 58 |     pub(crate) fn new(db: DynDB, gh: DynGH) -> Arc<Self> {
[INFO] [stdout]    |                           ^^^^^ `db::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::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:58:38
[INFO] [stdout]     |
[INFO] [stdout]  58 |     pub(crate) fn new(db: DynDB, gh: DynGH) -> Arc<Self> {
[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/db.rs:27:45
[INFO] [stdout]     |
[INFO] [stdout]  27 |     async fn close_finished_vote(&self, gh: DynGH) -> Result<Option<(Vote, Option<VoteResults>)>>;
[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 `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 `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] [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 `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] Some errors have detailed explanations: E0038, E0432, E0433.
[INFO] [stdout] 
[INFO] [stdout] For more information about an error, try `rustc --explain E0038`.
[INFO] [stdout] 
[INFO] [stderr] error: could not document `gitvote`
[INFO] running `Command { std: "docker" "inspect" "1e4ae5b64aac51c9bfde2610bc37a3f5a11e390b21948e31484f79191a63cfe2", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "1e4ae5b64aac51c9bfde2610bc37a3f5a11e390b21948e31484f79191a63cfe2", kill_on_drop: false }`
[INFO] [stdout] 1e4ae5b64aac51c9bfde2610bc37a3f5a11e390b21948e31484f79191a63cfe2
