[INFO] cloning repository https://github.com/sadministrator/ziggurat
[INFO] running `Command { std: "git" "-c" "credential.helper=" "-c" "credential.helper=/workspace/cargo-home/bin/git-credential-null" "clone" "--bare" "https://github.com/sadministrator/ziggurat" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fsadministrator%2Fziggurat", kill_on_drop: false }`
[INFO] [stderr] Cloning into bare repository '/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fsadministrator%2Fziggurat'...
[INFO] running `Command { std: "git" "rev-parse" "HEAD", kill_on_drop: false }`
[INFO] [stdout] ae512a0188a61ce8cab48cf7fdd581c461367e04
[INFO] checking sadministrator/ziggurat against master#779e19d8baa3e3625bd4fc5c85cbb2ad47b43155 for pr-147589-1
[INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fsadministrator%2Fziggurat" "/workspace/builds/worker-3-tc1/source", kill_on_drop: false }`
[INFO] [stderr] Cloning into '/workspace/builds/worker-3-tc1/source'...
[INFO] [stderr] done.
[INFO] started tweaking git repo https://github.com/sadministrator/ziggurat
[INFO] finished tweaking git repo https://github.com/sadministrator/ziggurat
[INFO] tweaked toml for git repo https://github.com/sadministrator/ziggurat written to /workspace/builds/worker-3-tc1/source/Cargo.toml
[INFO] validating manifest of git repo https://github.com/sadministrator/ziggurat on toolchain 779e19d8baa3e3625bd4fc5c85cbb2ad47b43155
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+779e19d8baa3e3625bd4fc5c85cbb2ad47b43155" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }`
[INFO] crate git repo https://github.com/sadministrator/ziggurat already has a lockfile, it will not be regenerated
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+779e19d8baa3e3625bd4fc5c85cbb2ad47b43155" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }`
[INFO] [stderr]     Updating crates.io index
[INFO] [stderr]  Downloading crates ...
[INFO] [stderr]   Downloaded upon v0.7.1
[INFO] [stderr]   Downloaded tl v0.7.8
[INFO] [stderr]   Downloaded epub-builder v0.7.4
[INFO] [stderr]   Downloaded epub v2.1.2
[INFO] [stderr]   Downloaded lopdf v0.34.0
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-3-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-3-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:e90291280db7d1fac5b66fc6dad9f9662629e7365a55743daf9bdf73ebc4ea79" "/opt/rustwide/cargo-home/bin/cargo" "+779e19d8baa3e3625bd4fc5c85cbb2ad47b43155" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }`
[INFO] [stdout] 8d07c31defe299aa3ad1a7d47614baaf33f6cdb36d9bd2024cb6b1bd1adaf7bd
[INFO] running `Command { std: "docker" "start" "-a" "8d07c31defe299aa3ad1a7d47614baaf33f6cdb36d9bd2024cb6b1bd1adaf7bd", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "8d07c31defe299aa3ad1a7d47614baaf33f6cdb36d9bd2024cb6b1bd1adaf7bd", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "8d07c31defe299aa3ad1a7d47614baaf33f6cdb36d9bd2024cb6b1bd1adaf7bd", kill_on_drop: false }`
[INFO] [stdout] 8d07c31defe299aa3ad1a7d47614baaf33f6cdb36d9bd2024cb6b1bd1adaf7bd
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-3-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-3-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "RUSTDOCFLAGS=--cap-lints=forbid" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:e90291280db7d1fac5b66fc6dad9f9662629e7365a55743daf9bdf73ebc4ea79" "/opt/rustwide/cargo-home/bin/cargo" "+779e19d8baa3e3625bd4fc5c85cbb2ad47b43155" "check" "--frozen" "--all" "--all-targets" "--message-format=json", kill_on_drop: false }`
[INFO] [stdout] a460a209265b153caa781bdb0d2dfb4b6ba139ec0204cac2698e32cc05a6a7de
[INFO] running `Command { std: "docker" "start" "-a" "a460a209265b153caa781bdb0d2dfb4b6ba139ec0204cac2698e32cc05a6a7de", kill_on_drop: false }`
[INFO] [stderr]    Compiling libc v0.2.159
[INFO] [stderr]     Checking bytes v1.7.2
[INFO] [stderr]    Compiling syn v2.0.79
[INFO] [stderr]    Compiling cc v1.1.28
[INFO] [stderr]     Checking hashbrown v0.15.0
[INFO] [stderr]     Checking tracing-core v0.1.32
[INFO] [stderr]     Checking miniz_oxide v0.8.0
[INFO] [stderr]     Checking http v1.1.0
[INFO] [stderr]    Compiling openssl v0.10.66
[INFO] [stderr]     Checking flate2 v1.0.34
[INFO] [stderr]    Compiling num-traits v0.2.19
[INFO] [stderr]    Compiling indexmap v2.6.0
[INFO] [stderr]    Compiling rustix v0.38.37
[INFO] [stderr]     Checking signal-hook-registry v1.4.2
[INFO] [stderr]     Checking mio v1.0.2
[INFO] [stderr]     Checking parking_lot_core v0.9.10
[INFO] [stderr]     Checking socket2 v0.5.7
[INFO] [stderr]     Checking parking_lot v0.12.3
[INFO] [stderr]    Compiling toml_edit v0.22.22
[INFO] [stderr]     Checking signal-hook v0.3.17
[INFO] [stderr]     Checking http-body v1.0.1
[INFO] [stderr]     Checking mio v0.8.11
[INFO] [stderr]    Compiling openssl-sys v0.9.103
[INFO] [stderr]     Checking unicode-normalization v0.1.24
[INFO] [stderr]    Compiling zip v1.1.4
[INFO] [stderr]     Checking unicode-bidi v0.3.17
[INFO] [stderr]     Checking chrono v0.4.38
[INFO] [stderr]     Checking signal-hook-mio v0.2.4
[INFO] [stderr]    Compiling native-tls v0.2.12
[INFO] [stderr]     Checking regex-automata v0.4.8
[INFO] [stderr]     Checking digest v0.10.7
[INFO] [stderr]     Checking idna v0.5.0
[INFO] [stderr]     Checking getrandom v0.2.15
[INFO] [stderr]     Checking either v1.13.0
[INFO] [stderr]     Checking rustls-pki-types v1.9.0
[INFO] [stderr]     Checking rayon v1.10.0
[INFO] [stderr]     Checking url v2.5.2
[INFO] [stderr]     Checking rustls-pemfile v2.2.0
[INFO] [stderr]     Checking zip v0.6.6
[INFO] [stderr]     Checking nom v7.1.3
[INFO] [stderr]     Checking uuid v1.10.0
[INFO] [stderr]     Checking eyre v0.6.12
[INFO] [stderr]     Checking crossterm v0.25.0
[INFO] [stderr]     Checking md-5 v0.10.6
[INFO] [stderr]     Checking tracing-log v0.2.0
[INFO] [stderr]    Compiling proc-macro-crate v3.2.0
[INFO] [stderr]     Checking tempfile v3.13.0
[INFO] [stderr]     Checking sync_wrapper v1.0.1
[INFO] [stderr]     Checking thread_local v1.1.8
[INFO] [stderr]     Checking ipnet v2.10.1
[INFO] [stderr]     Checking weezl v0.1.8
[INFO] [stderr]     Checking xml-rs v0.8.22
[INFO] [stderr]     Checking tui v0.19.0
[INFO] [stderr]     Checking regex v1.11.0
[INFO] [stderr]     Checking tracing-subscriber v0.3.18
[INFO] [stderr]     Checking crossterm v0.28.1
[INFO] [stderr]     Checking tl v0.7.8
[INFO] [stderr]     Checking lopdf v0.34.0
[INFO] [stderr]    Compiling futures-macro v0.3.31
[INFO] [stderr]    Compiling tokio-macros v2.4.0
[INFO] [stderr]    Compiling tracing-attributes v0.1.27
[INFO] [stderr]    Compiling serde_derive v1.0.210
[INFO] [stderr]    Compiling openssl-macros v0.1.1
[INFO] [stderr]    Compiling num_enum_derive v0.7.3
[INFO] [stderr]    Compiling thiserror-impl v1.0.64
[INFO] [stderr]     Checking tokio v1.40.0
[INFO] [stderr]     Checking futures-util v0.3.31
[INFO] [stderr]    Compiling displaydoc v0.2.5
[INFO] [stderr]     Checking num_enum v0.7.3
[INFO] [stderr]    Compiling clap_derive v4.5.18
[INFO] [stderr]     Checking thiserror v1.0.64
[INFO] [stderr]     Checking tracing v0.1.40
[INFO] [stderr]     Checking epub v2.1.2
[INFO] [stderr]     Checking clap v4.5.20
[INFO] [stderr]     Checking serde v1.0.210
[INFO] [stderr]     Checking http-body-util v0.1.2
[INFO] [stderr]     Checking futures-executor v0.3.31
[INFO] [stderr]     Checking futures v0.3.31
[INFO] [stderr]     Checking tokio-util v0.7.12
[INFO] [stderr]     Checking tokio-native-tls v0.3.1
[INFO] [stderr]     Checking h2 v0.4.6
[INFO] [stderr]     Checking upon v0.7.1
[INFO] [stderr]     Checking serde_json v1.0.128
[INFO] [stderr]     Checking serde_urlencoded v0.7.1
[INFO] [stderr]     Checking epub-builder v0.7.4
[INFO] [stderr]     Checking hyper v1.4.1
[INFO] [stderr]     Checking hyper-util v0.1.9
[INFO] [stderr]     Checking hyper-tls v0.6.0
[INFO] [stderr]     Checking reqwest v0.12.8
[INFO] [stderr]     Checking ziggurat v0.1.0 (/opt/rustwide/workdir)
[INFO] [stdout] warning: unused imports: `google::translate_text` and `llm::translate`
[INFO] [stdout]   --> src/main.rs:15:17
[INFO] [stdout]    |
[INFO] [stdout] 15 | use providers::{google::translate_text, llm::translate};
[INFO] [stdout]    |                 ^^^^^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `google::translate_text` and `llm::translate`
[INFO] [stdout]   --> src/main.rs:15:17
[INFO] [stdout]    |
[INFO] [stdout] 15 | use providers::{google::translate_text, llm::translate};
[INFO] [stdout]    |                 ^^^^^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unreachable statement
[INFO] [stdout]    --> src/frontend/tui.rs:228:13
[INFO] [stdout]     |
[INFO] [stdout] 210 | /             match state.selected_option {
[INFO] [stdout] 211 | |                 MenuOption::Providers => {
[INFO] [stdout] 212 | |                     match &state.selected_provider {
[INFO] [stdout] 213 | |                         ProviderOption::Add => {
[INFO] [stdout] ...   |
[INFO] [stdout] 225 | |                 MenuOption::Language => todo!(),
[INFO] [stdout] 226 | |             };
[INFO] [stdout]     | |_____________- any code following this `match` expression is unreachable, as all arms diverge
[INFO] [stdout] 227 |
[INFO] [stdout] 228 |               let mut buffer = String::new();
[INFO] [stdout]     |               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ unreachable statement
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unreachable_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unreachable statement
[INFO] [stdout]    --> src/frontend/tui.rs:228:13
[INFO] [stdout]     |
[INFO] [stdout] 210 | /             match state.selected_option {
[INFO] [stdout] 211 | |                 MenuOption::Providers => {
[INFO] [stdout] 212 | |                     match &state.selected_provider {
[INFO] [stdout] 213 | |                         ProviderOption::Add => {
[INFO] [stdout] ...   |
[INFO] [stdout] 225 | |                 MenuOption::Language => todo!(),
[INFO] [stdout] 226 | |             };
[INFO] [stdout]     | |_____________- any code following this `match` expression is unreachable, as all arms diverge
[INFO] [stdout] 227 |
[INFO] [stdout] 228 |               let mut buffer = String::new();
[INFO] [stdout]     |               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ unreachable statement
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unreachable_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unreachable statement
[INFO] [stdout]   --> src/main.rs:64:5
[INFO] [stdout]    |
[INFO] [stdout] 54 | /     loop {
[INFO] [stdout] 55 | |         render_app_state(&mut terminal, app_state.clone())?;
[INFO] [stdout] 56 | |
[INFO] [stdout] 57 | |         if let Event::Key(key) = event::read()? {
[INFO] [stdout] ...  |
[INFO] [stdout] 61 | |         terminal.flush()?;
[INFO] [stdout] 62 | |     }
[INFO] [stdout]    | |_____- any code following this expression is unreachable
[INFO] [stdout] 63 |
[INFO] [stdout] 64 |       disable_raw_mode()?;
[INFO] [stdout]    |       ^^^^^^^^^^^^^^^^^^^^ unreachable statement
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unreachable statement
[INFO] [stdout]   --> src/main.rs:64:5
[INFO] [stdout]    |
[INFO] [stdout] 54 | /     loop {
[INFO] [stdout] 55 | |         render_app_state(&mut terminal, app_state.clone())?;
[INFO] [stdout] 56 | |
[INFO] [stdout] 57 | |         if let Event::Key(key) = event::read()? {
[INFO] [stdout] ...  |
[INFO] [stdout] 61 | |         terminal.flush()?;
[INFO] [stdout] 62 | |     }
[INFO] [stdout]    | |_____- any code following this expression is unreachable
[INFO] [stdout] 63 |
[INFO] [stdout] 64 |       disable_raw_mode()?;
[INFO] [stdout]    |       ^^^^^^^^^^^^^^^^^^^^ unreachable statement
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `name`
[INFO] [stdout]    --> src/frontend/tui.rs:217:63
[INFO] [stdout]     |
[INFO] [stdout] 217 |                         ProviderOption::Entry(ProviderEntry { name, provider }) => {
[INFO] [stdout]     |                                                               ^^^^ help: try ignoring the field: `name: _`
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `provider`
[INFO] [stdout]    --> src/frontend/tui.rs:217:69
[INFO] [stdout]     |
[INFO] [stdout] 217 |                         ProviderOption::Entry(ProviderEntry { name, provider }) => {
[INFO] [stdout]     |                                                                     ^^^^^^^^ help: try ignoring the field: `provider: _`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `buffer`
[INFO] [stdout]    --> src/frontend/tui.rs:228:17
[INFO] [stdout]     |
[INFO] [stdout] 228 |             let mut buffer = String::new();
[INFO] [stdout]     |                 ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_buffer`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `val`
[INFO] [stdout]    --> src/frontend/tui.rs:229:13
[INFO] [stdout]     |
[INFO] [stdout] 229 |             io::stdin().read_line(&mut buffer)?;
[INFO] [stdout]     |             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_val`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `name`
[INFO] [stdout]    --> src/frontend/tui.rs:217:63
[INFO] [stdout]     |
[INFO] [stdout] 217 |                         ProviderOption::Entry(ProviderEntry { name, provider }) => {
[INFO] [stdout]     |                                                               ^^^^ help: try ignoring the field: `name: _`
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `provider`
[INFO] [stdout]    --> src/frontend/tui.rs:217:69
[INFO] [stdout]     |
[INFO] [stdout] 217 |                         ProviderOption::Entry(ProviderEntry { name, provider }) => {
[INFO] [stdout]     |                                                                     ^^^^^^^^ help: try ignoring the field: `provider: _`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `buffer`
[INFO] [stdout]    --> src/frontend/tui.rs:228:17
[INFO] [stdout]     |
[INFO] [stdout] 228 |             let mut buffer = String::new();
[INFO] [stdout]     |                 ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_buffer`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `val`
[INFO] [stdout]    --> src/frontend/tui.rs:229:13
[INFO] [stdout]     |
[INFO] [stdout] 229 |             io::stdin().read_line(&mut buffer)?;
[INFO] [stdout]     |             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_val`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/main.rs:52:9
[INFO] [stdout]    |
[INFO] [stdout] 52 |     let mut app_state = Arc::new(Mutex::new(AppState::new()));
[INFO] [stdout]    |         ----^^^^^^^^^
[INFO] [stdout]    |         |
[INFO] [stdout]    |         help: remove this `mut`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_mut)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `val`
[INFO] [stdout]   --> src/main.rs:64:5
[INFO] [stdout]    |
[INFO] [stdout] 64 |     disable_raw_mode()?;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_val`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `val`
[INFO] [stdout]   --> src/main.rs:65:5
[INFO] [stdout]    |
[INFO] [stdout] 65 |     execute!(terminal.backend_mut(), LeaveAlternateScreen)?;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_val`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `args`
[INFO] [stdout]   --> src/main.rs:67:9
[INFO] [stdout]    |
[INFO] [stdout] 67 |     let args = Args::parse();
[INFO] [stdout]    |         ^^^^ help: if this is intentional, prefix it with an underscore: `_args`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `api_key`
[INFO] [stdout]   --> src/main.rs:68:9
[INFO] [stdout]    |
[INFO] [stdout] 68 |     let api_key = if let Some(key) = args.api_key {
[INFO] [stdout]    |         ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_api_key`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `key`
[INFO] [stdout]   --> src/main.rs:68:31
[INFO] [stdout]    |
[INFO] [stdout] 68 |     let api_key = if let Some(key) = args.api_key {
[INFO] [stdout]    |                               ^^^ help: if this is intentional, prefix it with an underscore: `_key`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `path`
[INFO] [stdout]   --> src/main.rs:70:24
[INFO] [stdout]    |
[INFO] [stdout] 70 |     } else if let Some(path) = args.config {
[INFO] [stdout]    |                        ^^^^ help: if this is intentional, prefix it with an underscore: `_path`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `contents`
[INFO] [stdout]   --> src/main.rs:71:13
[INFO] [stdout]    |
[INFO] [stdout] 71 |         let contents = fs::read_to_string(path)?;
[INFO] [stdout]    |             ^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_contents`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `val`
[INFO] [stdout]   --> src/main.rs:71:24
[INFO] [stdout]    |
[INFO] [stdout] 71 |         let contents = fs::read_to_string(path)?;
[INFO] [stdout]    |                        ^^^^^^^^^^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_val`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `config`
[INFO] [stdout]   --> src/main.rs:72:13
[INFO] [stdout]    |
[INFO] [stdout] 72 |         let config: Value = serde_json::from_str(&contents)?;
[INFO] [stdout]    |             ^^^^^^ help: if this is intentional, prefix it with an underscore: `_config`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `val`
[INFO] [stdout]   --> src/main.rs:72:29
[INFO] [stdout]    |
[INFO] [stdout] 72 |         let config: Value = serde_json::from_str(&contents)?;
[INFO] [stdout]    |                             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_val`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `val`
[INFO] [stdout]   --> src/main.rs:74:9
[INFO] [stdout]    |
[INFO] [stdout] 74 | /         config["api_key"]
[INFO] [stdout] 75 | |             .as_str()
[INFO] [stdout] 76 | |             .ok_or(eyre!("No API key value in config file"))?
[INFO] [stdout]    | |_____________________________________________________________^ help: if this is intentional, prefix it with an underscore: `_val`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `val`
[INFO] [stdout]   --> src/main.rs:80:9
[INFO] [stdout]    |
[INFO] [stdout] 80 |         env::var("ZIGGURAT_API_KEY")?
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_val`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `request_options`
[INFO] [stdout]   --> src/main.rs:82:9
[INFO] [stdout]    |
[INFO] [stdout] 82 |     let request_options = RequestOptions::default();
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_request_options`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `subscriber`
[INFO] [stdout]   --> src/main.rs:84:9
[INFO] [stdout]    |
[INFO] [stdout] 84 |     let subscriber = FmtSubscriber::builder()
[INFO] [stdout]    |         ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_subscriber`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `val`
[INFO] [stdout]   --> src/main.rs:91:5
[INFO] [stdout]    |
[INFO] [stdout] 91 |     tracing::subscriber::set_global_default(subscriber)?;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_val`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `file_type`
[INFO] [stdout]   --> src/main.rs:93:9
[INFO] [stdout]    |
[INFO] [stdout] 93 |     let file_type = get_file_type(&args.input)?;
[INFO] [stdout]    |         ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_file_type`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `val`
[INFO] [stdout]   --> src/main.rs:93:21
[INFO] [stdout]    |
[INFO] [stdout] 93 |     let file_type = get_file_type(&args.input)?;
[INFO] [stdout]    |                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_val`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `doc`
[INFO] [stdout]    --> src/main.rs:103:17
[INFO] [stdout]     |
[INFO] [stdout] 103 |             let doc = read_pdf(&args.input)?;
[INFO] [stdout]     |                 ^^^ help: if this is intentional, prefix it with an underscore: `_doc`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `val`
[INFO] [stdout]    --> src/main.rs:103:23
[INFO] [stdout]     |
[INFO] [stdout] 103 |             let doc = read_pdf(&args.input)?;
[INFO] [stdout]     |                       ^^^^^^^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_val`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `pdf_options`
[INFO] [stdout]    --> src/main.rs:104:17
[INFO] [stdout]     |
[INFO] [stdout] 104 |             let pdf_options = PdfOptions::default();
[INFO] [stdout]     |                 ^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_pdf_options`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `edited`
[INFO] [stdout]    --> src/main.rs:105:17
[INFO] [stdout]     |
[INFO] [stdout] 105 |             let edited = edit_pdf(doc, request_options, pdf_options, |snippets| {
[INFO] [stdout]     |                 ^^^^^^ help: if this is intentional, prefix it with an underscore: `_edited`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `val`
[INFO] [stdout]    --> src/main.rs:105:26
[INFO] [stdout]     |
[INFO] [stdout] 105 |               let edited = edit_pdf(doc, request_options, pdf_options, |snippets| {
[INFO] [stdout]     |  __________________________^
[INFO] [stdout] 106 | |                 // translate_text(snippets, args.to.clone(), api_key.clone())
[INFO] [stdout] 107 | |                 std::future::ready(Ok(snippets))
[INFO] [stdout] 108 | |             })
[INFO] [stdout] 109 | |             .await?;
[INFO] [stdout]     | |___________________^ help: if this is intentional, prefix it with an underscore: `_val`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `val`
[INFO] [stdout]    --> src/main.rs:110:13
[INFO] [stdout]     |
[INFO] [stdout] 110 |             write_pdf(edited, &args.output)?;
[INFO] [stdout]     |             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_val`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `doc`
[INFO] [stdout]    --> src/main.rs:113:17
[INFO] [stdout]     |
[INFO] [stdout] 113 |             let doc = read_epub(&args.input)?;
[INFO] [stdout]     |                 ^^^ help: if this is intentional, prefix it with an underscore: `_doc`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `val`
[INFO] [stdout]    --> src/main.rs:113:23
[INFO] [stdout]     |
[INFO] [stdout] 113 |             let doc = read_epub(&args.input)?;
[INFO] [stdout]     |                       ^^^^^^^^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_val`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `edited`
[INFO] [stdout]    --> src/main.rs:114:17
[INFO] [stdout]     |
[INFO] [stdout] 114 |             let edited = edit_epub(doc, request_options, |snippets| {
[INFO] [stdout]     |                 ^^^^^^ help: if this is intentional, prefix it with an underscore: `_edited`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `val`
[INFO] [stdout]    --> src/main.rs:114:26
[INFO] [stdout]     |
[INFO] [stdout] 114 |               let edited = edit_epub(doc, request_options, |snippets| {
[INFO] [stdout]     |  __________________________^
[INFO] [stdout] 115 | |                 // translate_text(snippets, args.to.clone(), api_key.clone())
[INFO] [stdout] 116 | |                 std::future::ready(Ok(snippets))
[INFO] [stdout] 117 | |             })
[INFO] [stdout] 118 | |             .await?;
[INFO] [stdout]     | |___________________^ help: if this is intentional, prefix it with an underscore: `_val`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `val`
[INFO] [stdout]    --> src/main.rs:119:13
[INFO] [stdout]     |
[INFO] [stdout] 119 |             write_epub(edited, &args.output)?;
[INFO] [stdout]     |             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_val`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variants `GoogleTranslate` and `Llm` are never constructed
[INFO] [stdout]   --> src/frontend/cli.rs:6:5
[INFO] [stdout]    |
[INFO] [stdout]  5 | pub enum Provider {
[INFO] [stdout]    |          -------- variants in this enum
[INFO] [stdout]  6 |     GoogleTranslate {
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 10 |     Llm {
[INFO] [stdout]    |     ^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variants `V2` and `V3` are never constructed
[INFO] [stdout]   --> src/frontend/cli.rs:18:5
[INFO] [stdout]    |
[INFO] [stdout] 17 | pub enum ApiVersion {
[INFO] [stdout]    |          ---------- variants in this enum
[INFO] [stdout] 18 |     V2,
[INFO] [stdout]    |     ^^
[INFO] [stdout] 19 |     V3 { project_id: String },
[INFO] [stdout]    |     ^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variant `Entry` is never constructed
[INFO] [stdout]   --> src/frontend/tui.rs:31:5
[INFO] [stdout]    |
[INFO] [stdout] 29 | enum ProviderOption {
[INFO] [stdout]    |      -------------- variant in this enum
[INFO] [stdout] 30 |     Add,
[INFO] [stdout] 31 |     Entry(ProviderEntry),
[INFO] [stdout]    |     ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `confirmed_provider_idx`, `config_path`, `input_file`, `output_file`, and `language_code` are never read
[INFO] [stdout]   --> src/frontend/tui.rs:88:5
[INFO] [stdout]    |
[INFO] [stdout] 85 | pub struct AppState {
[INFO] [stdout]    |            -------- fields in this struct
[INFO] [stdout] ...
[INFO] [stdout] 88 |     confirmed_provider_idx: Option<usize>,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 89 |     providers: Vec<ProviderEntry>,
[INFO] [stdout] 90 |     config_path: Option<PathBuf>,
[INFO] [stdout]    |     ^^^^^^^^^^^
[INFO] [stdout] 91 |     input_file: String,
[INFO] [stdout]    |     ^^^^^^^^^^
[INFO] [stdout] 92 |     output_file: String,
[INFO] [stdout]    |     ^^^^^^^^^^^
[INFO] [stdout] 93 |     language_code: String,
[INFO] [stdout]    |     ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `TranslateRequest` is never constructed
[INFO] [stdout]  --> src/providers/google.rs:9:8
[INFO] [stdout]   |
[INFO] [stdout] 9 | struct TranslateRequest {
[INFO] [stdout]   |        ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `TranslateResponse` is never constructed
[INFO] [stdout]   --> src/providers/google.rs:15:8
[INFO] [stdout]    |
[INFO] [stdout] 15 | struct TranslateResponse {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `TranslateData` is never constructed
[INFO] [stdout]   --> src/providers/google.rs:20:8
[INFO] [stdout]    |
[INFO] [stdout] 20 | struct TranslateData {
[INFO] [stdout]    |        ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `Translation` is never constructed
[INFO] [stdout]   --> src/providers/google.rs:25:8
[INFO] [stdout]    |
[INFO] [stdout] 25 | struct Translation {
[INFO] [stdout]    |        ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `translate_pdf` is never used
[INFO] [stdout]   --> src/providers/google.rs:30:10
[INFO] [stdout]    |
[INFO] [stdout] 30 | async fn translate_pdf(
[INFO] [stdout]    |          ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `translate_text` is never used
[INFO] [stdout]   --> src/providers/google.rs:78:14
[INFO] [stdout]    |
[INFO] [stdout] 78 | pub async fn translate_text(
[INFO] [stdout]    |              ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `is_whitespace` is never used
[INFO] [stdout]    --> src/providers/google.rs:114:4
[INFO] [stdout]     |
[INFO] [stdout] 114 | fn is_whitespace(snippet: &str) -> bool {
[INFO] [stdout]     |    ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `Request` is never constructed
[INFO] [stdout]  --> src/providers/llm.rs:6:8
[INFO] [stdout]   |
[INFO] [stdout] 6 | struct Request {
[INFO] [stdout]   |        ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `Response` is never constructed
[INFO] [stdout]   --> src/providers/llm.rs:13:8
[INFO] [stdout]    |
[INFO] [stdout] 13 | struct Response {
[INFO] [stdout]    |        ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `Choice` is never constructed
[INFO] [stdout]   --> src/providers/llm.rs:22:8
[INFO] [stdout]    |
[INFO] [stdout] 22 | struct Choice {
[INFO] [stdout]    |        ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `Logprobs` is never constructed
[INFO] [stdout]   --> src/providers/llm.rs:30:8
[INFO] [stdout]    |
[INFO] [stdout] 30 | struct Logprobs {
[INFO] [stdout]    |        ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `send_request` is never used
[INFO] [stdout]   --> src/providers/llm.rs:35:10
[INFO] [stdout]    |
[INFO] [stdout] 35 | async fn send_request(endpoint: &str, api_key: &str, request: &Request) -> Result<Response> {
[INFO] [stdout]    |          ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `translate` is never used
[INFO] [stdout]   --> src/providers/llm.rs:57:14
[INFO] [stdout]    |
[INFO] [stdout] 57 | pub async fn translate(snippet: &str, to: &str, endpoint: &str, api_key: &str) -> Result<String> {
[INFO] [stdout]    |              ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: hiding a lifetime that's elided elsewhere is confusing
[INFO] [stdout]    --> src/frontend/tui.rs:262:23
[INFO] [stdout]     |
[INFO] [stdout] 262 | fn styled_list(title: &str, items: Vec<String>, is_selected: bool) -> List {
[INFO] [stdout]     |                       ^^^^ the lifetime is elided here                ^^^^ the same lifetime is hidden here
[INFO] [stdout]     |
[INFO] [stdout]     = help: the same lifetime is referred to in inconsistent ways, making the signature confusing
[INFO] [stdout]     = note: `#[warn(mismatched_lifetime_syntaxes)]` on by default
[INFO] [stdout] help: use `'_` for type paths
[INFO] [stdout]     |
[INFO] [stdout] 262 | fn styled_list(title: &str, items: Vec<String>, is_selected: bool) -> List<'_> {
[INFO] [stdout]     |                                                                           ++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/main.rs:52:9
[INFO] [stdout]    |
[INFO] [stdout] 52 |     let mut app_state = Arc::new(Mutex::new(AppState::new()));
[INFO] [stdout]    |         ----^^^^^^^^^
[INFO] [stdout]    |         |
[INFO] [stdout]    |         help: remove this `mut`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_mut)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `val`
[INFO] [stdout]   --> src/main.rs:64:5
[INFO] [stdout]    |
[INFO] [stdout] 64 |     disable_raw_mode()?;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_val`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `val`
[INFO] [stdout]   --> src/main.rs:65:5
[INFO] [stdout]    |
[INFO] [stdout] 65 |     execute!(terminal.backend_mut(), LeaveAlternateScreen)?;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_val`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `args`
[INFO] [stdout]   --> src/main.rs:67:9
[INFO] [stdout]    |
[INFO] [stdout] 67 |     let args = Args::parse();
[INFO] [stdout]    |         ^^^^ help: if this is intentional, prefix it with an underscore: `_args`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `api_key`
[INFO] [stdout]   --> src/main.rs:68:9
[INFO] [stdout]    |
[INFO] [stdout] 68 |     let api_key = if let Some(key) = args.api_key {
[INFO] [stdout]    |         ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_api_key`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `key`
[INFO] [stdout]   --> src/main.rs:68:31
[INFO] [stdout]    |
[INFO] [stdout] 68 |     let api_key = if let Some(key) = args.api_key {
[INFO] [stdout]    |                               ^^^ help: if this is intentional, prefix it with an underscore: `_key`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `path`
[INFO] [stdout]   --> src/main.rs:70:24
[INFO] [stdout]    |
[INFO] [stdout] 70 |     } else if let Some(path) = args.config {
[INFO] [stdout]    |                        ^^^^ help: if this is intentional, prefix it with an underscore: `_path`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `contents`
[INFO] [stdout]   --> src/main.rs:71:13
[INFO] [stdout]    |
[INFO] [stdout] 71 |         let contents = fs::read_to_string(path)?;
[INFO] [stdout]    |             ^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_contents`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `val`
[INFO] [stdout]   --> src/main.rs:71:24
[INFO] [stdout]    |
[INFO] [stdout] 71 |         let contents = fs::read_to_string(path)?;
[INFO] [stdout]    |                        ^^^^^^^^^^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_val`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `config`
[INFO] [stdout]   --> src/main.rs:72:13
[INFO] [stdout]    |
[INFO] [stdout] 72 |         let config: Value = serde_json::from_str(&contents)?;
[INFO] [stdout]    |             ^^^^^^ help: if this is intentional, prefix it with an underscore: `_config`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `val`
[INFO] [stdout]   --> src/main.rs:72:29
[INFO] [stdout]    |
[INFO] [stdout] 72 |         let config: Value = serde_json::from_str(&contents)?;
[INFO] [stdout]    |                             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_val`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `val`
[INFO] [stdout]   --> src/main.rs:74:9
[INFO] [stdout]    |
[INFO] [stdout] 74 | /         config["api_key"]
[INFO] [stdout] 75 | |             .as_str()
[INFO] [stdout] 76 | |             .ok_or(eyre!("No API key value in config file"))?
[INFO] [stdout]    | |_____________________________________________________________^ help: if this is intentional, prefix it with an underscore: `_val`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `val`
[INFO] [stdout]   --> src/main.rs:80:9
[INFO] [stdout]    |
[INFO] [stdout] 80 |         env::var("ZIGGURAT_API_KEY")?
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_val`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `request_options`
[INFO] [stdout]   --> src/main.rs:82:9
[INFO] [stdout]    |
[INFO] [stdout] 82 |     let request_options = RequestOptions::default();
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_request_options`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `subscriber`
[INFO] [stdout]   --> src/main.rs:84:9
[INFO] [stdout]    |
[INFO] [stdout] 84 |     let subscriber = FmtSubscriber::builder()
[INFO] [stdout]    |         ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_subscriber`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `val`
[INFO] [stdout]   --> src/main.rs:91:5
[INFO] [stdout]    |
[INFO] [stdout] 91 |     tracing::subscriber::set_global_default(subscriber)?;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_val`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `file_type`
[INFO] [stdout]   --> src/main.rs:93:9
[INFO] [stdout]    |
[INFO] [stdout] 93 |     let file_type = get_file_type(&args.input)?;
[INFO] [stdout]    |         ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_file_type`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `val`
[INFO] [stdout]   --> src/main.rs:93:21
[INFO] [stdout]    |
[INFO] [stdout] 93 |     let file_type = get_file_type(&args.input)?;
[INFO] [stdout]    |                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_val`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `doc`
[INFO] [stdout]    --> src/main.rs:103:17
[INFO] [stdout]     |
[INFO] [stdout] 103 |             let doc = read_pdf(&args.input)?;
[INFO] [stdout]     |                 ^^^ help: if this is intentional, prefix it with an underscore: `_doc`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `val`
[INFO] [stdout]    --> src/main.rs:103:23
[INFO] [stdout]     |
[INFO] [stdout] 103 |             let doc = read_pdf(&args.input)?;
[INFO] [stdout]     |                       ^^^^^^^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_val`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `pdf_options`
[INFO] [stdout]    --> src/main.rs:104:17
[INFO] [stdout]     |
[INFO] [stdout] 104 |             let pdf_options = PdfOptions::default();
[INFO] [stdout]     |                 ^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_pdf_options`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `edited`
[INFO] [stdout]    --> src/main.rs:105:17
[INFO] [stdout]     |
[INFO] [stdout] 105 |             let edited = edit_pdf(doc, request_options, pdf_options, |snippets| {
[INFO] [stdout]     |                 ^^^^^^ help: if this is intentional, prefix it with an underscore: `_edited`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `val`
[INFO] [stdout]    --> src/main.rs:105:26
[INFO] [stdout]     |
[INFO] [stdout] 105 |               let edited = edit_pdf(doc, request_options, pdf_options, |snippets| {
[INFO] [stdout]     |  __________________________^
[INFO] [stdout] 106 | |                 // translate_text(snippets, args.to.clone(), api_key.clone())
[INFO] [stdout] 107 | |                 std::future::ready(Ok(snippets))
[INFO] [stdout] 108 | |             })
[INFO] [stdout] 109 | |             .await?;
[INFO] [stdout]     | |___________________^ help: if this is intentional, prefix it with an underscore: `_val`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `val`
[INFO] [stdout]    --> src/main.rs:110:13
[INFO] [stdout]     |
[INFO] [stdout] 110 |             write_pdf(edited, &args.output)?;
[INFO] [stdout]     |             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_val`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `doc`
[INFO] [stdout]    --> src/main.rs:113:17
[INFO] [stdout]     |
[INFO] [stdout] 113 |             let doc = read_epub(&args.input)?;
[INFO] [stdout]     |                 ^^^ help: if this is intentional, prefix it with an underscore: `_doc`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `val`
[INFO] [stdout]    --> src/main.rs:113:23
[INFO] [stdout]     |
[INFO] [stdout] 113 |             let doc = read_epub(&args.input)?;
[INFO] [stdout]     |                       ^^^^^^^^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_val`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `edited`
[INFO] [stdout]    --> src/main.rs:114:17
[INFO] [stdout]     |
[INFO] [stdout] 114 |             let edited = edit_epub(doc, request_options, |snippets| {
[INFO] [stdout]     |                 ^^^^^^ help: if this is intentional, prefix it with an underscore: `_edited`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `val`
[INFO] [stdout]    --> src/main.rs:114:26
[INFO] [stdout]     |
[INFO] [stdout] 114 |               let edited = edit_epub(doc, request_options, |snippets| {
[INFO] [stdout]     |  __________________________^
[INFO] [stdout] 115 | |                 // translate_text(snippets, args.to.clone(), api_key.clone())
[INFO] [stdout] 116 | |                 std::future::ready(Ok(snippets))
[INFO] [stdout] 117 | |             })
[INFO] [stdout] 118 | |             .await?;
[INFO] [stdout]     | |___________________^ help: if this is intentional, prefix it with an underscore: `_val`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `val`
[INFO] [stdout]    --> src/main.rs:119:13
[INFO] [stdout]     |
[INFO] [stdout] 119 |             write_epub(edited, &args.output)?;
[INFO] [stdout]     |             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_val`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variants `GoogleTranslate` and `Llm` are never constructed
[INFO] [stdout]   --> src/frontend/cli.rs:6:5
[INFO] [stdout]    |
[INFO] [stdout]  5 | pub enum Provider {
[INFO] [stdout]    |          -------- variants in this enum
[INFO] [stdout]  6 |     GoogleTranslate {
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 10 |     Llm {
[INFO] [stdout]    |     ^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variants `V2` and `V3` are never constructed
[INFO] [stdout]   --> src/frontend/cli.rs:18:5
[INFO] [stdout]    |
[INFO] [stdout] 17 | pub enum ApiVersion {
[INFO] [stdout]    |          ---------- variants in this enum
[INFO] [stdout] 18 |     V2,
[INFO] [stdout]    |     ^^
[INFO] [stdout] 19 |     V3 { project_id: String },
[INFO] [stdout]    |     ^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variant `Entry` is never constructed
[INFO] [stdout]   --> src/frontend/tui.rs:31:5
[INFO] [stdout]    |
[INFO] [stdout] 29 | enum ProviderOption {
[INFO] [stdout]    |      -------------- variant in this enum
[INFO] [stdout] 30 |     Add,
[INFO] [stdout] 31 |     Entry(ProviderEntry),
[INFO] [stdout]    |     ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `confirmed_provider_idx`, `config_path`, `input_file`, `output_file`, and `language_code` are never read
[INFO] [stdout]   --> src/frontend/tui.rs:88:5
[INFO] [stdout]    |
[INFO] [stdout] 85 | pub struct AppState {
[INFO] [stdout]    |            -------- fields in this struct
[INFO] [stdout] ...
[INFO] [stdout] 88 |     confirmed_provider_idx: Option<usize>,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 89 |     providers: Vec<ProviderEntry>,
[INFO] [stdout] 90 |     config_path: Option<PathBuf>,
[INFO] [stdout]    |     ^^^^^^^^^^^
[INFO] [stdout] 91 |     input_file: String,
[INFO] [stdout]    |     ^^^^^^^^^^
[INFO] [stdout] 92 |     output_file: String,
[INFO] [stdout]    |     ^^^^^^^^^^^
[INFO] [stdout] 93 |     language_code: String,
[INFO] [stdout]    |     ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `TranslateRequest` is never constructed
[INFO] [stdout]  --> src/providers/google.rs:9:8
[INFO] [stdout]   |
[INFO] [stdout] 9 | struct TranslateRequest {
[INFO] [stdout]   |        ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `TranslateResponse` is never constructed
[INFO] [stdout]   --> src/providers/google.rs:15:8
[INFO] [stdout]    |
[INFO] [stdout] 15 | struct TranslateResponse {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `TranslateData` is never constructed
[INFO] [stdout]   --> src/providers/google.rs:20:8
[INFO] [stdout]    |
[INFO] [stdout] 20 | struct TranslateData {
[INFO] [stdout]    |        ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `Translation` is never constructed
[INFO] [stdout]   --> src/providers/google.rs:25:8
[INFO] [stdout]    |
[INFO] [stdout] 25 | struct Translation {
[INFO] [stdout]    |        ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `translate_pdf` is never used
[INFO] [stdout]   --> src/providers/google.rs:30:10
[INFO] [stdout]    |
[INFO] [stdout] 30 | async fn translate_pdf(
[INFO] [stdout]    |          ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `translate_text` is never used
[INFO] [stdout]   --> src/providers/google.rs:78:14
[INFO] [stdout]    |
[INFO] [stdout] 78 | pub async fn translate_text(
[INFO] [stdout]    |              ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `is_whitespace` is never used
[INFO] [stdout]    --> src/providers/google.rs:114:4
[INFO] [stdout]     |
[INFO] [stdout] 114 | fn is_whitespace(snippet: &str) -> bool {
[INFO] [stdout]     |    ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `Request` is never constructed
[INFO] [stdout]  --> src/providers/llm.rs:6:8
[INFO] [stdout]   |
[INFO] [stdout] 6 | struct Request {
[INFO] [stdout]   |        ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `Response` is never constructed
[INFO] [stdout]   --> src/providers/llm.rs:13:8
[INFO] [stdout]    |
[INFO] [stdout] 13 | struct Response {
[INFO] [stdout]    |        ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `Choice` is never constructed
[INFO] [stdout]   --> src/providers/llm.rs:22:8
[INFO] [stdout]    |
[INFO] [stdout] 22 | struct Choice {
[INFO] [stdout]    |        ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `Logprobs` is never constructed
[INFO] [stdout]   --> src/providers/llm.rs:30:8
[INFO] [stdout]    |
[INFO] [stdout] 30 | struct Logprobs {
[INFO] [stdout]    |        ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `send_request` is never used
[INFO] [stdout]   --> src/providers/llm.rs:35:10
[INFO] [stdout]    |
[INFO] [stdout] 35 | async fn send_request(endpoint: &str, api_key: &str, request: &Request) -> Result<Response> {
[INFO] [stdout]    |          ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `translate` is never used
[INFO] [stdout]   --> src/providers/llm.rs:57:14
[INFO] [stdout]    |
[INFO] [stdout] 57 | pub async fn translate(snippet: &str, to: &str, endpoint: &str, api_key: &str) -> Result<String> {
[INFO] [stdout]    |              ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: hiding a lifetime that's elided elsewhere is confusing
[INFO] [stdout]    --> src/frontend/tui.rs:262:23
[INFO] [stdout]     |
[INFO] [stdout] 262 | fn styled_list(title: &str, items: Vec<String>, is_selected: bool) -> List {
[INFO] [stdout]     |                       ^^^^ the lifetime is elided here                ^^^^ the same lifetime is hidden here
[INFO] [stdout]     |
[INFO] [stdout]     = help: the same lifetime is referred to in inconsistent ways, making the signature confusing
[INFO] [stdout]     = note: `#[warn(mismatched_lifetime_syntaxes)]` on by default
[INFO] [stdout] help: use `'_` for type paths
[INFO] [stdout]     |
[INFO] [stdout] 262 | fn styled_list(title: &str, items: Vec<String>, is_selected: bool) -> List<'_> {
[INFO] [stdout]     |                                                                           ++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr]     Finished `dev` profile [unoptimized + debuginfo] target(s) in 1m 12s
[INFO] running `Command { std: "docker" "inspect" "a460a209265b153caa781bdb0d2dfb4b6ba139ec0204cac2698e32cc05a6a7de", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "a460a209265b153caa781bdb0d2dfb4b6ba139ec0204cac2698e32cc05a6a7de", kill_on_drop: false }`
[INFO] [stdout] a460a209265b153caa781bdb0d2dfb4b6ba139ec0204cac2698e32cc05a6a7de
