[INFO] cloning repository https://github.com/Amnibro/Amni-Browse
[INFO] running `Command { std: "git" "-c" "credential.helper=" "-c" "credential.helper=/workspace/cargo-home/bin/git-credential-null" "clone" "--bare" "https://github.com/Amnibro/Amni-Browse" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2FAmnibro%2FAmni-Browse", kill_on_drop: false }`
[INFO] [stderr] Cloning into bare repository '/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2FAmnibro%2FAmni-Browse'...
[INFO] running `Command { std: "git" "rev-parse" "HEAD", kill_on_drop: false }`
[INFO] [stdout] de9965392e229b3c18c8aabfcee266c910634ff4
[INFO] checking Amnibro/Amni-Browse against try#50f413885985a8b0a0b6ca0766a0aedd45304953 for pr-155657
[INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2FAmnibro%2FAmni-Browse" "/workspace/builds/worker-3-tc2/source", kill_on_drop: false }`
[INFO] [stderr] Cloning into '/workspace/builds/worker-3-tc2/source'...
[INFO] [stderr] done.
[INFO] started tweaking git repo https://github.com/Amnibro/Amni-Browse
[INFO] finished tweaking git repo https://github.com/Amnibro/Amni-Browse
[INFO] tweaked toml for git repo https://github.com/Amnibro/Amni-Browse written to /workspace/builds/worker-3-tc2/source/Cargo.toml
[INFO] validating manifest of git repo https://github.com/Amnibro/Amni-Browse on toolchain 50f413885985a8b0a0b6ca0766a0aedd45304953
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+50f413885985a8b0a0b6ca0766a0aedd45304953" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }`
[INFO] crate git repo https://github.com/Amnibro/Amni-Browse 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" "+50f413885985a8b0a0b6ca0766a0aedd45304953" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }`
[INFO] [stderr]     Blocking waiting for file lock on package cache
[INFO] [stderr]     Updating git repository `https://github.com/servo/servo.git`
[ERROR] error running command: no output for 300 seconds
[INFO] checking Amnibro/Amni-Browse against try#50f413885985a8b0a0b6ca0766a0aedd45304953 for pr-155657
[INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2FAmnibro%2FAmni-Browse" "/workspace/builds/worker-3-tc2/source", kill_on_drop: false }`
[INFO] [stderr] Cloning into '/workspace/builds/worker-3-tc2/source'...
[INFO] [stderr] done.
[INFO] started tweaking git repo https://github.com/Amnibro/Amni-Browse
[INFO] finished tweaking git repo https://github.com/Amnibro/Amni-Browse
[INFO] tweaked toml for git repo https://github.com/Amnibro/Amni-Browse written to /workspace/builds/worker-3-tc2/source/Cargo.toml
[INFO] validating manifest of git repo https://github.com/Amnibro/Amni-Browse on toolchain 50f413885985a8b0a0b6ca0766a0aedd45304953
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+50f413885985a8b0a0b6ca0766a0aedd45304953" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }`
[INFO] crate git repo https://github.com/Amnibro/Amni-Browse 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" "+50f413885985a8b0a0b6ca0766a0aedd45304953" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }`
[INFO] [stderr]     Blocking waiting for file lock on package cache
[INFO] [stderr]     Updating crates.io index
[INFO] [stderr]     Updating git repository `https://github.com/servo/stylo`
[INFO] [stderr]     Blocking waiting for file lock on package cache
[INFO] [stderr]  Downloading crates ...
[INFO] [stderr]   Downloaded wry v0.46.3
[INFO] [stderr]   Downloaded objc2-web-kit v0.2.2
[INFO] [stderr]   Downloaded d3d12 v22.0.0
[INFO] [stderr]   Downloaded time-point v0.1.1
[INFO] [stderr]   Downloaded servo-display-link v0.2.0
[INFO] [stderr]   Downloaded io-surface v0.15.1
[INFO] [stderr]   Downloaded wr_malloc_size_of v0.2.2
[INFO] [stderr]   Downloaded surfman v0.9.8
[INFO] [stderr]   Downloaded zeitstempel v0.1.2
[INFO] [stderr]   Downloaded webrender_build v0.68.0
[INFO] [stderr]   Downloaded plane-split v0.18.0
[INFO] [stderr]   Downloaded app_units v0.7.8
[INFO] [stderr]   Downloaded peek-poke v0.3.0
[INFO] [stderr]   Downloaded wr_glyph_rasterizer v0.68.0
[INFO] [stderr]   Downloaded freetype v0.7.2
[INFO] [stderr]   Downloaded topological-sort v0.1.0
[INFO] [stderr]   Downloaded malloc_size_of_derive v0.1.3
[INFO] [stderr]   Downloaded webrender_api v0.68.0
[INFO] [stderr]   Downloaded peek-poke-derive v0.3.0
[INFO] [stderr]   Downloaded tracy-rs v0.1.2
[INFO] [stderr]   Downloaded build-parallel v0.1.2
[INFO] [stderr]   Downloaded smallbitvec v2.6.0
[INFO] [stderr]   Downloaded gleam v0.15.1
[INFO] [stderr]   Downloaded webrender v0.68.0
[INFO] [stderr]   Downloaded surfman v0.12.0
[INFO] [stderr]   Downloaded glslopt v0.1.12
[INFO] [stderr]   Downloaded tikv-jemallocator v0.6.1
[INFO] [stderr]   Downloaded keyboard-types v0.8.3
[INFO] [stderr]   Downloaded tikv-jemalloc-sys v0.6.1+5.3.0-1-ge13ca993e8ccb9ba9847cc330696e02839f328f7
[INFO] [stderr]   Downloaded ipc-channel v0.21.0
[INFO] [stderr]   Downloaded accountable-refcell v0.2.2
[INFO] [stderr]   Downloaded markup5ever v0.39.0
[INFO] [stderr]   Downloaded accesskit v0.24.0
[INFO] [stderr]   Downloaded content-security-policy v0.8.0
[INFO] [stderr]   Downloaded xml5ever v0.39.0
[INFO] [stderr]   Downloaded sea-query v1.0.0-rc.31
[INFO] [stderr]   Downloaded openxr-sys v0.12.0
[INFO] [stderr]   Downloaded diplomat v0.8.0
[INFO] [stderr]   Downloaded icu_timezone v1.5.0
[INFO] [stderr]   Downloaded webdriver v0.53.0
[INFO] [stderr]   Downloaded mozjs v0.15.8
[INFO] [stderr]   Downloaded icu_calendar v1.5.2
[INFO] [stderr]   Downloaded icu_decimal_data v1.5.1
[INFO] [stderr]   Downloaded fontsan-woff2 v0.1.1
[INFO] [stderr]   Downloaded sea-query-rusqlite v0.8.0-rc.15
[INFO] [stderr]   Downloaded icu_plurals v1.5.0
[INFO] [stderr]   Downloaded encoding_c_mem v0.2.6
[INFO] [stderr]   Downloaded icu_casemap v1.5.1
[INFO] [stderr]   Downloaded diplomat_core v0.8.1
[INFO] [stderr]   Downloaded html5ever v0.39.0
[INFO] [stderr]   Downloaded icu_experimental v0.1.0
[INFO] [stderr]   Downloaded icu_pattern v0.2.0
[INFO] [stderr]   Downloaded taffy v0.10.1
[INFO] [stderr]   Downloaded icu_collator v1.5.0
[INFO] [stderr]   Downloaded openxr v0.20.0
[INFO] [stderr]   Downloaded icu_timezone_data v1.5.1
[INFO] [stderr]   Downloaded strck v0.1.2
[INFO] [stderr]   Downloaded sea-query-derive v1.0.0-rc.12
[INFO] [stderr]   Downloaded speexdsp-resampler v0.1.0
[INFO] [stderr]   Downloaded swapper v0.1.0
[INFO] [stderr]   Downloaded icu_calendar_data v1.5.1
[INFO] [stderr]   Downloaded icu_plurals_data v1.5.1
[INFO] [stderr]   Downloaded lru v0.16.4
[INFO] [stderr]   Downloaded xml v1.2.1
[INFO] [stderr]   Downloaded kem v0.3.0-pre.0
[INFO] [stderr]   Downloaded diplomat-runtime v0.8.3
[INFO] [stderr]   Downloaded encoding_c v0.9.8
[INFO] [stderr]   Downloaded nom-rfc8288 v0.4.0
[INFO] [stderr]   Downloaded ml-dsa v0.0.4
[INFO] [stderr]   Downloaded icu_decimal v1.5.0
[INFO] [stderr]   Downloaded gstreamer-webrtc-sys v0.25.0
[INFO] [stderr]   Downloaded gstreamer-app-sys v0.25.0
[INFO] [stderr]   Downloaded calendrical_calculations v0.1.3
[INFO] [stderr]   Downloaded fixed_decimal v0.5.6
[INFO] [stderr]   Downloaded icu_list_data v1.5.1
[INFO] [stderr]   Downloaded nom-language v0.1.0
[INFO] [stderr]   Downloaded icu_capi v1.5.0
[INFO] [stderr]   Downloaded icu_casemap_data v1.5.1
[INFO] [stderr]   Downloaded strck_ident v0.1.2
[INFO] [stderr]   Downloaded textnonce v1.0.0
[INFO] [stderr]   Downloaded peniko v0.5.0
[INFO] [stderr]   Downloaded icu_list v1.5.0
[INFO] [stderr]   Downloaded imsz v0.4.1
[INFO] [stderr]   Downloaded ohos-sys-opaque-types v0.1.9
[INFO] [stderr]   Downloaded mime-multipart-hyper1 v0.10.0
[INFO] [stderr]   Downloaded kstring v2.0.2
[INFO] [stderr]   Downloaded gstreamer-gl-egl v0.25.0
[INFO] [stderr]   Downloaded gstreamer-sdp v0.25.0
[INFO] [stderr]   Downloaded vello_cpu v0.0.4
[INFO] [stderr]   Downloaded gaol v0.2.1
[INFO] [stderr]   Downloaded icu_datetime v1.5.1
[INFO] [stderr]   Downloaded ml-kem v0.2.3
[INFO] [stderr]   Downloaded quick_cache v0.6.21
[INFO] [stderr]   Downloaded ohos-media-sys v0.0.5
[INFO] [stderr]   Downloaded gstreamer-video-sys v0.25.0
[INFO] [stderr]   Downloaded glib-sys v0.22.3
[INFO] [stderr]   Downloaded gstreamer-base-sys v0.25.0
[INFO] [stderr]   Downloaded gstreamer-base v0.25.0
[INFO] [stderr]   Downloaded gstreamer-gl-egl-sys v0.25.0
[INFO] [stderr]   Downloaded gstreamer-gl v0.25.0
[INFO] [stderr]   Downloaded gstreamer-webrtc v0.25.0
[INFO] [stderr]   Downloaded gstreamer-play v0.25.0
[INFO] [stderr]   Downloaded gstreamer-audio v0.25.0
[INFO] [stderr]   Downloaded gstreamer-audio-sys v0.25.0
[INFO] [stderr]   Downloaded color v0.3.2
[INFO] [stderr]   Downloaded option-operations v0.6.1
[INFO] [stderr]   Downloaded gstreamer-sys v0.25.0
[INFO] [stderr]   Downloaded fontdue v0.9.3
[INFO] [stderr]   Downloaded regex-automata v0.2.0
[INFO] [stderr]   Downloaded fontsan v0.6.1
[INFO] [stderr]   Downloaded gstreamer v0.25.1
[INFO] [stderr]   Downloaded icu_collator_data v1.5.1
[INFO] [stderr]   Downloaded markup5ever_rcdom v0.38.0+unofficial
[INFO] [stderr]   Downloaded fst v0.4.7
[INFO] [stderr]   Downloaded icu_experimental_data v0.1.1
[INFO] [stderr]   Downloaded hybrid-array v0.3.1
[INFO] [stderr]   Downloaded harfbuzz-sys v0.6.1
[INFO] [stderr]   Downloaded ocb3 v0.1.0
[INFO] [stderr]   Downloaded icu_datetime_data v1.5.1
[INFO] [stderr]   Downloaded gstreamer-gl-sys v0.25.0
[INFO] [stderr]   Downloaded hybrid-array v0.2.3
[INFO] [stderr]   Downloaded chardetng v0.1.17
[INFO] [stderr]   Downloaded gstreamer-video v0.25.0
[INFO] [stderr]   Downloaded muldiv v1.0.1
[INFO] [stderr]   Downloaded yuv v0.8.13
[INFO] [stderr]   Downloaded gstreamer-sdp-sys v0.25.0
[INFO] [stderr]   Downloaded aes-kw v0.2.1
[INFO] [stderr]   Downloaded ohos-window-sys v0.1.6
[INFO] [stderr]   Downloaded async-tungstenite v0.34.0
[INFO] [stderr]   Downloaded vello_common v0.0.4
[INFO] [stderr]   Downloaded fearless_simd v0.3.0
[INFO] [stderr]   Downloaded buf-read-ext v0.4.0
[INFO] [stderr]   Downloaded gstreamer-play-sys v0.25.0
[INFO] [stderr]   Downloaded xml5ever v0.38.0
[INFO] [stderr]   Downloaded gstreamer-app v0.25.0
[INFO] [stderr]   Downloaded ryu-js v1.0.2
[INFO] [stderr]   Downloaded glib v0.22.5
[INFO] [stderr]   Downloaded mozangle v0.5.5
[INFO] [stderr]   Downloaded mozjs_sys v0.140.8-3
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-3-tc2/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-3-tc2/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+50f413885985a8b0a0b6ca0766a0aedd45304953" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }`
[INFO] [stdout] 5e3d25994b8c18230856e04760bea62300b99361839ef30d803b6b5e3850d248
[INFO] running `Command { std: "docker" "start" "-a" "5e3d25994b8c18230856e04760bea62300b99361839ef30d803b6b5e3850d248", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "5e3d25994b8c18230856e04760bea62300b99361839ef30d803b6b5e3850d248", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "5e3d25994b8c18230856e04760bea62300b99361839ef30d803b6b5e3850d248", kill_on_drop: false }`
[INFO] [stdout] 5e3d25994b8c18230856e04760bea62300b99361839ef30d803b6b5e3850d248
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-3-tc2/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-3-tc2/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "RUSTDOCFLAGS=--cap-lints=forbid" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+50f413885985a8b0a0b6ca0766a0aedd45304953" "check" "--frozen" "--all" "--all-targets" "--message-format=json", kill_on_drop: false }`
[INFO] [stdout] 91adc2d37eea133fea801526b1dc4efa7f67cb53652476f6dbb796b574394139
[INFO] running `Command { std: "docker" "start" "-a" "91adc2d37eea133fea801526b1dc4efa7f67cb53652476f6dbb796b574394139", kill_on_drop: false }`
[INFO] [stderr]    Compiling libc v0.2.183
[INFO] [stderr]    Compiling proc-macro2 v1.0.106
[INFO] [stderr]    Compiling unicode-ident v1.0.24
[INFO] [stderr]    Compiling quote v1.0.45
[INFO] [stderr]    Compiling serde_core v1.0.228
[INFO] [stderr]    Compiling pkg-config v0.3.32
[INFO] [stderr]    Compiling serde v1.0.228
[INFO] [stderr]    Compiling hashbrown v0.17.0
[INFO] [stderr]    Compiling equivalent v1.0.2
[INFO] [stderr]    Compiling winnow v0.5.40
[INFO] [stderr]    Compiling target-lexicon v0.12.16
[INFO] [stderr]    Compiling smallvec v1.15.1
[INFO] [stderr]    Compiling version-compare v0.2.1
[INFO] [stderr]    Compiling heck v0.5.0
[INFO] [stderr]     Checking cfg-if v1.0.4
[INFO] [stderr]    Compiling version_check v0.9.5
[INFO] [stderr]     Checking pin-project-lite v0.2.17
[INFO] [stderr]     Checking once_cell v1.21.4
[INFO] [stderr]    Compiling shlex v1.3.0
[INFO] [stderr]     Checking futures-core v0.3.32
[INFO] [stderr]     Checking memchr v2.8.0
[INFO] [stderr]    Compiling find-msvc-tools v0.1.9
[INFO] [stderr]     Checking futures-sink v0.3.32
[INFO] [stderr]     Checking slab v0.4.12
[INFO] [stderr]     Checking bitflags v2.11.0
[INFO] [stderr]     Checking futures-io v0.3.32
[INFO] [stderr]     Checking futures-task v0.3.32
[INFO] [stderr]    Compiling parking_lot_core v0.9.12
[INFO] [stderr]     Checking scopeguard v1.2.0
[INFO] [stderr]    Compiling siphasher v1.0.2
[INFO] [stderr]     Checking lock_api v0.4.14
[INFO] [stderr]    Compiling proc-macro-error-attr v1.0.4
[INFO] [stderr]    Compiling indexmap v2.14.0
[INFO] [stderr]     Checking futures-channel v0.3.32
[INFO] [stderr]    Compiling syn v1.0.109
[INFO] [stderr]    Compiling proc-macro-error v1.0.4
[INFO] [stderr]    Compiling typenum v1.19.0
[INFO] [stderr]    Compiling generic-array v0.14.7
[INFO] [stderr]     Checking stable_deref_trait v1.2.1
[INFO] [stderr]    Compiling cfg-expr v0.15.8
[INFO] [stderr]     Checking bytes v1.11.1
[INFO] [stderr]    Compiling thiserror v1.0.69
[INFO] [stderr]     Checking log v0.4.29
[INFO] [stderr]     Checking itoa v1.0.17
[INFO] [stderr]    Compiling heck v0.4.1
[INFO] [stderr]    Compiling autocfg v1.5.0
[INFO] [stderr]     Checking subtle v2.6.1
[INFO] [stderr]    Compiling semver v1.0.27
[INFO] [stderr]    Compiling gio v0.18.4
[INFO] [stderr]    Compiling syn v2.0.117
[INFO] [stderr]    Compiling jobserver v0.1.34
[INFO] [stderr]     Checking getrandom v0.2.17
[INFO] [stderr]     Checking errno v0.3.14
[INFO] [stderr]     Checking mio v1.1.1
[INFO] [stderr]     Checking rand_core v0.6.4
[INFO] [stderr]     Checking signal-hook-registry v1.4.8
[INFO] [stderr]     Checking socket2 v0.6.3
[INFO] [stderr]     Checking http v1.4.0
[INFO] [stderr]    Compiling rustc_version v0.4.1
[INFO] [stderr]    Compiling phf_shared v0.13.1
[INFO] [stderr]    Compiling dunce v1.0.5
[INFO] [stderr]    Compiling vcpkg v0.2.15
[INFO] [stderr]    Compiling cc v1.2.57
[INFO] [stderr]     Checking parking_lot v0.12.5
[INFO] [stderr]     Checking zeroize v1.8.2
[INFO] [stderr]    Compiling fastrand v2.3.0
[INFO] [stderr]    Compiling fs_extra v1.3.0
[INFO] [stderr]     Checking writeable v0.6.2
[INFO] [stderr]     Checking percent-encoding v2.3.2
[INFO] [stderr]     Checking litemap v0.8.1
[INFO] [stderr]     Checking rustls-pki-types v1.14.0
[INFO] [stderr]    Compiling phf_shared v0.11.3
[INFO] [stderr]    Compiling rand v0.8.5
[INFO] [stderr]     Checking new_debug_unreachable v1.0.6
[INFO] [stderr]    Compiling icu_normalizer_data v2.1.1
[INFO] [stderr]    Compiling icu_properties_data v2.1.2
[INFO] [stderr]    Compiling phf_generator v0.13.1
[INFO] [stderr]    Compiling memoffset v0.9.1
[INFO] [stderr]     Checking tracing-core v0.1.36
[INFO] [stderr]    Compiling aws-lc-rs v1.16.1
[INFO] [stderr]    Compiling httparse v1.10.1
[INFO] [stderr]    Compiling string_cache_codegen v0.6.1
[INFO] [stderr]    Compiling phf_codegen v0.13.1
[INFO] [stderr]    Compiling phf_generator v0.11.3
[INFO] [stderr]     Checking precomputed-hash v0.1.1
[INFO] [stderr]     Checking tracing v0.1.44
[INFO] [stderr]    Compiling field-offset v0.3.6
[INFO] [stderr]    Compiling x11 v2.21.0
[INFO] [stderr]     Checking http-body v1.0.1
[INFO] [stderr]     Checking foreign-types-shared v0.1.1
[INFO] [stderr]     Checking fnv v1.0.7
[INFO] [stderr]     Checking try-lock v0.2.5
[INFO] [stderr]     Checking atomic-waker v1.1.2
[INFO] [stderr]     Checking tower-service v0.3.3
[INFO] [stderr]     Checking cpufeatures v0.2.17
[INFO] [stderr]     Checking openssl-probe v0.2.1
[INFO] [stderr]    Compiling openssl v0.10.76
[INFO] [stderr]     Checking want v0.3.1
[INFO] [stderr]     Checking foreign-types v0.3.2
[INFO] [stderr]     Checking phf v0.13.1
[INFO] [stderr]    Compiling num-traits v0.2.19
[INFO] [stderr]    Compiling gtk v0.18.2
[INFO] [stderr]     Checking simd-adler32 v0.3.8
[INFO] [stderr]     Checking utf-8 v0.7.6
[INFO] [stderr]    Compiling native-tls v0.2.18
[INFO] [stderr]    Compiling winnow v0.7.15
[INFO] [stderr]     Checking untrusted v0.9.0
[INFO] [stderr]    Compiling crc32fast v1.5.0
[INFO] [stderr]     Checking crypto-common v0.1.7
[INFO] [stderr]    Compiling zerocopy v0.8.42
[INFO] [stderr]     Checking block-buffer v0.10.4
[INFO] [stderr]     Checking inout v0.1.4
[INFO] [stderr]     Checking form_urlencoded v1.2.2
[INFO] [stderr]     Checking aho-corasick v1.1.4
[INFO] [stderr]    Compiling x11-dl v2.21.0
[INFO] [stderr]     Checking tendril v0.5.0
[INFO] [stderr]    Compiling rustls v0.23.37
[INFO] [stderr]     Checking utf8_iter v1.0.4
[INFO] [stderr]    Compiling web_atoms v0.2.3
[INFO] [stderr]    Compiling crossbeam-utils v0.8.21
[INFO] [stderr]    Compiling cmake v0.1.57
[INFO] [stderr]     Checking regex-syntax v0.8.10
[INFO] [stderr]    Compiling zmij v1.0.21
[INFO] [stderr]     Checking adler2 v2.0.1
[INFO] [stderr]    Compiling serde_spanned v1.0.4
[INFO] [stderr]    Compiling toml_datetime v0.7.5+spec-1.1.0
[INFO] [stderr]     Checking ipnet v2.12.0
[INFO] [stderr]    Compiling toml_writer v1.0.6+spec-1.1.0
[INFO] [stderr]     Checking bitflags v1.3.2
[INFO] [stderr]     Checking base64 v0.22.1
[INFO] [stderr]     Checking miniz_oxide v0.8.9
[INFO] [stderr]     Checking digest v0.10.7
[INFO] [stderr]     Checking cipher v0.4.4
[INFO] [stderr]     Checking universal-hash v0.5.1
[INFO] [stderr]    Compiling phf_codegen v0.11.3
[INFO] [stderr]    Compiling slotmap v1.1.1
[INFO] [stderr]     Checking sync_wrapper v1.0.2
[INFO] [stderr]    Compiling getrandom v0.4.2
[INFO] [stderr]     Checking utf8parse v0.2.2
[INFO] [stderr]    Compiling serde_json v1.0.149
[INFO] [stderr]     Checking tower-layer v0.3.3
[INFO] [stderr]     Checking dtoa v1.0.11
[INFO] [stderr]     Checking opaque-debug v0.3.1
[INFO] [stderr]     Checking anstyle-parse v0.2.7
[INFO] [stderr]     Checking polyval v0.6.2
[INFO] [stderr]     Checking flate2 v1.1.9
[INFO] [stderr]    Compiling selectors v0.26.0
[INFO] [stderr]    Compiling aws-lc-sys v0.38.0
[INFO] [stderr]    Compiling openssl-sys v0.9.112
[INFO] [stderr]    Compiling ring v0.17.14
[INFO] [stderr]     Checking dtoa-short v0.3.5
[INFO] [stderr]    Compiling toml_datetime v0.6.3
[INFO] [stderr]    Compiling serde_spanned v0.6.9
[INFO] [stderr]     Checking fdeflate v0.3.7
[INFO] [stderr]    Compiling toml_edit v0.20.2
[INFO] [stderr]    Compiling toml_edit v0.19.15
[INFO] [stderr]     Checking http-body-util v0.1.3
[INFO] [stderr]     Checking webpki-roots v1.0.6
[INFO] [stderr]     Checking colorchoice v1.0.5
[INFO] [stderr]     Checking byteorder-lite v0.1.0
[INFO] [stderr]     Checking base64ct v1.8.3
[INFO] [stderr]     Checking anstyle v1.0.14
[INFO] [stderr]     Checking weezl v0.1.12
[INFO] [stderr]     Checking anstyle-query v1.1.5
[INFO] [stderr]     Checking byteorder v1.5.0
[INFO] [stderr]     Checking pxfm v0.1.28
[INFO] [stderr]     Checking raw-window-handle v0.6.2
[INFO] [stderr]     Checking zune-core v0.5.1
[INFO] [stderr]     Checking quick-error v2.0.1
[INFO] [stderr]     Checking regex-automata v0.4.14
[INFO] [stderr]     Checking is_terminal_polyfill v1.70.2
[INFO] [stderr]    Compiling wry v0.46.3
[INFO] [stderr]     Checking iri-string v0.7.10
[INFO] [stderr]     Checking dpi v0.1.2
[INFO] [stderr]     Checking color_quant v1.1.0
[INFO] [stderr]     Checking option-ext v0.2.0
[INFO] [stderr]     Checking ryu v1.0.23
[INFO] [stderr]     Checking dirs-sys v0.4.1
[INFO] [stderr]     Checking gif v0.14.1
[INFO] [stderr]     Checking fxhash v0.2.1
[INFO] [stderr]     Checking anstream v0.6.21
[INFO] [stderr]     Checking zune-jpeg v0.5.13
[INFO] [stderr]     Checking image-webp v0.2.4
[INFO] [stderr]    Compiling toml_parser v1.0.9+spec-1.1.0
[INFO] [stderr]     Checking password-hash v0.5.0
[INFO] [stderr]    Compiling synstructure v0.13.2
[INFO] [stderr]     Checking crossbeam-channel v0.5.15
[INFO] [stderr]     Checking png v0.18.1
[INFO] [stderr]    Compiling toml v0.9.12+spec-1.1.0
[INFO] [stderr]     Checking regex v1.12.3
[INFO] [stderr]     Checking ghash v0.5.1
[INFO] [stderr]     Checking hmac v0.12.1
[INFO] [stderr]    Compiling proc-macro-crate v1.3.1
[INFO] [stderr]     Checking env_filter v1.0.0
[INFO] [stderr]     Checking sha2 v0.10.9
[INFO] [stderr]     Checking aes v0.8.4
[INFO] [stderr]    Compiling toml v0.8.2
[INFO] [stderr]    Compiling proc-macro-crate v2.0.2
[INFO] [stderr]     Checking ctr v0.9.2
[INFO] [stderr]     Checking aead v0.5.2
[INFO] [stderr]     Checking rustls-native-certs v0.8.3
[INFO] [stderr]     Checking servo_arc v0.4.3
[INFO] [stderr]     Checking encoding_rs v0.8.35
[INFO] [stderr]     Checking instant v0.1.13
[INFO] [stderr]     Checking grid v0.15.0
[INFO] [stderr]    Compiling embed-resource v3.0.6
[INFO] [stderr]     Checking bytemuck v1.25.0
[INFO] [stderr]     Checking mime v0.3.17
[INFO] [stderr]    Compiling system-deps v6.2.2
[INFO] [stderr]     Checking iana-time-zone v0.1.65
[INFO] [stderr]     Checking lazy_static v1.5.0
[INFO] [stderr]     Checking arrayvec v0.7.6
[INFO] [stderr]     Checking jiff v0.2.23
[INFO] [stderr]     Checking aes-gcm v0.10.3
[INFO] [stderr]     Checking pbkdf2 v0.12.2
[INFO] [stderr]     Checking uuid v1.23.1
[INFO] [stderr]     Checking dirs v5.0.1
[INFO] [stderr]     Checking taffy v0.7.7
[INFO] [stderr]     Checking moxcms v0.8.1
[INFO] [stderr]     Checking webpki-roots v0.26.11
[INFO] [stderr]     Checking urlencoding v2.1.3
[INFO] [stderr]     Checking ppv-lite86 v0.2.21
[INFO] [stderr]    Compiling amni-browse v0.7.0 (/opt/rustwide/workdir)
[INFO] [stdout] warning: unused imports: `PathBuf`, `Path`, `env`, and `fs`
[INFO] [stdout]  --> build.rs:1:11
[INFO] [stdout]   |
[INFO] [stdout] 1 | use std::{env, fs, path::{Path, PathBuf}};
[INFO] [stdout]   |           ^^^  ^^         ^^^^  ^^^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr]    Compiling futures-macro v0.3.32
[INFO] [stderr]    Compiling zerofrom-derive v0.1.6
[INFO] [stderr]    Compiling thiserror-impl v1.0.69
[INFO] [stderr]    Compiling yoke-derive v0.8.1
[INFO] [stderr]    Compiling zerovec-derive v0.11.2
[INFO] [stderr]    Compiling tokio-macros v2.6.1
[INFO] [stderr]    Compiling displaydoc v0.2.5
[INFO] [stderr]    Compiling glib-macros v0.18.5
[INFO] [stderr]    Compiling serde_derive v1.0.228
[INFO] [stderr]    Compiling glib-sys v0.18.1
[INFO] [stderr]    Compiling gobject-sys v0.18.0
[INFO] [stderr]    Compiling gio-sys v0.18.1
[INFO] [stderr]    Compiling gdk-sys v0.18.2
[INFO] [stderr]    Compiling gdk-pixbuf-sys v0.18.0
[INFO] [stderr]     Checking futures-util v0.3.32
[INFO] [stderr]    Compiling pango-sys v0.18.0
[INFO] [stderr]    Compiling cairo-sys-rs v0.18.2
[INFO] [stderr]    Compiling atk-sys v0.18.2
[INFO] [stderr]     Checking tokio v1.50.0
[INFO] [stderr]    Compiling gtk-sys v0.18.2
[INFO] [stderr]    Compiling soup3-sys v0.5.0
[INFO] [stderr]    Compiling javascriptcore-rs-sys v1.1.1
[INFO] [stderr]    Compiling gdkx11-sys v0.18.2
[INFO] [stderr]    Compiling webkit2gtk-sys v2.0.1
[INFO] [stderr]     Checking zerofrom v0.1.6
[INFO] [stderr]    Compiling openssl-macros v0.1.1
[INFO] [stderr]    Compiling gtk3-macros v0.18.2
[INFO] [stderr]     Checking yoke v0.8.1
[INFO] [stderr]    Compiling phf_macros v0.11.3
[INFO] [stderr]    Compiling dlopen2_derive v0.4.3
[INFO] [stderr]    Compiling cssparser-macros v0.6.1
[INFO] [stderr]     Checking zerotrie v0.2.3
[INFO] [stderr]     Checking zerovec v0.11.5
[INFO] [stderr]     Checking rand_chacha v0.3.1
[INFO] [stderr]    Compiling derive_more v0.99.20
[INFO] [stderr]     Checking dlopen2 v0.7.0
[INFO] [stderr]     Checking env_logger v0.11.9
[INFO] [stderr]     Checking phf v0.11.3
[INFO] [stderr]     Checking cssparser v0.34.0
[INFO] [stderr]     Checking tinystr v0.8.2
[INFO] [stderr]     Checking potential_utf v0.1.4
[INFO] [stderr]     Checking icu_collections v2.1.1
[INFO] [stderr]     Checking icu_locale_core v2.1.1
[INFO] [stderr]     Checking gdkwayland-sys v0.18.2
[INFO] [stderr]     Checking futures-executor v0.3.32
[INFO] [stderr]     Checking glib v0.18.5
[INFO] [stderr]     Checking image v0.25.10
[INFO] [stderr]     Checking string_cache v0.9.0
[INFO] [stderr]     Checking serde_urlencoded v0.7.1
[INFO] [stderr]     Checking chrono v0.4.44
[INFO] [stderr]     Checking icu_provider v2.1.1
[INFO] [stderr]     Checking icu_normalizer v2.1.1
[INFO] [stderr]     Checking icu_properties v2.1.2
[INFO] [stderr]     Checking markup5ever v0.38.0
[INFO] [stderr]     Checking xml5ever v0.38.0
[INFO] [stderr]     Checking html5ever v0.38.0
[INFO] [stderr]     Checking idna_adapter v1.2.1
[INFO] [stderr]     Checking tokio-util v0.7.18
[INFO] [stderr]     Checking idna v1.1.0
[INFO] [stderr]     Checking tower v0.5.3
[INFO] [stderr]     Checking tokio-native-tls v0.3.1
[INFO] [stderr]     Checking url v2.5.8
[INFO] [stderr]     Checking markup5ever_rcdom v0.38.0+unofficial
[INFO] [stderr]     Checking h2 v0.4.13
[INFO] [stderr]     Checking tower-http v0.6.8
[INFO] [stderr]     Checking hyper v1.9.0
[INFO] [stderr]     Checking hyper-util v0.1.20
[INFO] [stderr]     Checking cairo-rs v0.18.5
[INFO] [stderr]     Checking atk v0.18.2
[INFO] [stderr]     Checking javascriptcore-rs v1.1.2
[INFO] [stderr]     Checking hyper-tls v0.6.0
[INFO] [stderr]     Checking reqwest v0.12.28
[INFO] [stderr]     Checking rustls-webpki v0.103.9
[INFO] [stderr]     Checking tokio-rustls v0.26.4
[INFO] [stderr]     Checking hyper-rustls v0.27.7
[INFO] [stderr]     Checking gdk-pixbuf v0.18.5
[INFO] [stderr]     Checking pango v0.18.3
[INFO] [stderr]     Checking soup3 v0.5.0
[INFO] [stderr]     Checking gdk v0.18.2
[INFO] [stderr]     Checking gdkx11 v0.18.2
[INFO] [stderr]     Checking webkit2gtk v2.0.1
[INFO] [stderr]     Checking tao v0.30.8
[INFO] [stdout] warning: unused imports: `AudioInfo`, `AudioTrack`, and `PlaybackState`
[INFO] [stdout]  --> src/media/mod.rs:7:30
[INFO] [stdout]   |
[INFO] [stdout] 7 | pub use audio::{AudioEngine, AudioTrack, PlaybackState, AudioInfo};
[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: `VideoState` and `VideoTrack`
[INFO] [stdout]  --> src/media/mod.rs:8:30
[INFO] [stdout]   |
[INFO] [stdout] 8 | pub use video::{VideoEngine, VideoTrack, VideoState};
[INFO] [stdout]   |                              ^^^^^^^^^^  ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `engine::adblocker::AdBlocker`
[INFO] [stdout]  --> src/platform/webview.rs:8:150
[INFO] [stdout]   |
[INFO] [stdout] 8 | ...age, IpcMessage, IpcResponse}, ui::webview as spa, engine::adblocker::AdBlocker};
[INFO] [stdout]   |                                                       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `CspDirective`
[INFO] [stdout]  --> src/engine/pipeline.rs:4:36
[INFO] [stdout]   |
[INFO] [stdout] 4 | use crate::net::csp::{CspEnforcer, CspDirective};
[INFO] [stdout]   |                                    ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Instruction`
[INFO] [stdout]  --> src/engine/ir_executor.rs:5:22
[INFO] [stdout]   |
[INFO] [stdout] 5 | use super::amni_ir::{Instruction, Opcode, Operands, IrProgram};
[INFO] [stdout]   |                      ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Instruction` and `IrBuilder`
[INFO] [stdout]  --> src/engine/shunt_sandbox.rs:5:33
[INFO] [stdout]   |
[INFO] [stdout] 5 | use super::amni_ir::{IrProgram, IrBuilder, Instruction};
[INFO] [stdout]   |                                 ^^^^^^^^^  ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Arc` and `Mutex`
[INFO] [stdout]  --> src/engine/shunt_sandbox.rs:8:17
[INFO] [stdout]   |
[INFO] [stdout] 8 | use std::sync::{Arc, Mutex};
[INFO] [stdout]   |                 ^^^  ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `LayoutRect`
[INFO] [stdout]   --> src/engine/shunt_sandbox.rs:77:43
[INFO] [stdout]    |
[INFO] [stdout] 77 |         use super::layout::{LayoutEngine, LayoutRect};
[INFO] [stdout]    |                                           ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `JsEvalResult`
[INFO] [stdout]  --> src/engine/js_bridge.rs:1:28
[INFO] [stdout]   |
[INFO] [stdout] 1 | use super::js::{JsRuntime, JsEvalResult};
[INFO] [stdout]   |                            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Display`
[INFO] [stdout]  --> src/engine/inline_layout.rs:4:35
[INFO] [stdout]   |
[INFO] [stdout] 4 | use super::style::{ComputedStyle, Display, TextAlign};
[INFO] [stdout]   |                                   ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `markup5ever_rcdom::NodeData`
[INFO] [stdout]    --> src/engine/inline_layout.rs:203:9
[INFO] [stdout]     |
[INFO] [stdout] 203 |     use markup5ever_rcdom::NodeData;
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `AudioInfo`, `AudioTrack`, and `PlaybackState`
[INFO] [stdout]  --> src/media/mod.rs:7:30
[INFO] [stdout]   |
[INFO] [stdout] 7 | pub use audio::{AudioEngine, AudioTrack, PlaybackState, AudioInfo};
[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: `VideoState` and `VideoTrack`
[INFO] [stdout]  --> src/media/mod.rs:8:30
[INFO] [stdout]   |
[INFO] [stdout] 8 | pub use video::{VideoEngine, VideoTrack, VideoState};
[INFO] [stdout]   |                              ^^^^^^^^^^  ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `engine::adblocker::AdBlocker`
[INFO] [stdout]  --> src/platform/webview.rs:8:150
[INFO] [stdout]   |
[INFO] [stdout] 8 | ...age, IpcMessage, IpcResponse}, ui::webview as spa, engine::adblocker::AdBlocker};
[INFO] [stdout]   |                                                       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `CspDirective`
[INFO] [stdout]  --> src/engine/pipeline.rs:4:36
[INFO] [stdout]   |
[INFO] [stdout] 4 | use crate::net::csp::{CspEnforcer, CspDirective};
[INFO] [stdout]   |                                    ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Instruction`
[INFO] [stdout]  --> src/engine/ir_executor.rs:5:22
[INFO] [stdout]   |
[INFO] [stdout] 5 | use super::amni_ir::{Instruction, Opcode, Operands, IrProgram};
[INFO] [stdout]   |                      ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Instruction` and `IrBuilder`
[INFO] [stdout]  --> src/engine/shunt_sandbox.rs:5:33
[INFO] [stdout]   |
[INFO] [stdout] 5 | use super::amni_ir::{IrProgram, IrBuilder, Instruction};
[INFO] [stdout]   |                                 ^^^^^^^^^  ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Arc` and `Mutex`
[INFO] [stdout]  --> src/engine/shunt_sandbox.rs:8:17
[INFO] [stdout]   |
[INFO] [stdout] 8 | use std::sync::{Arc, Mutex};
[INFO] [stdout]   |                 ^^^  ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `LayoutRect`
[INFO] [stdout]   --> src/engine/shunt_sandbox.rs:77:43
[INFO] [stdout]    |
[INFO] [stdout] 77 |         use super::layout::{LayoutEngine, LayoutRect};
[INFO] [stdout]    |                                           ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `JsEvalResult`
[INFO] [stdout]  --> src/engine/js_bridge.rs:1:28
[INFO] [stdout]   |
[INFO] [stdout] 1 | use super::js::{JsRuntime, JsEvalResult};
[INFO] [stdout]   |                            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Display`
[INFO] [stdout]  --> src/engine/inline_layout.rs:4:35
[INFO] [stdout]   |
[INFO] [stdout] 4 | use super::style::{ComputedStyle, Display, TextAlign};
[INFO] [stdout]   |                                   ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `markup5ever_rcdom::NodeData`
[INFO] [stdout]    --> src/engine/inline_layout.rs:203:9
[INFO] [stdout]     |
[INFO] [stdout] 203 |     use markup5ever_rcdom::NodeData;
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `id`
[INFO] [stdout]    --> src/storage/downloads.rs:113:26
[INFO] [stdout]     |
[INFO] [stdout] 113 |     fn download_blocking(id: &str, url: &str, path: &PathBuf) {
[INFO] [stdout]     |                          ^^ help: if this is intentional, prefix it with an underscore: `_id`
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `id`
[INFO] [stdout]    --> src/storage/downloads.rs:113:26
[INFO] [stdout]     |
[INFO] [stdout] 113 |     fn download_blocking(id: &str, url: &str, path: &PathBuf) {
[INFO] [stdout]     |                          ^^ help: if this is intentional, prefix it with an underscore: `_id`
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `ch`
[INFO] [stdout]    --> src/engine/text.rs:103:30
[INFO] [stdout]     |
[INFO] [stdout] 103 |     pub fn char_width(&self, ch: char, font_size: f32) -> f32 {
[INFO] [stdout]     |                              ^^ help: if this is intentional, prefix it with an underscore: `_ch`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `texture_id`
[INFO] [stdout]    --> src/engine/ir_executor.rs:230:63
[INFO] [stdout]     |
[INFO] [stdout] 230 |                     if let Operands::PaintImage { x, y, w, h, texture_id } = &inst.operands {
[INFO] [stdout]     |                                                               ^^^^^^^^^^ help: try ignoring the field: `texture_id: _`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `encoded`
[INFO] [stdout]    --> src/engine/shunt_sandbox.rs:200:13
[INFO] [stdout]     |
[INFO] [stdout] 200 |         let encoded = base17::encode_bytes(html.as_bytes());
[INFO] [stdout]     |             ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_encoded`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `ch`
[INFO] [stdout]    --> src/engine/text.rs:103:30
[INFO] [stdout]     |
[INFO] [stdout] 103 |     pub fn char_width(&self, ch: char, font_size: f32) -> f32 {
[INFO] [stdout]     |                              ^^ help: if this is intentional, prefix it with an underscore: `_ch`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `texture_id`
[INFO] [stdout]    --> src/engine/ir_executor.rs:230:63
[INFO] [stdout]     |
[INFO] [stdout] 230 |                     if let Operands::PaintImage { x, y, w, h, texture_id } = &inst.operands {
[INFO] [stdout]     |                                                               ^^^^^^^^^^ help: try ignoring the field: `texture_id: _`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `encoded`
[INFO] [stdout]    --> src/engine/shunt_sandbox.rs:200:13
[INFO] [stdout]     |
[INFO] [stdout] 200 |         let encoded = base17::encode_bytes(html.as_bytes());
[INFO] [stdout]     |             ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_encoded`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `extraction_js` and `settings_json` are never used
[INFO] [stdout]   --> src/ui/reader.rs:36:12
[INFO] [stdout]    |
[INFO] [stdout] 33 | impl ReaderMode {
[INFO] [stdout]    | --------------- associated items in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 36 |     pub fn extraction_js() -> &'static str {
[INFO] [stdout]    |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 65 |     pub fn settings_json(&self) -> String {
[INFO] [stdout]    |            ^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: static `CUSTOM` is never used
[INFO] [stdout]   --> src/ui/emoji.rs:68:8
[INFO] [stdout]    |
[INFO] [stdout] 68 | static CUSTOM: LazyLock<std::sync::RwLock<HashMap<String, String>>> = LazyLock::new(|| std::sync::RwLock::new(HashMap::new()));
[INFO] [stdout]    |        ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `register` is never used
[INFO] [stdout]   --> src/ui/emoji.rs:76:8
[INFO] [stdout]    |
[INFO] [stdout] 76 | pub fn register(name: String, glyph: String) {
[INFO] [stdout]    |        ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `resolve` is never used
[INFO] [stdout]   --> src/ui/emoji.rs:79:8
[INFO] [stdout]    |
[INFO] [stdout] 79 | pub fn resolve(name: &str) -> String {
[INFO] [stdout]    |        ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `resolve_html` is never used
[INFO] [stdout]   --> src/ui/emoji.rs:83:8
[INFO] [stdout]    |
[INFO] [stdout] 83 | pub fn resolve_html(name: &str) -> String {
[INFO] [stdout]    |        ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `all_names` is never used
[INFO] [stdout]   --> src/ui/emoji.rs:87:8
[INFO] [stdout]    |
[INFO] [stdout] 87 | pub fn all_names() -> Vec<&'static str> {
[INFO] [stdout]    |        ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `query` is never read
[INFO] [stdout]    --> src/net/ipc.rs:100:18
[INFO] [stdout]     |
[INFO] [stdout] 100 |     FindInPage { query: String },
[INFO] [stdout]     |     ----------   ^^^^^
[INFO] [stdout]     |     |
[INFO] [stdout]     |     field in this variant
[INFO] [stdout]     |
[INFO] [stdout]     = note: `IpcMessage` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variants `SessionInfo`, `ReaderSettingsResp`, `PermissionsDefaults`, `DevToolsConsole`, `DevToolsNetwork`, and `DrmWebViewRequired` are never constructed
[INFO] [stdout]    --> src/net/ipc.rs:236:5
[INFO] [stdout]     |
[INFO] [stdout] 202 | pub enum IpcResponse {
[INFO] [stdout]     |          ----------- variants in this enum
[INFO] [stdout] ...
[INFO] [stdout] 236 |     SessionInfo { data: String },
[INFO] [stdout]     |     ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 246 |     ReaderSettingsResp { data: String },
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 250 |     PermissionsDefaults { data: String },
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 256 |     DevToolsConsole { data: String },
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^
[INFO] [stdout] 257 |     #[serde(rename = "devtools_network")]
[INFO] [stdout] 258 |     DevToolsNetwork { data: String },
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 282 |     DrmWebViewRequired { url: String, reason: String },
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `IpcResponse` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `cached_at_epoch` is never read
[INFO] [stdout]   --> src/net/dns.rs:11:9
[INFO] [stdout]    |
[INFO] [stdout]  6 | pub struct DnsRecord {
[INFO] [stdout]    |            --------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 11 |     pub cached_at_epoch: u64,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `DnsRecord` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `url` and `name` are never used
[INFO] [stdout]   --> src/net/dns.rs:22:12
[INFO] [stdout]    |
[INFO] [stdout] 21 | impl DohProvider {
[INFO] [stdout]    | ---------------- methods in this implementation
[INFO] [stdout] 22 |     pub fn url(&self) -> &str {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 30 |     pub fn name(&self) -> &str {
[INFO] [stdout]    |            ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `DnsAnswer` is never constructed
[INFO] [stdout]   --> src/net/dns.rs:43:12
[INFO] [stdout]    |
[INFO] [stdout] 43 | pub struct DnsAnswer {
[INFO] [stdout]    |            ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `DnsResponse` is never constructed
[INFO] [stdout]   --> src/net/dns.rs:52:12
[INFO] [stdout]    |
[INFO] [stdout] 52 | pub struct DnsResponse {
[INFO] [stdout]    |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `last_clean` is never read
[INFO] [stdout]   --> src/net/dns.rs:62:5
[INFO] [stdout]    |
[INFO] [stdout] 58 | pub struct DohResolver {
[INFO] [stdout]    |            ----------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 62 |     last_clean: Instant,
[INFO] [stdout]    |     ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `resolve`, `query_doh`, `clean_cache`, and `clear_cache` are never used
[INFO] [stdout]    --> src/net/dns.rs:68:12
[INFO] [stdout]     |
[INFO] [stdout]  64 | impl DohResolver {
[INFO] [stdout]     | ---------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout]  68 |     pub fn resolve(&mut self, hostname: &str) -> Option<Vec<String>> {
[INFO] [stdout]     |            ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  94 |     fn query_doh(&self, hostname: &str) -> Result<Vec<String>, String> {
[INFO] [stdout]     |        ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 117 |     fn clean_cache(&mut self) {
[INFO] [stdout]     |        ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 122 |     pub fn clear_cache(&mut self) { self.cache.clear(); }
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `block_3pc` and `default_auth` are never read
[INFO] [stdout]   --> src/net/http.rs:27:5
[INFO] [stdout]    |
[INFO] [stdout] 23 | pub struct AmniClient {
[INFO] [stdout]    |            ---------- fields in this struct
[INFO] [stdout] ...
[INFO] [stdout] 27 |     block_3pc: bool,
[INFO] [stdout]    |     ^^^^^^^^^
[INFO] [stdout] 28 |     user_agent: String,
[INFO] [stdout] 29 |     default_auth: Option<String>,
[INFO] [stdout]    |     ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `url` and `from_cache` are never read
[INFO] [stdout]   --> src/net/http.rs:35:9
[INFO] [stdout]    |
[INFO] [stdout] 31 | pub struct AmniResponse {
[INFO] [stdout]    |            ------------ fields in this struct
[INFO] [stdout] ...
[INFO] [stdout] 35 |     pub url: String,
[INFO] [stdout]    |         ^^^
[INFO] [stdout] 36 |     pub from_cache: bool,
[INFO] [stdout]    |         ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple methods are never used
[INFO] [stdout]    --> src/net/http.rs:88:18
[INFO] [stdout]     |
[INFO] [stdout]  38 | impl AmniClient {
[INFO] [stdout]     | --------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout]  88 |     pub async fn post(&self, url: &str, content_type: &str, body: Bytes) -> Result<AmniResponse, Box<dyn std::error::Error + Send +...
[INFO] [stdout]     |                  ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 126 |     pub fn clear_cache(&self) {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 129 |     pub fn cache_size(&self) -> usize {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 132 |     pub fn set_dnt(&mut self, enabled: bool) { self.dnt = enabled; }
[INFO] [stdout]     |            ^^^^^^^
[INFO] [stdout] 133 |     pub fn set_block_3pc(&mut self, enabled: bool) { self.block_3pc = enabled; }
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 165 |     pub async fn put(&self, url: &str, content_type: &str, body: Bytes) -> Result<AmniResponse, Box<dyn std::error::Error + Send + ...
[INFO] [stdout]     |                  ^^^
[INFO] [stdout] ...
[INFO] [stdout] 183 |     pub async fn delete(&self, url: &str) -> Result<AmniResponse, Box<dyn std::error::Error + Send + Sync>> {
[INFO] [stdout]     |                  ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 200 |     pub async fn patch(&self, url: &str, content_type: &str, body: Bytes) -> Result<AmniResponse, Box<dyn std::error::Error + Send ...
[INFO] [stdout]     |                  ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 218 |     pub async fn head(&self, url: &str) -> Result<AmniResponse, Box<dyn std::error::Error + Send + Sync>> {
[INFO] [stdout]     |                  ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 235 |     pub async fn options(&self, url: &str) -> Result<AmniResponse, Box<dyn std::error::Error + Send + Sync>> {
[INFO] [stdout]     |                  ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 255 |     pub fn request(&self, url: &str) -> AmniRequestBuilder {
[INFO] [stdout]     |            ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 278 |     pub fn set_bearer_token(&mut self, token: &str) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 283 |     pub fn set_basic_auth(&mut self, user: &str, pass: &str) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `AmniRequestBuilder` is never constructed
[INFO] [stdout]    --> src/net/http.rs:291:12
[INFO] [stdout]     |
[INFO] [stdout] 291 | pub struct AmniRequestBuilder<'a> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `method`, `header`, `body`, `timeout`, and `send` are never used
[INFO] [stdout]    --> src/net/http.rs:302:12
[INFO] [stdout]     |
[INFO] [stdout] 300 | impl<'a> AmniRequestBuilder<'a> {
[INFO] [stdout]     | ------------------------------- methods in this implementation
[INFO] [stdout] 301 |     /// Set the HTTP method (GET, POST, PUT, DELETE, PATCH, HEAD, OPTIONS).
[INFO] [stdout] 302 |     pub fn method(mut self, method: &str) -> Self {
[INFO] [stdout]     |            ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 308 |     pub fn header(mut self, key: &str, value: &str) -> Self {
[INFO] [stdout]     |            ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 314 |     pub fn body(mut self, data: Vec<u8>) -> Self {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 320 |     pub fn timeout(mut self, duration: Duration) -> Self {
[INFO] [stdout]     |            ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 326 |     pub async fn send(self) -> Result<AmniResponse, Box<dyn std::error::Error + Send + Sync>> {
[INFO] [stdout]     |                  ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `header`, `content_type`, `is_json`, `is_html`, `json`, and `is_ok` are never used
[INFO] [stdout]    --> src/net/http.rs:361:12
[INFO] [stdout]     |
[INFO] [stdout] 355 | impl AmniResponse {
[INFO] [stdout]     | ----------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 361 |     pub fn header(&self, name: &str) -> Option<&str> {
[INFO] [stdout]     |            ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 368 |     pub fn content_type(&self) -> Option<&str> {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 373 |     pub fn is_json(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 378 |     pub fn is_html(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 383 |     pub fn json<T: DeserializeOwned>(&self) -> Result<T, Box<dyn std::error::Error + Send + Sync>> {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 389 |     pub fn is_ok(&self) -> bool { self.status >= 200 && self.status < 300 }
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/net/cookies.rs:58:12
[INFO] [stdout]     |
[INFO] [stdout]  24 | impl CookieJar {
[INFO] [stdout]     | -------------- associated items in this implementation
[INFO] [stdout] ...
[INFO] [stdout]  58 |     pub fn clear_domain(&mut self, domain: &str) { self.cookies.remove(domain); }
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout]  59 |     pub fn clear_all(&mut self) { self.cookies.clear(); info!("All cookies cleared"); }
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout]  60 |     pub fn domain_count(&self) -> usize { self.cookies.len() }
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout]  61 |     pub fn total_count(&self) -> usize { self.cookies.values().map(|v| v.len()).sum() }
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout]  62 |     pub fn set_block_third_party(&mut self, block: bool) { self.block_third_party = block; }
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]  63 |     pub fn add_allow(&mut self, domain: String) { self.allow_list.push(domain); }
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout]  64 |     pub fn add_deny(&mut self, domain: String) { self.deny_list.push(domain); }
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  99 |     pub fn save(&self) -> String { serde_json::to_string(&self.cookies).unwrap_or_default() }
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] 100 |     pub fn load(data: &str, block_third_party: bool) -> Self {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: type alias `BoxErr` is never used
[INFO] [stdout]  --> src/net/websocket.rs:8:6
[INFO] [stdout]   |
[INFO] [stdout] 8 | type BoxErr = Box<dyn std::error::Error + Send + Sync>;
[INFO] [stdout]   |      ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `WebSocketState` is never used
[INFO] [stdout]   --> src/net/websocket.rs:10:10
[INFO] [stdout]    |
[INFO] [stdout] 10 | pub enum WebSocketState { Connecting, Open, Closing, Closed }
[INFO] [stdout]    |          ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `WebSocketFrame` is never constructed
[INFO] [stdout]   --> src/net/websocket.rs:12:12
[INFO] [stdout]    |
[INFO] [stdout] 12 | pub struct WebSocketFrame {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]   --> src/net/websocket.rs:18:15
[INFO] [stdout]    |
[INFO] [stdout] 17 | impl WebSocketFrame {
[INFO] [stdout]    | ------------------- associated items in this implementation
[INFO] [stdout] 18 |     pub const TEXT: u8 = 1;
[INFO] [stdout]    |               ^^^^
[INFO] [stdout] 19 |     pub const BINARY: u8 = 2;
[INFO] [stdout]    |               ^^^^^^
[INFO] [stdout] 20 |     pub const CLOSE: u8 = 8;
[INFO] [stdout]    |               ^^^^^
[INFO] [stdout] 21 |     pub const PING: u8 = 9;
[INFO] [stdout]    |               ^^^^
[INFO] [stdout] 22 |     pub const PONG: u8 = 10;
[INFO] [stdout]    |               ^^^^
[INFO] [stdout] 23 |     pub fn text(msg: &str) -> Self { Self { opcode: Self::TEXT, payload: msg.as_bytes().to_vec(), fin: true } }
[INFO] [stdout]    |            ^^^^
[INFO] [stdout] 24 |     pub fn binary(data: &[u8]) -> Self { Self { opcode: Self::BINARY, payload: data.to_vec(), fin: true } }
[INFO] [stdout]    |            ^^^^^^
[INFO] [stdout] 25 |     pub fn close() -> Self { Self { opcode: Self::CLOSE, payload: Vec::new(), fin: true } }
[INFO] [stdout]    |            ^^^^^
[INFO] [stdout] 26 |     pub fn ping() -> Self { Self { opcode: Self::PING, payload: Vec::new(), fin: true } }
[INFO] [stdout]    |            ^^^^
[INFO] [stdout] 27 |     pub fn pong(payload: Vec<u8>) -> Self { Self { opcode: Self::PONG, payload, fin: true } }
[INFO] [stdout]    |            ^^^^
[INFO] [stdout] 28 |     pub fn encode_masked(&self) -> Vec<u8> {
[INFO] [stdout]    |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 49 |     pub fn encode_unmasked(&self) -> Vec<u8> {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `decode_frame` is never used
[INFO] [stdout]   --> src/net/websocket.rs:67:14
[INFO] [stdout]    |
[INFO] [stdout] 67 | pub async fn decode_frame<R: AsyncReadExt + Unpin>(reader: &mut R) -> Result<WebSocketFrame, BoxErr> {
[INFO] [stdout]    |              ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `parse_ws_url` is never used
[INFO] [stdout]   --> src/net/websocket.rs:97:4
[INFO] [stdout]    |
[INFO] [stdout] 97 | fn parse_ws_url(url: &str) -> Result<(String, u16, String, bool), BoxErr> {
[INFO] [stdout]    |    ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `generate_ws_key` is never used
[INFO] [stdout]    --> src/net/websocket.rs:110:4
[INFO] [stdout]     |
[INFO] [stdout] 110 | fn generate_ws_key() -> String {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `WebSocket` is never constructed
[INFO] [stdout]    --> src/net/websocket.rs:114:12
[INFO] [stdout]     |
[INFO] [stdout] 114 | pub struct WebSocket {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `connect`, `send_text`, `send_binary`, `send_ping`, `close`, and `recv` are never used
[INFO] [stdout]    --> src/net/websocket.rs:121:18
[INFO] [stdout]     |
[INFO] [stdout] 120 | impl WebSocket {
[INFO] [stdout]     | -------------- associated items in this implementation
[INFO] [stdout] 121 |     pub async fn connect(url: &str) -> Result<Self, BoxErr> {
[INFO] [stdout]     |                  ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 201 |     pub async fn send_text(&self, msg: &str) -> Result<(), BoxErr> {
[INFO] [stdout]     |                  ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 205 |     pub async fn send_binary(&self, data: &[u8]) -> Result<(), BoxErr> {
[INFO] [stdout]     |                  ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 209 |     pub async fn send_ping(&self) -> Result<(), BoxErr> {
[INFO] [stdout]     |                  ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 213 |     pub async fn close(&mut self) -> Result<(), BoxErr> {
[INFO] [stdout]     |                  ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 219 |     pub async fn recv(&mut self) -> Option<WebSocketFrame> {
[INFO] [stdout]     |                  ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `WebSocketManager` is never constructed
[INFO] [stdout]    --> src/net/websocket.rs:223:12
[INFO] [stdout]     |
[INFO] [stdout] 223 | pub struct WebSocketManager {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/net/websocket.rs:227:12
[INFO] [stdout]     |
[INFO] [stdout] 226 | impl WebSocketManager {
[INFO] [stdout]     | --------------------- associated items in this implementation
[INFO] [stdout] 227 |     pub fn new() -> Self { Self { connections: HashMap::new() } }
[INFO] [stdout]     |            ^^^
[INFO] [stdout] 228 |     pub async fn create(&mut self, id: &str, url: &str) -> Result<(), BoxErr> {
[INFO] [stdout]     |                  ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 233 |     pub async fn close(&mut self, id: &str) -> Result<(), BoxErr> {
[INFO] [stdout]     |                  ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 240 |     pub async fn send(&self, id: &str, msg: &str) -> Result<(), BoxErr> {
[INFO] [stdout]     |                  ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 244 |     pub async fn recv(&mut self, id: &str) -> Option<WebSocketFrame> {
[INFO] [stdout]     |                  ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 248 |     pub fn state(&self, id: &str) -> Option<WebSocketState> {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 251 |     pub fn ids(&self) -> Vec<String> { self.connections.keys().cloned().collect() }
[INFO] [stdout]     |            ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `RequestType` is never used
[INFO] [stdout]  --> src/net/cors.rs:4:10
[INFO] [stdout]   |
[INFO] [stdout] 4 | pub enum RequestType { Simple, Preflight, Actual }
[INFO] [stdout]   |          ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `allowed_origins`, `allowed_methods`, `allowed_headers`, `max_age`, and `allow_credentials` are never read
[INFO] [stdout]   --> src/net/cors.rs:7:9
[INFO] [stdout]    |
[INFO] [stdout]  6 | pub struct CorsConfig {
[INFO] [stdout]    |            ---------- fields in this struct
[INFO] [stdout]  7 |     pub allowed_origins: Vec<String>,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^
[INFO] [stdout]  8 |     pub allowed_methods: Vec<String>,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^
[INFO] [stdout]  9 |     pub allowed_headers: Vec<String>,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^
[INFO] [stdout] 10 |     pub max_age: u64,
[INFO] [stdout]    |         ^^^^^^^
[INFO] [stdout] 11 |     pub allow_credentials: bool,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `CorsConfig` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `CorsResult` is never constructed
[INFO] [stdout]   --> src/net/cors.rs:25:12
[INFO] [stdout]    |
[INFO] [stdout] 25 | pub struct CorsResult {
[INFO] [stdout]    |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `is_simple_method` is never used
[INFO] [stdout]   --> src/net/cors.rs:29:8
[INFO] [stdout]    |
[INFO] [stdout] 29 | pub fn is_simple_method(method: &str) -> bool {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `is_simple_header` is never used
[INFO] [stdout]   --> src/net/cors.rs:32:8
[INFO] [stdout]    |
[INFO] [stdout] 32 | pub fn is_simple_header(name: &str) -> bool {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `is_simple_content_type` is never used
[INFO] [stdout]   --> src/net/cors.rs:36:8
[INFO] [stdout]    |
[INFO] [stdout] 36 | pub fn is_simple_content_type(value: &str) -> bool {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `classify_request` is never used
[INFO] [stdout]   --> src/net/cors.rs:41:8
[INFO] [stdout]    |
[INFO] [stdout] 41 | pub fn classify_request(method: &str, headers: &[(String, String)], origin: Option<&str>) -> RequestType {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `PreflightRequest` is never constructed
[INFO] [stdout]   --> src/net/cors.rs:55:12
[INFO] [stdout]    |
[INFO] [stdout] 55 | pub struct PreflightRequest {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `build_preflight_request` is never used
[INFO] [stdout]   --> src/net/cors.rs:60:8
[INFO] [stdout]    |
[INFO] [stdout] 60 | pub fn build_preflight_request(url: &str, method: &str, request_headers: &[(String, String)], origin: &str) -> PreflightRequest {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `validate_response` is never used
[INFO] [stdout]   --> src/net/cors.rs:74:8
[INFO] [stdout]    |
[INFO] [stdout] 74 | pub fn validate_response(origin: &str, response_headers: &[(String, String)]) -> CorsResult {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `check_method_allowed` is never used
[INFO] [stdout]   --> src/net/cors.rs:89:8
[INFO] [stdout]    |
[INFO] [stdout] 89 | pub fn check_method_allowed(method: &str, response_headers: &[(String, String)]) -> bool {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `check_headers_allowed` is never used
[INFO] [stdout]   --> src/net/cors.rs:98:8
[INFO] [stdout]    |
[INFO] [stdout] 98 | pub fn check_headers_allowed(request_headers: &[(String, String)], response_headers: &[(String, String)]) -> bool {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `allowed_methods`, `allowed_headers`, `inserted`, and `max_age` are never read
[INFO] [stdout]    --> src/net/cors.rs:112:5
[INFO] [stdout]     |
[INFO] [stdout] 111 | struct CorsEntry {
[INFO] [stdout]     |        --------- fields in this struct
[INFO] [stdout] 112 |     allowed_methods: Vec<String>,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^
[INFO] [stdout] 113 |     allowed_headers: Vec<String>,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^
[INFO] [stdout] 114 |     inserted: Instant,
[INFO] [stdout]     |     ^^^^^^^^
[INFO] [stdout] 115 |     max_age: Duration,
[INFO] [stdout]     |     ^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `CorsEntry` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `entries` is never read
[INFO] [stdout]    --> src/net/cors.rs:118:5
[INFO] [stdout]     |
[INFO] [stdout] 117 | pub struct CorsCache {
[INFO] [stdout]     |            --------- field in this struct
[INFO] [stdout] 118 |     entries: HashMap<(String, String), CorsEntry>,
[INFO] [stdout]     |     ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `check`, `store`, `evict_expired`, and `clear` are never used
[INFO] [stdout]    --> src/net/cors.rs:122:12
[INFO] [stdout]     |
[INFO] [stdout] 120 | impl CorsCache {
[INFO] [stdout]     | -------------- methods in this implementation
[INFO] [stdout] 121 |     pub fn new() -> Self { Self { entries: HashMap::new() } }
[INFO] [stdout] 122 |     pub fn check(&self, origin: &str, url: &str) -> Option<(&[String], &[String])> {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 128 |     pub fn store(&mut self, origin: &str, url: &str, response_headers: &[(String, String)]) {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 147 |     pub fn evict_expired(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 150 |     pub fn clear(&mut self) { self.entries.clear(); }
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `config` and `cache` are never read
[INFO] [stdout]    --> src/net/cors.rs:153:9
[INFO] [stdout]     |
[INFO] [stdout] 152 | pub struct CorsEnforcer {
[INFO] [stdout]     |            ------------ fields in this struct
[INFO] [stdout] 153 |     pub config: CorsConfig,
[INFO] [stdout]     |         ^^^^^^
[INFO] [stdout] 154 |     pub cache: CorsCache,
[INFO] [stdout]     |         ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `should_allow` is never used
[INFO] [stdout]    --> src/net/cors.rs:159:12
[INFO] [stdout]     |
[INFO] [stdout] 156 | impl CorsEnforcer {
[INFO] [stdout]     | ----------------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 159 |     pub fn should_allow(&self, origin: &str, url: &str, method: &str, headers: &[(String, String)]) -> CorsResult {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `allows_inline_script`, `allows_inline_style`, and `allows_eval` are never used
[INFO] [stdout]    --> src/net/csp.rs:130:12
[INFO] [stdout]     |
[INFO] [stdout] 115 | impl CspPolicy {
[INFO] [stdout]     | -------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 130 |     pub fn allows_inline_script(&self, nonce: Option<&str>) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 144 |     pub fn allows_inline_style(&self, nonce: Option<&str>) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 158 |     pub fn allows_eval(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `report` is never read
[INFO] [stdout]    --> src/net/csp.rs:183:9
[INFO] [stdout]     |
[INFO] [stdout] 181 | pub struct CspResult {
[INFO] [stdout]     |            --------- field in this struct
[INFO] [stdout] 182 |     pub allowed: bool,
[INFO] [stdout] 183 |     pub report: Option<CspViolation>,
[INFO] [stdout]     |         ^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `CspResult` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `directive`, `blocked_uri`, and `document_uri` are never read
[INFO] [stdout]    --> src/net/csp.rs:187:9
[INFO] [stdout]     |
[INFO] [stdout] 186 | pub struct CspViolation {
[INFO] [stdout]     |            ------------ fields in this struct
[INFO] [stdout] 187 |     pub directive: String,
[INFO] [stdout]     |         ^^^^^^^^^
[INFO] [stdout] 188 |     pub blocked_uri: String,
[INFO] [stdout]     |         ^^^^^^^^^^^
[INFO] [stdout] 189 |     pub document_uri: String,
[INFO] [stdout]     |         ^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `CspViolation` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `check_inline_script`, `check_inline_style`, and `check_eval` are never used
[INFO] [stdout]    --> src/net/csp.rs:240:12
[INFO] [stdout]     |
[INFO] [stdout] 196 | impl CspEnforcer {
[INFO] [stdout]     | ---------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 240 |     pub fn check_inline_script(&self, nonce: Option<&str>) -> CspResult {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 253 |     pub fn check_inline_style(&self, nonce: Option<&str>) -> CspResult {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 266 |     pub fn check_eval(&self) -> CspResult {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `USER_AGENT` is never used
[INFO] [stdout]  --> src/storage/config.rs:9:11
[INFO] [stdout]   |
[INFO] [stdout] 9 | pub const USER_AGENT: &str = "AmniBrowse/0.3 (Privacy-First; Amni-Scient)";
[INFO] [stdout]   |           ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `find_by_url`, `list_folder`, and `search` are never used
[INFO] [stdout]   --> src/storage/bookmarks.rs:78:12
[INFO] [stdout]    |
[INFO] [stdout] 35 | impl BookmarkManager {
[INFO] [stdout]    | -------------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 78 |     pub fn find_by_url(&self, url: &str) -> Option<&Bookmark> {
[INFO] [stdout]    |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 82 |     pub fn list_folder(&self, folder: Option<&str>) -> Vec<&Bookmark> {
[INFO] [stdout]    |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 89 |     pub fn search(&self, query: &str) -> Vec<&Bookmark> {
[INFO] [stdout]    |            ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `get_by_date`, `delete_by_url`, `clear_range`, and `to_json` are never used
[INFO] [stdout]   --> src/storage/history.rs:66:12
[INFO] [stdout]    |
[INFO] [stdout] 35 | impl HistoryManager {
[INFO] [stdout]    | ------------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 66 |     pub fn get_by_date(&self, date: NaiveDate) -> Vec<&HistoryEntry> {
[INFO] [stdout]    |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 80 |     pub fn delete_by_url(&mut self, url: &str) {
[INFO] [stdout]    |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 84 |     pub fn clear_range(&mut self, from: DateTime<Utc>, to: DateTime<Utc>) {
[INFO] [stdout]    |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 93 |     pub fn to_json(&self) -> String {
[INFO] [stdout]    |            ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `to_json` is never used
[INFO] [stdout]   --> src/storage/session.rs:74:12
[INFO] [stdout]    |
[INFO] [stdout] 38 | impl SessionManager {
[INFO] [stdout]    | ------------------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 74 |     pub fn to_json(&self) -> String {
[INFO] [stdout]    |            ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `progress_pct` is never used
[INFO] [stdout]   --> src/storage/downloads.rs:47:12
[INFO] [stdout]    |
[INFO] [stdout] 31 | impl DownloadItem {
[INFO] [stdout]    | ----------------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 47 |     pub fn progress_pct(&self) -> f64 {
[INFO] [stdout]    |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `search_credentials` is never used
[INFO] [stdout]    --> src/crypto/vault.rs:252:12
[INFO] [stdout]     |
[INFO] [stdout]  55 | impl PasswordManager {
[INFO] [stdout]     | -------------------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 252 |     pub fn search_credentials(&self, query: &str) -> Vec<CredentialSummary> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `list_addresses` and `decrypt_card_number` are never used
[INFO] [stdout]   --> src/crypto/autofill.rs:75:12
[INFO] [stdout]    |
[INFO] [stdout] 49 | impl AutofillManager {
[INFO] [stdout]    | -------------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 75 |     pub fn list_addresses(&self) -> &[AddressProfile] { &self.store.addresses }
[INFO] [stdout]    |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 92 |     pub fn decrypt_card_number(&self, card_id: &str) -> Result<String, String> {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `audio`, `video`, `codec_registry`, and `stream_manager` are never read
[INFO] [stdout]   --> src/media/mod.rs:11:9
[INFO] [stdout]    |
[INFO] [stdout] 10 | pub struct MediaManager {
[INFO] [stdout]    |            ------------ fields in this struct
[INFO] [stdout] 11 |     pub audio: AudioEngine,
[INFO] [stdout]    |         ^^^^^
[INFO] [stdout] 12 |     pub video: VideoEngine,
[INFO] [stdout]    |         ^^^^^
[INFO] [stdout] 13 |     pub codec_registry: codecs::CodecRegistry,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^
[INFO] [stdout] 14 |     pub stream_manager: stream::MediaStreamManager,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `stop_all`, `is_media_url`, and `capabilities_json` are never used
[INFO] [stdout]   --> src/media/mod.rs:27:12
[INFO] [stdout]    |
[INFO] [stdout] 17 | impl MediaManager {
[INFO] [stdout]    | ----------------- associated items in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 27 |     pub fn stop_all(&mut self) {
[INFO] [stdout]    |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 32 |     pub fn is_media_url(url: &str) -> bool {
[INFO] [stdout]    |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 39 |     pub fn capabilities_json() -> String {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variants `Stopped`, `Playing`, and `Paused` are never constructed
[INFO] [stdout]  --> src/media/audio.rs:4:26
[INFO] [stdout]   |
[INFO] [stdout] 4 | pub enum PlaybackState { Stopped, Playing, Paused }
[INFO] [stdout]   |          -------------   ^^^^^^^  ^^^^^^^  ^^^^^^
[INFO] [stdout]   |          |
[INFO] [stdout]   |          variants in this enum
[INFO] [stdout]   |
[INFO] [stdout]   = note: `PlaybackState` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple fields are never read
[INFO] [stdout]   --> src/media/audio.rs:8:9
[INFO] [stdout]    |
[INFO] [stdout]  7 | pub struct AudioTrack {
[INFO] [stdout]    |            ---------- fields in this struct
[INFO] [stdout]  8 |     pub id: String,
[INFO] [stdout]    |         ^^
[INFO] [stdout]  9 |     pub url: String,
[INFO] [stdout]    |         ^^^
[INFO] [stdout] 10 |     pub state: PlaybackState,
[INFO] [stdout]    |         ^^^^^
[INFO] [stdout] 11 |     pub duration_secs: f64,
[INFO] [stdout]    |         ^^^^^^^^^^^^^
[INFO] [stdout] 12 |     pub position_secs: f64,
[INFO] [stdout]    |         ^^^^^^^^^^^^^
[INFO] [stdout] 13 |     pub volume: f32,
[INFO] [stdout]    |         ^^^^^^
[INFO] [stdout] 14 |     pub muted: bool,
[INFO] [stdout]    |         ^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `AudioTrack` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `tracks`, `master_volume`, and `master_muted` are never read
[INFO] [stdout]   --> src/media/audio.rs:18:5
[INFO] [stdout]    |
[INFO] [stdout] 17 | pub struct AudioEngine {
[INFO] [stdout]    |            ----------- fields in this struct
[INFO] [stdout] 18 |     tracks: HashMap<String, AudioTrack>,
[INFO] [stdout]    |     ^^^^^^
[INFO] [stdout] 19 |     master_volume: f32,
[INFO] [stdout]    |     ^^^^^^^^^^^^^
[INFO] [stdout] 20 |     master_muted: bool,
[INFO] [stdout]    |     ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/media/audio.rs:49:12
[INFO] [stdout]     |
[INFO] [stdout]  25 | impl AudioEngine {
[INFO] [stdout]     | ---------------- associated items in this implementation
[INFO] [stdout] ...
[INFO] [stdout]  49 |     pub fn load_track(&mut self, url: &str) -> String {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  60 |     pub fn play(&mut self, id: &str) -> bool {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout]  68 |     pub fn pause(&mut self, id: &str) -> bool {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  75 |     pub fn stop(&mut self, id: &str) -> bool {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout]  83 |     pub fn seek(&mut self, id: &str, position_secs: f64) -> bool {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout]  90 |     pub fn set_volume(&mut self, id: &str, volume: f32) {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  96 |     pub fn set_muted(&mut self, id: &str, muted: bool) {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 100 |     pub fn set_master_volume(&mut self, vol: f32) { self.master_volume = vol.clamp(0.0, 1.0); }
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 101 |     pub fn set_master_muted(&mut self, muted: bool) { self.master_muted = muted; }
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] 102 |     pub fn master_volume(&self) -> f32 { self.master_volume }
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] 103 |     pub fn master_muted(&self) -> bool { self.master_muted }
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] 104 |
[INFO] [stdout] 105 |     pub fn get_track(&self, id: &str) -> Option<&AudioTrack> { self.tracks.get(id) }
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] 106 |     pub fn remove_track(&mut self, id: &str) { self.stop(id); self.tracks.remove(id); }
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] 107 |     pub fn active_tracks(&self) -> Vec<&AudioTrack> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 111 |     fn start_playback(&self, _id: &str) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 118 |     pub fn decode_audio_info(data: &[u8]) -> Option<AudioInfo> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 144 |     pub fn is_available() -> bool { cfg!(feature = "media-playback") }
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `AudioInfo` is never constructed
[INFO] [stdout]    --> src/media/audio.rs:148:12
[INFO] [stdout]     |
[INFO] [stdout] 148 | pub struct AudioInfo {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variants `Idle`, `Loading`, `Playing`, `Paused`, `Ended`, and `Error` are never constructed
[INFO] [stdout]  --> src/media/video.rs:4:23
[INFO] [stdout]   |
[INFO] [stdout] 4 | pub enum VideoState { Idle, Loading, Playing, Paused, Ended, Error(String) }
[INFO] [stdout]   |          ----------   ^^^^  ^^^^^^^  ^^^^^^^  ^^^^^^  ^^^^^  ^^^^^
[INFO] [stdout]   |          |
[INFO] [stdout]   |          variants in this enum
[INFO] [stdout]   |
[INFO] [stdout]   = note: `VideoState` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple fields are never read
[INFO] [stdout]   --> src/media/video.rs:8:9
[INFO] [stdout]    |
[INFO] [stdout]  7 | pub struct VideoTrack {
[INFO] [stdout]    |            ---------- fields in this struct
[INFO] [stdout]  8 |     pub id: String,
[INFO] [stdout]    |         ^^
[INFO] [stdout]  9 |     pub url: String,
[INFO] [stdout]    |         ^^^
[INFO] [stdout] 10 |     pub state: VideoState,
[INFO] [stdout]    |         ^^^^^
[INFO] [stdout] 11 |     pub width: u32,
[INFO] [stdout]    |         ^^^^^
[INFO] [stdout] 12 |     pub height: u32,
[INFO] [stdout]    |         ^^^^^^
[INFO] [stdout] 13 |     pub duration_secs: f64,
[INFO] [stdout]    |         ^^^^^^^^^^^^^
[INFO] [stdout] 14 |     pub position_secs: f64,
[INFO] [stdout]    |         ^^^^^^^^^^^^^
[INFO] [stdout] 15 |     pub volume: f32,
[INFO] [stdout]    |         ^^^^^^
[INFO] [stdout] 16 |     pub muted: bool,
[INFO] [stdout]    |         ^^^^^
[INFO] [stdout] 17 |     pub frame_data: Option<Vec<u8>>,
[INFO] [stdout]    |         ^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `VideoTrack` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `tracks` is never read
[INFO] [stdout]   --> src/media/video.rs:21:5
[INFO] [stdout]    |
[INFO] [stdout] 20 | pub struct VideoEngine {
[INFO] [stdout]    |            ----------- field in this struct
[INFO] [stdout] 21 |     tracks: HashMap<String, VideoTrack>,
[INFO] [stdout]    |     ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]   --> src/media/video.rs:27:12
[INFO] [stdout]    |
[INFO] [stdout] 24 | impl VideoEngine {
[INFO] [stdout]    | ---------------- associated items in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 27 |     pub fn load_track(&mut self, url: &str) -> String {
[INFO] [stdout]    |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 40 |     pub fn play(&mut self, id: &str) -> bool {
[INFO] [stdout]    |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 44 |     pub fn pause(&mut self, id: &str) -> bool {
[INFO] [stdout]    |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 48 |     pub fn stop(&mut self, id: &str) -> bool {
[INFO] [stdout]    |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 54 |     pub fn seek(&mut self, id: &str, pos: f64) -> bool {
[INFO] [stdout]    |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 60 |     pub fn set_volume(&mut self, id: &str, vol: f32) {
[INFO] [stdout]    |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 64 |     pub fn set_muted(&mut self, id: &str, muted: bool) {
[INFO] [stdout]    |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 68 |     pub fn get_track(&self, id: &str) -> Option<&VideoTrack> { self.tracks.get(id) }
[INFO] [stdout]    |            ^^^^^^^^^
[INFO] [stdout] 69 |
[INFO] [stdout] 70 |     pub fn remove_track(&mut self, id: &str) { self.tracks.remove(id); }
[INFO] [stdout]    |            ^^^^^^^^^^^^
[INFO] [stdout] 71 |
[INFO] [stdout] 72 |     pub fn extract_poster_frame(data: &[u8]) -> Option<(u32, u32, Vec<u8>)> {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 81 |     pub fn supported_containers() -> &'static [&'static str] {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 85 |     pub fn is_video_url(url: &str) -> bool {
[INFO] [stdout]    |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `id`, `codec_type`, `name`, `mime_type`, and `supported` are never read
[INFO] [stdout]   --> src/media/codecs.rs:6:9
[INFO] [stdout]    |
[INFO] [stdout]  5 | pub struct CodecProfile {
[INFO] [stdout]    |            ------------ fields in this struct
[INFO] [stdout]  6 |     pub id: String,
[INFO] [stdout]    |         ^^
[INFO] [stdout]  7 |     pub codec_type: CodecType,
[INFO] [stdout]    |         ^^^^^^^^^^
[INFO] [stdout]  8 |     pub name: String,
[INFO] [stdout]    |         ^^^^
[INFO] [stdout]  9 |     pub mime_type: String,
[INFO] [stdout]    |         ^^^^^^^^^
[INFO] [stdout] 10 |     pub supported: bool,
[INFO] [stdout]    |         ^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `CodecProfile` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `codecs` is never read
[INFO] [stdout]   --> src/media/codecs.rs:14:9
[INFO] [stdout]    |
[INFO] [stdout] 13 | pub struct CodecRegistry {
[INFO] [stdout]    |            ------------- field in this struct
[INFO] [stdout] 14 |     pub codecs: Vec<CodecProfile>,
[INFO] [stdout]    |         ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `is_type_supported`, `can_play_type`, `list_video_codecs`, and `list_audio_codecs` are never used
[INFO] [stdout]   --> src/media/codecs.rs:51:12
[INFO] [stdout]    |
[INFO] [stdout] 17 | impl CodecRegistry {
[INFO] [stdout]    | ------------------ methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 51 |     pub fn is_type_supported(&self, mime: &str) -> bool {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 57 |     pub fn can_play_type(&self, mime: &str) -> &str {
[INFO] [stdout]    |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 85 |     pub fn list_video_codecs(&self) -> Vec<&CodecProfile> {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 89 |     pub fn list_audio_codecs(&self) -> Vec<&CodecProfile> {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variants `Audio` and `Video` are never constructed
[INFO] [stdout]  --> src/media/stream.rs:4:22
[INFO] [stdout]   |
[INFO] [stdout] 4 | pub enum TrackKind { Audio, Video }
[INFO] [stdout]   |          ---------   ^^^^^  ^^^^^
[INFO] [stdout]   |          |
[INFO] [stdout]   |          variants in this enum
[INFO] [stdout]   |
[INFO] [stdout]   = note: `TrackKind` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variants `Live` and `Ended` are never constructed
[INFO] [stdout]  --> src/media/stream.rs:7:23
[INFO] [stdout]   |
[INFO] [stdout] 7 | pub enum TrackState { Live, Ended }
[INFO] [stdout]   |          ----------   ^^^^  ^^^^^
[INFO] [stdout]   |          |
[INFO] [stdout]   |          variants in this enum
[INFO] [stdout]   |
[INFO] [stdout]   = note: `TrackState` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `DeviceKind` is never used
[INFO] [stdout]   --> src/media/stream.rs:10:10
[INFO] [stdout]    |
[INFO] [stdout] 10 | pub enum DeviceKind { AudioInput, AudioOutput, VideoInput }
[INFO] [stdout]    |          ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `id`, `kind`, `label`, `enabled`, `muted`, and `ready_state` are never read
[INFO] [stdout]   --> src/media/stream.rs:14:9
[INFO] [stdout]    |
[INFO] [stdout] 13 | pub struct MediaStreamTrack {
[INFO] [stdout]    |            ---------------- fields in this struct
[INFO] [stdout] 14 |     pub id: String,
[INFO] [stdout]    |         ^^
[INFO] [stdout] 15 |     pub kind: TrackKind,
[INFO] [stdout]    |         ^^^^
[INFO] [stdout] 16 |     pub label: String,
[INFO] [stdout]    |         ^^^^^
[INFO] [stdout] 17 |     pub enabled: bool,
[INFO] [stdout]    |         ^^^^^^^
[INFO] [stdout] 18 |     pub muted: bool,
[INFO] [stdout]    |         ^^^^^
[INFO] [stdout] 19 |     pub ready_state: TrackState,
[INFO] [stdout]    |         ^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `MediaStreamTrack` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `id` and `tracks` are never read
[INFO] [stdout]   --> src/media/stream.rs:24:9
[INFO] [stdout]    |
[INFO] [stdout] 23 | pub struct MediaStream {
[INFO] [stdout]    |            ----------- fields in this struct
[INFO] [stdout] 24 |     pub id: String,
[INFO] [stdout]    |         ^^
[INFO] [stdout] 25 |     pub tracks: Vec<MediaStreamTrack>,
[INFO] [stdout]    |         ^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `MediaStream` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `MediaDeviceInfo` is never constructed
[INFO] [stdout]   --> src/media/stream.rs:29:12
[INFO] [stdout]    |
[INFO] [stdout] 29 | pub struct MediaDeviceInfo {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `streams` is never read
[INFO] [stdout]   --> src/media/stream.rs:37:9
[INFO] [stdout]    |
[INFO] [stdout] 36 | pub struct MediaStreamManager {
[INFO] [stdout]    |            ------------------ field in this struct
[INFO] [stdout] 37 |     pub streams: HashMap<String, MediaStream>,
[INFO] [stdout]    |         ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple methods are never used
[INFO] [stdout]   --> src/media/stream.rs:43:12
[INFO] [stdout]    |
[INFO] [stdout] 40 | impl MediaStreamManager {
[INFO] [stdout]    | ----------------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 43 |     pub fn create_stream(&mut self) -> String {
[INFO] [stdout]    |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 49 |     pub fn add_track(&mut self, stream_id: &str, kind: TrackKind, label: &str) -> Option<String> {
[INFO] [stdout]    |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 59 |     pub fn remove_track(&mut self, stream_id: &str, track_id: &str) -> bool {
[INFO] [stdout]    |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 67 |     pub fn get_stream(&self, id: &str) -> Option<&MediaStream> { self.streams.get(id) }
[INFO] [stdout]    |            ^^^^^^^^^^
[INFO] [stdout] 68 |
[INFO] [stdout] 69 |     pub fn get_user_media(&mut self, audio: bool, video: bool) -> Result<String, String> {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 77 |     pub fn get_display_media(&mut self) -> Result<String, String> {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 84 |     pub fn stop_stream(&mut self, id: &str) {
[INFO] [stdout]    |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 93 |     pub fn enumerate_devices(&self) -> Vec<MediaDeviceInfo> {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `MediaSourceState` is never used
[INFO] [stdout]  --> src/media/mse.rs:4:10
[INFO] [stdout]   |
[INFO] [stdout] 4 | pub enum MediaSourceState { Closed, Open, Ended }
[INFO] [stdout]   |          ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `AppendMode` is never used
[INFO] [stdout]  --> src/media/mse.rs:7:10
[INFO] [stdout]   |
[INFO] [stdout] 7 | pub enum AppendMode { Segments, Sequence }
[INFO] [stdout]   |          ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `SourceBuffer` is never constructed
[INFO] [stdout]   --> src/media/mse.rs:10:12
[INFO] [stdout]    |
[INFO] [stdout] 10 | pub struct SourceBuffer {
[INFO] [stdout]    |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `append_buffer`, `abort`, `remove`, `buffered_duration`, `finish_update`, and `merge_ranges` are never used
[INFO] [stdout]   --> src/media/mse.rs:21:12
[INFO] [stdout]    |
[INFO] [stdout] 20 | impl SourceBuffer {
[INFO] [stdout]    | ----------------- methods in this implementation
[INFO] [stdout] 21 |     pub fn append_buffer(&mut self, data: Vec<u8>) {
[INFO] [stdout]    |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 26 |     pub fn abort(&mut self) {
[INFO] [stdout]    |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 31 |     pub fn remove(&mut self, start: f64, end: f64) {
[INFO] [stdout]    |            ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 41 |     pub fn buffered_duration(&self) -> f64 {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 45 |     pub fn finish_update(&mut self) {
[INFO] [stdout]    |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 61 |     fn merge_ranges(&mut self) {
[INFO] [stdout]    |        ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `MediaSource` is never constructed
[INFO] [stdout]   --> src/media/mse.rs:75:12
[INFO] [stdout]    |
[INFO] [stdout] 75 | pub struct MediaSource {
[INFO] [stdout]    |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new`, `add_source_buffer`, `remove_source_buffer`, `end_of_stream`, `set_duration`, and `active_source_buffers` are never used
[INFO] [stdout]    --> src/media/mse.rs:83:12
[INFO] [stdout]     |
[INFO] [stdout]  82 | impl MediaSource {
[INFO] [stdout]     | ---------------- associated items in this implementation
[INFO] [stdout]  83 |     pub fn new() -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout]  92 |     pub fn add_source_buffer(&mut self, mime_type: &str) -> Result<usize, String> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 109 |     pub fn remove_source_buffer(&mut self, index: usize) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 118 |     pub fn end_of_stream(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 122 |     pub fn set_duration(&mut self, duration: f64) {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 126 |     pub fn active_source_buffers(&self) -> Vec<&SourceBuffer> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `MseManager` is never constructed
[INFO] [stdout]    --> src/media/mse.rs:131:12
[INFO] [stdout]     |
[INFO] [stdout] 131 | pub struct MseManager {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/media/mse.rs:137:12
[INFO] [stdout]     |
[INFO] [stdout] 136 | impl MseManager {
[INFO] [stdout]     | --------------- associated items in this implementation
[INFO] [stdout] 137 |     pub fn new() -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 141 |     pub fn create_source(&mut self) -> String {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 149 |     pub fn get_source(&self, id: &str) -> Option<&MediaSource> {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 153 |     pub fn get_source_mut(&mut self, id: &str) -> Option<&mut MediaSource> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 157 |     pub fn attach_to_video(&mut self, source_id: &str, video_id: &str) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 166 |     pub fn detach(&mut self, source_id: &str) {
[INFO] [stdout]     |            ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 173 |     pub fn is_type_supported(mime: &str) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `private_tab_count` and `has_private_tabs` are never used
[INFO] [stdout]    --> src/engine/tabs.rs:160:12
[INFO] [stdout]     |
[INFO] [stdout] 109 | impl TabManager {
[INFO] [stdout]     | --------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 160 |     pub fn private_tab_count(&self) -> usize { self.tabs.iter().filter(|t| t.is_private).count() }
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 161 |     pub fn has_private_tabs(&self) -> bool { self.tabs.iter().any(|t| t.is_private) }
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: static `BLOCKED_DOMAINS` is never used
[INFO] [stdout]  --> src/engine/adblocker.rs:6:8
[INFO] [stdout]   |
[INFO] [stdout] 6 | static BLOCKED_DOMAINS: LazyLock<HashSet<&'static str>> = LazyLock::new(|| {
[INFO] [stdout]   |        ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: static `AD_PATTERNS` is never used
[INFO] [stdout]   --> src/engine/adblocker.rs:71:8
[INFO] [stdout]    |
[INFO] [stdout] 71 | static AD_PATTERNS: LazyLock<Vec<Regex>> = LazyLock::new(|| {
[INFO] [stdout]    |        ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `tracker_blocking` is never read
[INFO] [stdout]   --> src/engine/adblocker.rs:98:9
[INFO] [stdout]    |
[INFO] [stdout] 96 | pub struct AdBlocker {
[INFO] [stdout]    |            --------- field in this struct
[INFO] [stdout] 97 |     pub enabled: bool,
[INFO] [stdout] 98 |     pub tracker_blocking: bool,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `AdBlocker` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `should_block` and `is_blocked_url` are never used
[INFO] [stdout]    --> src/engine/adblocker.rs:111:12
[INFO] [stdout]     |
[INFO] [stdout] 102 | impl AdBlocker {
[INFO] [stdout]     | -------------- associated items in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 111 |     pub fn should_block(&mut self, url: &str) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 196 |     pub fn is_blocked_url(url: &str) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `install_from_dir`, `copy_dir_recursive`, `get_content_scripts`, `url_matches_pattern`, and `list` are never used
[INFO] [stdout]    --> src/engine/extensions.rs:86:12
[INFO] [stdout]     |
[INFO] [stdout]  43 | impl ExtensionManager {
[INFO] [stdout]     | --------------------- associated items in this implementation
[INFO] [stdout] ...
[INFO] [stdout]  86 |     pub fn install_from_dir(&mut self, source: &PathBuf) -> Result<String, String> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 103 |     fn copy_dir_recursive(src: &PathBuf, dst: &PathBuf) -> std::io::Result<()> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 135 |     pub fn get_content_scripts(&self, url: &str) -> Vec<(String, Vec<String>, Vec<String>)> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 151 |     fn url_matches_pattern(url: &str, pattern: &str) -> bool {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 154 |     pub fn list(&self) -> &[Extension] { &self.registry.extensions }
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `get_permission`, `reset_all`, and `defaults_json` are never used
[INFO] [stdout]    --> src/engine/permissions.rs:81:12
[INFO] [stdout]     |
[INFO] [stdout]  50 | impl PermissionsManager {
[INFO] [stdout]     | ----------------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout]  81 |     pub fn get_permission(&self, url: &str, perm: &PermissionType) -> PermissionState {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 106 |     pub fn reset_all(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 113 |     pub fn defaults_json(&self) -> String {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `log_network`, `console_json`, and `network_json` are never used
[INFO] [stdout]   --> src/engine/devtools.rs:68:12
[INFO] [stdout]    |
[INFO] [stdout] 52 | impl DevToolsState {
[INFO] [stdout]    | ------------------ methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 68 |     pub fn log_network(&mut self, entry: NetworkEntry) {
[INFO] [stdout]    |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 74 |     pub fn console_json(&self) -> String {
[INFO] [stdout]    |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 78 |     pub fn network_json(&self) -> String {
[INFO] [stdout]    |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `DomNode` is never constructed
[INFO] [stdout]  --> src/engine/dom.rs:8:12
[INFO] [stdout]   |
[INFO] [stdout] 8 | pub struct DomNode<'a> {
[INFO] [stdout]   |            ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/engine/dom.rs:36:12
[INFO] [stdout]     |
[INFO] [stdout]  28 | impl AmniDom {
[INFO] [stdout]     | ------------ associated items in this implementation
[INFO] [stdout] ...
[INFO] [stdout]  36 |     pub fn root(&self) -> &Handle { &self.dom.document }
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 190 |     pub fn query_by_tag(&self, tag: &str) -> Vec<Handle> {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 195 |     fn find_by_tag(&self, handle: &Handle, tag: &str, results: &mut Vec<Handle>) {
[INFO] [stdout]     |        ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 201 |     pub fn query_by_id(&self, id: &str) -> Option<Handle> {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 204 |     fn find_by_id(&self, handle: &Handle, id: &str) -> Option<Handle> {
[INFO] [stdout]     |        ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 211 |     pub fn query_selector(&self, selector: &str) -> Option<Handle> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 214 |     pub fn query_selector_all(&self, selector: &str) -> Vec<Handle> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 231 |     pub fn query_by_class(&self, class: &str) -> Vec<Handle> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 236 |     pub fn query_by_attr(&self, attr: &str, value: &str) -> Vec<Handle> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 241 |     fn find_first_simple(&self, handle: &Handle, sel: &str) -> Option<Handle> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 248 |     fn find_all_simple(&self, handle: &Handle, sel: &str, results: &mut Vec<Handle>) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 252 |     fn matches_simple(handle: &Handle, sel: &str) -> bool {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 286 |     fn find_by_class(&self, handle: &Handle, class: &str, results: &mut Vec<Handle>) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 294 |     fn find_by_attr_val(&self, handle: &Handle, attr: &str, value: &str, results: &mut Vec<Handle>) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `TextInfo` is never constructed
[INFO] [stdout]  --> src/engine/layout.rs:6:12
[INFO] [stdout]   |
[INFO] [stdout] 6 | pub struct TextInfo {
[INFO] [stdout]   |            ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `LayoutEngine` is never constructed
[INFO] [stdout]   --> src/engine/layout.rs:11:12
[INFO] [stdout]    |
[INFO] [stdout] 11 | pub struct LayoutEngine {
[INFO] [stdout]    |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `x`, `y`, `w`, and `h` are never read
[INFO] [stdout]   --> src/engine/layout.rs:19:9
[INFO] [stdout]    |
[INFO] [stdout] 18 | pub struct LayoutRect {
[INFO] [stdout]    |            ---------- fields in this struct
[INFO] [stdout] 19 |     pub x: f32,
[INFO] [stdout]    |         ^
[INFO] [stdout] 20 |     pub y: f32,
[INFO] [stdout]    |         ^
[INFO] [stdout] 21 |     pub w: f32,
[INFO] [stdout]    |         ^
[INFO] [stdout] 22 |     pub h: f32,
[INFO] [stdout]    |         ^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `LayoutRect` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/engine/layout.rs:25:12
[INFO] [stdout]     |
[INFO] [stdout]  24 | impl LayoutEngine {
[INFO] [stdout]     | ----------------- associated items in this implementation
[INFO] [stdout]  25 |     pub fn new() -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout]  28 |     pub fn add_node(&mut self, id: usize, style: &ComputedStyle, children: &[usize]) -> Option<NodeId> {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  35 |     pub fn add_leaf(&mut self, id: usize, style: &ComputedStyle) -> Option<NodeId> {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  41 |     pub fn add_leaf_with_text(&mut self, id: usize, style: &ComputedStyle, text: TextInfo) -> Option<NodeId> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  48 |     pub fn compute(&mut self, root_id: usize, viewport_w: f32, viewport_h: f32) {
[INFO] [stdout]     |            ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  73 |     fn collect_results(&mut self, id: usize) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  80 |     pub fn collect_all(&mut self, ids: &[usize]) {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  83 |     pub fn get_layout(&self, id: usize) -> Option<&LayoutRect> { self.results.get(&id) }
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout]  84 |     pub fn clear(&mut self) { self.tree.clear(); self.nodes.clear(); self.results.clear(); }
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout]  85 |     fn to_taffy_style(cs: &ComputedStyle) -> Style {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 135 |     fn dim_to_taffy(d: &super::style::Dimension) -> taffy::Dimension {
[INFO] [stdout]     |        ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `StyleSheet` is never constructed
[INFO] [stdout]  --> src/engine/style.rs:4:12
[INFO] [stdout]   |
[INFO] [stdout] 4 | pub struct StyleSheet {
[INFO] [stdout]   |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `StyleRule` is never constructed
[INFO] [stdout]  --> src/engine/style.rs:8:12
[INFO] [stdout]   |
[INFO] [stdout] 8 | pub struct StyleRule {
[INFO] [stdout]   |            ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `Declaration` is never constructed
[INFO] [stdout]   --> src/engine/style.rs:13:12
[INFO] [stdout]    |
[INFO] [stdout] 13 | pub struct Declaration {
[INFO] [stdout]    |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ComputedStyle` is never constructed
[INFO] [stdout]   --> src/engine/style.rs:19:12
[INFO] [stdout]    |
[INFO] [stdout] 19 | pub struct ComputedStyle {
[INFO] [stdout]    |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `Display` is never used
[INFO] [stdout]   --> src/engine/style.rs:87:10
[INFO] [stdout]    |
[INFO] [stdout] 87 | pub enum Display { #[default] Block, Inline, Flex, Grid, InlineBlock, InlineFlex, None, Contents }
[INFO] [stdout]    |          ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `Position` is never used
[INFO] [stdout]   --> src/engine/style.rs:89:10
[INFO] [stdout]    |
[INFO] [stdout] 89 | pub enum Position { #[default] Static, Relative, Absolute, Fixed, Sticky }
[INFO] [stdout]    |          ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `Dimension` is never constructed
[INFO] [stdout]   --> src/engine/style.rs:91:12
[INFO] [stdout]    |
[INFO] [stdout] 91 | pub struct Dimension { pub value: f32, pub unit: DimUnit }
[INFO] [stdout]    |            ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `DimUnit` is never used
[INFO] [stdout]   --> src/engine/style.rs:93:10
[INFO] [stdout]    |
[INFO] [stdout] 93 | pub enum DimUnit { #[default] Auto, Px, Pct, Em, Rem, Vh, Vw }
[INFO] [stdout]    |          ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `Edges` is never constructed
[INFO] [stdout]   --> src/engine/style.rs:95:12
[INFO] [stdout]    |
[INFO] [stdout] 95 | pub struct Edges { pub top: f32, pub right: f32, pub bottom: f32, pub left: f32 }
[INFO] [stdout]    |            ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `Color` is never constructed
[INFO] [stdout]   --> src/engine/style.rs:97:12
[INFO] [stdout]    |
[INFO] [stdout] 97 | pub struct Color { pub r: u8, pub g: u8, pub b: u8, pub a: f32 }
[INFO] [stdout]    |            ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `TextAlign` is never used
[INFO] [stdout]   --> src/engine/style.rs:99:10
[INFO] [stdout]    |
[INFO] [stdout] 99 | pub enum TextAlign { #[default] Left, Center, Right, Justify }
[INFO] [stdout]    |          ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `Overflow` is never used
[INFO] [stdout]    --> src/engine/style.rs:101:10
[INFO] [stdout]     |
[INFO] [stdout] 101 | pub enum Overflow { #[default] Visible, Hidden, Scroll, Auto }
[INFO] [stdout]     |          ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `FlexDir` is never used
[INFO] [stdout]    --> src/engine/style.rs:103:10
[INFO] [stdout]     |
[INFO] [stdout] 103 | pub enum FlexDir { #[default] Row, Column, RowReverse, ColumnReverse }
[INFO] [stdout]     |          ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `BorderStyle` is never used
[INFO] [stdout]    --> src/engine/style.rs:105:10
[INFO] [stdout]     |
[INFO] [stdout] 105 | pub enum BorderStyle { #[default] None, Solid, Dashed, Dotted, Double, Groove, Ridge, Inset, Outset }
[INFO] [stdout]     |          ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `TextDecoration` is never used
[INFO] [stdout]    --> src/engine/style.rs:107:10
[INFO] [stdout]     |
[INFO] [stdout] 107 | pub enum TextDecoration { #[default] None, Underline, Overline, LineThrough }
[INFO] [stdout]     |          ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `TextTransform` is never used
[INFO] [stdout]    --> src/engine/style.rs:109:10
[INFO] [stdout]     |
[INFO] [stdout] 109 | pub enum TextTransform { #[default] None, Uppercase, Lowercase, Capitalize }
[INFO] [stdout]     |          ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `WhiteSpace` is never used
[INFO] [stdout]    --> src/engine/style.rs:111:10
[INFO] [stdout]     |
[INFO] [stdout] 111 | pub enum WhiteSpace { #[default] Normal, NoWrap, Pre, PreWrap, PreLine }
[INFO] [stdout]     |          ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `WordBreak` is never used
[INFO] [stdout]    --> src/engine/style.rs:113:10
[INFO] [stdout]     |
[INFO] [stdout] 113 | pub enum WordBreak { #[default] Normal, BreakAll, KeepAll }
[INFO] [stdout]     |          ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `Visibility` is never used
[INFO] [stdout]    --> src/engine/style.rs:115:10
[INFO] [stdout]     |
[INFO] [stdout] 115 | pub enum Visibility { #[default] Visible, Hidden, Collapse }
[INFO] [stdout]     |          ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `VerticalAlign` is never used
[INFO] [stdout]    --> src/engine/style.rs:117:10
[INFO] [stdout]     |
[INFO] [stdout] 117 | pub enum VerticalAlign { #[default] Baseline, Top, Middle, Bottom, TextTop, TextBottom }
[INFO] [stdout]     |          ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `FlexWrap` is never used
[INFO] [stdout]    --> src/engine/style.rs:119:10
[INFO] [stdout]     |
[INFO] [stdout] 119 | pub enum FlexWrap { #[default] NoWrap, Wrap, WrapReverse }
[INFO] [stdout]     |          ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `AlignItems` is never used
[INFO] [stdout]    --> src/engine/style.rs:121:10
[INFO] [stdout]     |
[INFO] [stdout] 121 | pub enum AlignItems { #[default] Stretch, FlexStart, FlexEnd, Center, Baseline }
[INFO] [stdout]     |          ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `JustifyContent` is never used
[INFO] [stdout]    --> src/engine/style.rs:123:10
[INFO] [stdout]     |
[INFO] [stdout] 123 | pub enum JustifyContent { #[default] FlexStart, FlexEnd, Center, SpaceBetween, SpaceAround, SpaceEvenly }
[INFO] [stdout]     |          ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `AlignContent` is never used
[INFO] [stdout]    --> src/engine/style.rs:125:10
[INFO] [stdout]     |
[INFO] [stdout] 125 | pub enum AlignContent { #[default] Stretch, FlexStart, FlexEnd, Center, SpaceBetween, SpaceAround }
[INFO] [stdout]     |          ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated functions `parse`, `parse_rule`, and `parse_declaration` are never used
[INFO] [stdout]    --> src/engine/style.rs:127:12
[INFO] [stdout]     |
[INFO] [stdout] 126 | impl StyleSheet {
[INFO] [stdout]     | --------------- associated functions in this implementation
[INFO] [stdout] 127 |     pub fn parse(css: &str) -> Self {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 137 |     fn parse_rule(parser: &mut Parser) -> Result<StyleRule, ()> {
[INFO] [stdout]     |        ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 165 |     fn parse_declaration(parser: &mut Parser) -> Result<Declaration, ()> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/engine/style.rs:204:12
[INFO] [stdout]     |
[INFO] [stdout] 203 | impl ComputedStyle {
[INFO] [stdout]     | ------------------ associated items in this implementation
[INFO] [stdout] 204 |     pub fn apply_declarations(&mut self, decls: &[Declaration]) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 458 |     fn parse_color(s: &str) -> Color {
[INFO] [stdout]     |        ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 469 |     fn parse_color_one(s: &str) -> Color {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 499 |     fn parse_named_color(s: &str) -> Option<Color> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 552 |     fn parse_px(s: &str, default: f32) -> f32 {
[INFO] [stdout]     |        ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 556 |     fn parse_dim(s: &str) -> Dimension {
[INFO] [stdout]     |        ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 567 |     fn parse_edges(s: &str) -> (f32, f32, f32, f32) {
[INFO] [stdout]     |        ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 579 |     fn parse_border_style(s: &str) -> BorderStyle {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `image_cache`, `cors`, `csp`, and `canvas_registry` are never read
[INFO] [stdout]   --> src/engine/pipeline.rs:18:9
[INFO] [stdout]    |
[INFO] [stdout] 15 | pub struct RenderPipeline {
[INFO] [stdout]    |            -------------- fields in this struct
[INFO] [stdout] ...
[INFO] [stdout] 18 |     pub image_cache: ImageCache,
[INFO] [stdout]    |         ^^^^^^^^^^^
[INFO] [stdout] 19 |     pub cors: CorsEnforcer,
[INFO] [stdout]    |         ^^^^
[INFO] [stdout] 20 |     pub csp: Option<CspEnforcer>,
[INFO] [stdout]    |         ^^^
[INFO] [stdout] 21 |     pub canvas_registry: HashMap<usize, crate::engine::canvas::Canvas2D>,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `css_sources` is never read
[INFO] [stdout]   --> src/engine/pipeline.rs:28:9
[INFO] [stdout]    |
[INFO] [stdout] 23 | pub struct PageResult {
[INFO] [stdout]    |            ---------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 28 |     pub css_sources: Vec<String>,
[INFO] [stdout]    |         ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `LayoutResult` is never constructed
[INFO] [stdout]   --> src/engine/pipeline.rs:41:12
[INFO] [stdout]    |
[INFO] [stdout] 41 | pub struct LayoutResult {
[INFO] [stdout]    |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/engine/pipeline.rs:136:12
[INFO] [stdout]     |
[INFO] [stdout]  47 | impl RenderPipeline {
[INFO] [stdout]     | ------------------- associated items in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 136 |     pub fn parse_and_layout(html: &str, css_sources: &[&str], vw: f32, vh: f32) -> LayoutResult {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 153 |     fn build_tree(handle: &Handle, sheets: &[StyleSheet], engine: &mut LayoutEngine, styles: &mut HashMap<usize, ComputedStyle>, co...
[INFO] [stdout]     |        ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 207 |     fn apply_tag_font_defaults(tag: &str, cs: &mut ComputedStyle) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 219 |     fn selector_matches(selectors: &[String], tag: &str, id: &str, classes: &[&str]) -> bool {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 232 |     pub fn render_to_semantic_html(html: &str) -> String {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 237 |     pub fn extract_page_meta(html: &str) -> PageSummary {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 247 |     pub async fn execute_fetch_requests(&self, requests: Vec<crate::engine::js_bridge::FetchRequest>) -> Vec<(u32, u16, HashMap<Str...
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 309 |     pub async fn fetch_full_layout(&self, url: &str, vw: f32, vh: f32) -> Result<(PageResult, LayoutResult), String> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 316 |     pub fn render_to_pixels(&mut self, html: &str, css_sources: &[&str], vw: f32, vh: f32) -> RenderedPage {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 350 |     pub async fn fetch_and_render(&mut self, url: &str, vw: f32, vh: f32) -> Result<(PageResult, RenderedPage), String> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `RenderedPage` is never constructed
[INFO] [stdout]    --> src/engine/pipeline.rs:374:12
[INFO] [stdout]     |
[INFO] [stdout] 374 | pub struct RenderedPage {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `event_dispatcher`, `focus_manager`, `form_state`, `js_bridge`, and `current_layouts` are never read
[INFO] [stdout]    --> src/engine/pipeline.rs:384:9
[INFO] [stdout]     |
[INFO] [stdout] 383 | pub struct PageInteractor {
[INFO] [stdout]     |            -------------- fields in this struct
[INFO] [stdout] 384 |     pub event_dispatcher: EventDispatcher,
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^
[INFO] [stdout] 385 |     pub focus_manager: FocusManager,
[INFO] [stdout]     |         ^^^^^^^^^^^^^
[INFO] [stdout] 386 |     pub form_state: FormState,
[INFO] [stdout]     |         ^^^^^^^^^^
[INFO] [stdout] 387 |     pub js_bridge: crate::engine::js_bridge::JsDomBridge,
[INFO] [stdout]     |         ^^^^^^^^^
[INFO] [stdout] 388 |     pub current_layouts: HashMap<usize, LayoutRect>,
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple methods are never used
[INFO] [stdout]    --> src/engine/pipeline.rs:400:12
[INFO] [stdout]     |
[INFO] [stdout] 390 | impl PageInteractor {
[INFO] [stdout]     | ------------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 400 |     pub fn dispatch_click(&mut self, x: f32, y: f32) -> Option<usize> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 406 |     pub fn dispatch_key(&mut self, key: &str, code: u32, shift: bool, ctrl: bool, alt: bool) {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 414 |     pub fn focus_node(&mut self, node_id: usize) {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 417 |     pub fn tab_focus_next(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 420 |     pub fn submit_form(&self, form_id: &str) -> HashMap<String, String> {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 423 |     pub fn set_page_origin(&mut self, url: &str) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 429 |     pub fn drain_js_fetches(&mut self) -> Vec<crate::engine::js_bridge::FetchRequest> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `extract_scripts` is never used
[INFO] [stdout]    --> src/engine/pipeline.rs:434:8
[INFO] [stdout]     |
[INFO] [stdout] 434 | pub fn extract_scripts(html: &str) -> Vec<String> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `extract_external_script_urls` is never used
[INFO] [stdout]    --> src/engine/pipeline.rs:441:8
[INFO] [stdout]     |
[INFO] [stdout] 441 | pub fn extract_external_script_urls(html: &str) -> Vec<String> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `collect_external_scripts` is never used
[INFO] [stdout]    --> src/engine/pipeline.rs:448:4
[INFO] [stdout]     |
[INFO] [stdout] 448 | fn collect_external_scripts(handle: &Handle, out: &mut Vec<String>) {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `collect_inline_scripts` is never used
[INFO] [stdout]    --> src/engine/pipeline.rs:460:4
[INFO] [stdout]     |
[INFO] [stdout] 460 | fn collect_inline_scripts(handle: &Handle, out: &mut Vec<String>) {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `PaintCommand` is never used
[INFO] [stdout]  --> src/engine/paint.rs:7:10
[INFO] [stdout]   |
[INFO] [stdout] 7 | pub enum PaintCommand {
[INFO] [stdout]   |          ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `PaintRect` is never constructed
[INFO] [stdout]   --> src/engine/paint.rs:21:12
[INFO] [stdout]    |
[INFO] [stdout] 21 | pub struct PaintRect {
[INFO] [stdout]    |            ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `DisplayList` is never constructed
[INFO] [stdout]   --> src/engine/paint.rs:35:12
[INFO] [stdout]    |
[INFO] [stdout] 35 | pub struct DisplayList {
[INFO] [stdout]    |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new` and `push` are never used
[INFO] [stdout]   --> src/engine/paint.rs:42:12
[INFO] [stdout]    |
[INFO] [stdout] 41 | impl DisplayList {
[INFO] [stdout]    | ---------------- associated items in this implementation
[INFO] [stdout] 42 |     pub fn new(w: u32, h: u32) -> Self { Self { commands: Vec::new(), width: w, height: h } }
[INFO] [stdout]    |            ^^^
[INFO] [stdout] 43 |     pub fn push(&mut self, cmd: PaintCommand) { self.commands.push(cmd); }
[INFO] [stdout]    |            ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `RenderNode` is never constructed
[INFO] [stdout]   --> src/engine/paint.rs:46:12
[INFO] [stdout]    |
[INFO] [stdout] 46 | pub struct RenderNode {
[INFO] [stdout]    |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `RenderTree` is never constructed
[INFO] [stdout]   --> src/engine/paint.rs:56:12
[INFO] [stdout]    |
[INFO] [stdout] 56 | pub struct RenderTree {
[INFO] [stdout]    |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated functions `new`, `build_from_dom`, and `walk` are never used
[INFO] [stdout]   --> src/engine/paint.rs:62:12
[INFO] [stdout]    |
[INFO] [stdout] 61 | impl RenderTree {
[INFO] [stdout]    | --------------- associated functions in this implementation
[INFO] [stdout] 62 |     pub fn new() -> Self { Self { nodes: HashMap::new(), root_id: 0 } }
[INFO] [stdout]    |            ^^^
[INFO] [stdout] 63 |
[INFO] [stdout] 64 |     pub fn build_from_dom(handle: &Handle, sheets: &[super::style::StyleSheet], counter: &mut usize) -> Self {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 71 |     fn walk(handle: &Handle, sheets: &[super::style::StyleSheet], counter: &mut usize, tree: &mut RenderTree, hidden: bool, parent_c...
[INFO] [stdout]    |        ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `is_non_renderable_tag` is never used
[INFO] [stdout]    --> src/engine/paint.rs:127:4
[INFO] [stdout]     |
[INFO] [stdout] 127 | fn is_non_renderable_tag(tag: &str) -> bool {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `apply_tag_defaults` is never used
[INFO] [stdout]    --> src/engine/paint.rs:131:4
[INFO] [stdout]     |
[INFO] [stdout] 131 | fn apply_tag_defaults(tag: &str, cs: &mut ComputedStyle) {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `selector_matches` is never used
[INFO] [stdout]    --> src/engine/paint.rs:146:4
[INFO] [stdout]     |
[INFO] [stdout] 146 | fn selector_matches(selectors: &[String], tag: &str, id: &str, classes: &[&str]) -> bool {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `build_display_list` is never used
[INFO] [stdout]    --> src/engine/paint.rs:156:8
[INFO] [stdout]     |
[INFO] [stdout] 156 | pub fn build_display_list(
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `color_to_rgba` is never used
[INFO] [stdout]    --> src/engine/paint.rs:218:8
[INFO] [stdout]     |
[INFO] [stdout] 218 | pub fn color_to_rgba(c: &Color) -> [u8; 4] {
[INFO] [stdout]     |        ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `SoftwareRenderer` is never constructed
[INFO] [stdout]    --> src/engine/paint.rs:222:12
[INFO] [stdout]     |
[INFO] [stdout] 222 | pub struct SoftwareRenderer {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/engine/paint.rs:232:12
[INFO] [stdout]     |
[INFO] [stdout] 231 | impl SoftwareRenderer {
[INFO] [stdout]     | --------------------- associated items in this implementation
[INFO] [stdout] 232 |     pub fn new(width: u32, height: u32) -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 264 |     pub fn render(&mut self, dl: &DisplayList) {
[INFO] [stdout]     |            ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 307 |     fn is_clipped(&self, x: f32, y: f32) -> bool {
[INFO] [stdout]     |        ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 311 |     fn set_pixel(&mut self, x: i32, y: i32, color: &[u8; 4]) {
[INFO] [stdout]     |        ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 328 |     fn fill_rect(&mut self, rect: &PaintRect, color: &[u8; 4]) {
[INFO] [stdout]     |        ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 336 |     fn draw_text(&mut self, x: f32, y: f32, text: &str, font_size: f32, color: &[u8; 4], max_width: f32) {
[INFO] [stdout]     |        ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 366 |     fn draw_image(&mut self, rect: &PaintRect, rgba: &[u8], img_w: u32, img_h: u32) {
[INFO] [stdout]     |        ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 388 |     fn draw_border(&mut self, rect: &PaintRect, color: &[u8; 4]) {
[INFO] [stdout]     |        ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 396 |     fn draw_play_icon(&mut self, rect: &PaintRect) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 410 |     pub fn clear(&mut self, color: [u8; 4]) {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 417 |     pub fn render_with_resources(&mut self, dl: &DisplayList, canvases: &HashMap<usize, crate::engine::canvas::Canvas2D>) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 468 |     fn render_canvas(&mut self, rect: &PaintRect, canvas: &crate::engine::canvas::Canvas2D) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 490 |     fn render_svg(&mut self, rect: &PaintRect, svg_content: &str) {
[INFO] [stdout]     |        ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 541 |     pub fn pixels(&self) -> &[u8] { &self.pixels }
[INFO] [stdout]     |            ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `TextShaper` is never constructed
[INFO] [stdout]  --> src/engine/text.rs:4:12
[INFO] [stdout]   |
[INFO] [stdout] 4 | pub struct TextShaper {
[INFO] [stdout]   |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ShapedLine` is never constructed
[INFO] [stdout]  --> src/engine/text.rs:9:12
[INFO] [stdout]   |
[INFO] [stdout] 9 | pub struct ShapedLine {
[INFO] [stdout]   |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ShapedText` is never constructed
[INFO] [stdout]   --> src/engine/text.rs:16:12
[INFO] [stdout]    |
[INFO] [stdout] 16 | pub struct ShapedText {
[INFO] [stdout]    |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new`, `measure`, `layout_text`, and `char_width` are never used
[INFO] [stdout]    --> src/engine/text.rs:23:12
[INFO] [stdout]     |
[INFO] [stdout]  22 | impl TextShaper {
[INFO] [stdout]     | --------------- associated items in this implementation
[INFO] [stdout]  23 |     pub fn new() -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout]  47 |     pub fn measure(&self, text: &str, font_size: f32) -> (f32, f32) {
[INFO] [stdout]     |            ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  62 |     pub fn layout_text(&self, text: &str, font_size: f32, max_width: f32) -> ShapedText {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 103 |     pub fn char_width(&self, ch: char, font_size: f32) -> f32 {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `width`, `height`, and `rgba_data` are never read
[INFO] [stdout]  --> src/engine/image_decode.rs:4:9
[INFO] [stdout]   |
[INFO] [stdout] 3 | pub struct CachedImage {
[INFO] [stdout]   |            ----------- fields in this struct
[INFO] [stdout] 4 |     pub width: u32,
[INFO] [stdout]   |         ^^^^^
[INFO] [stdout] 5 |     pub height: u32,
[INFO] [stdout]   |         ^^^^^^
[INFO] [stdout] 6 |     pub rgba_data: Vec<u8>,
[INFO] [stdout]   |         ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `entries` and `max_entries` are never read
[INFO] [stdout]   --> src/engine/image_decode.rs:10:5
[INFO] [stdout]    |
[INFO] [stdout]  9 | pub struct ImageCache {
[INFO] [stdout]    |            ---------- fields in this struct
[INFO] [stdout] 10 |     entries: HashMap<String, CachedImage>,
[INFO] [stdout]    |     ^^^^^^^
[INFO] [stdout] 11 |     max_entries: usize,
[INFO] [stdout]    |     ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]   --> src/engine/image_decode.rs:19:12
[INFO] [stdout]    |
[INFO] [stdout] 14 | impl ImageCache {
[INFO] [stdout]    | --------------- associated items in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 19 |     pub fn decode_bytes(&mut self, url: &str, data: &[u8]) -> Result<(), String> {
[INFO] [stdout]    |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 34 |     pub fn decode_and_resize(&mut self, url: &str, data: &[u8], max_dim: u32) -> Result<(), String> {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 50 |     pub fn get(&self, url: &str) -> Option<&CachedImage> { self.entries.get(url) }
[INFO] [stdout]    |            ^^^
[INFO] [stdout] 51 |
[INFO] [stdout] 52 |     pub fn contains(&self, url: &str) -> bool { self.entries.contains_key(url) }
[INFO] [stdout]    |            ^^^^^^^^
[INFO] [stdout] 53 |
[INFO] [stdout] 54 |     pub fn remove(&mut self, url: &str) { self.entries.remove(url); }
[INFO] [stdout]    |            ^^^^^^
[INFO] [stdout] 55 |
[INFO] [stdout] 56 |     pub fn clear(&mut self) { self.entries.clear(); }
[INFO] [stdout]    |            ^^^^^
[INFO] [stdout] 57 |
[INFO] [stdout] 58 |     pub fn len(&self) -> usize { self.entries.len() }
[INFO] [stdout]    |            ^^^
[INFO] [stdout] 59 |
[INFO] [stdout] 60 |     pub fn decode_file(&mut self, path: &str) -> Result<(), String> {
[INFO] [stdout]    |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 65 |     pub fn create_solid_color(width: u32, height: u32, r: u8, g: u8, b: u8, a: u8) -> CachedImage {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 73 |     pub fn supported_formats() -> &'static [&'static str] {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `detect_format` is never used
[INFO] [stdout]   --> src/engine/image_decode.rs:78:8
[INFO] [stdout]    |
[INFO] [stdout] 78 | pub fn detect_format(data: &[u8]) -> Option<&'static str> {
[INFO] [stdout]    |        ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `console_log` and `globals` are never read
[INFO] [stdout]  --> src/engine/js.rs:8:5
[INFO] [stdout]   |
[INFO] [stdout] 5 | pub struct JsRuntime {
[INFO] [stdout]   |            --------- fields in this struct
[INFO] [stdout] ...
[INFO] [stdout] 8 |     console_log: Vec<ConsoleEntry>,
[INFO] [stdout]   |     ^^^^^^^^^^^
[INFO] [stdout] 9 |     globals: HashMap<String, String>,
[INFO] [stdout]   |     ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `level`, `message`, and `timestamp` are never read
[INFO] [stdout]   --> src/engine/js.rs:14:9
[INFO] [stdout]    |
[INFO] [stdout] 13 | pub struct ConsoleEntry {
[INFO] [stdout]    |            ------------ fields in this struct
[INFO] [stdout] 14 |     pub level: String,
[INFO] [stdout]    |         ^^^^^
[INFO] [stdout] 15 |     pub message: String,
[INFO] [stdout]    |         ^^^^^^^
[INFO] [stdout] 16 |     pub timestamp: u64,
[INFO] [stdout]    |         ^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `ConsoleEntry` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `JsEvalResult` is never constructed
[INFO] [stdout]   --> src/engine/js.rs:20:12
[INFO] [stdout]    |
[INFO] [stdout] 20 | pub struct JsEvalResult {
[INFO] [stdout]    |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `eval`, `eval_dom_script`, `drain_console`, `set_global`, `reset`, and `is_available` are never used
[INFO] [stdout]    --> src/engine/js.rs:56:12
[INFO] [stdout]     |
[INFO] [stdout]  26 | impl JsRuntime {
[INFO] [stdout]     | -------------- associated items in this implementation
[INFO] [stdout] ...
[INFO] [stdout]  56 |     pub fn eval(&mut self, script: &str) -> JsEvalResult {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout]  78 |     pub fn eval_dom_script(&mut self, script: &str, document_json: &str) -> JsEvalResult {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 108 |     fn drain_console(&mut self) -> Vec<ConsoleEntry> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 137 |     pub fn set_global(&mut self, name: &str, value: &str) {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 146 |     pub fn reset(&mut self) {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 154 |     pub fn is_available() -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `RADIX` is never used
[INFO] [stdout]  --> src/engine/base17.rs:4:11
[INFO] [stdout]   |
[INFO] [stdout] 4 | pub const RADIX: u16 = 17;
[INFO] [stdout]   |           ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `PAIR_MAX` is never used
[INFO] [stdout]  --> src/engine/base17.rs:5:11
[INFO] [stdout]   |
[INFO] [stdout] 5 | pub const PAIR_MAX: u16 = 289;
[INFO] [stdout]   |           ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `META_START` is never used
[INFO] [stdout]  --> src/engine/base17.rs:6:11
[INFO] [stdout]   |
[INFO] [stdout] 6 | pub const META_START: u16 = 256;
[INFO] [stdout]   |           ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `STREAM_START` is never used
[INFO] [stdout]  --> src/engine/base17.rs:9:11
[INFO] [stdout]   |
[INFO] [stdout] 9 | pub const STREAM_START: u16 = 256;
[INFO] [stdout]   |           ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `STREAM_END` is never used
[INFO] [stdout]   --> src/engine/base17.rs:10:11
[INFO] [stdout]    |
[INFO] [stdout] 10 | pub const STREAM_END: u16 = 257;
[INFO] [stdout]    |           ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `CHECKSUM` is never used
[INFO] [stdout]   --> src/engine/base17.rs:11:11
[INFO] [stdout]    |
[INFO] [stdout] 11 | pub const CHECKSUM: u16 = 258;
[INFO] [stdout]    |           ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `HEARTBEAT` is never used
[INFO] [stdout]   --> src/engine/base17.rs:12:11
[INFO] [stdout]    |
[INFO] [stdout] 12 | pub const HEARTBEAT: u16 = 259;
[INFO] [stdout]    |           ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `ERROR_SLOT` is never used
[INFO] [stdout]   --> src/engine/base17.rs:13:11
[INFO] [stdout]    |
[INFO] [stdout] 13 | pub const ERROR_SLOT: u16 = 260;
[INFO] [stdout]    |           ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `DIGITS` is never used
[INFO] [stdout]   --> src/engine/base17.rs:15:7
[INFO] [stdout]    |
[INFO] [stdout] 15 | const DIGITS: [u8; 17] = *b"0123456789ABCDEFG";
[INFO] [stdout]    |       ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `INVALID` is never used
[INFO] [stdout]   --> src/engine/base17.rs:16:7
[INFO] [stdout]    |
[INFO] [stdout] 16 | const INVALID: u8 = 0xFF;
[INFO] [stdout]    |       ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: static `DECODE_TABLE` is never used
[INFO] [stdout]   --> src/engine/base17.rs:18:8
[INFO] [stdout]    |
[INFO] [stdout] 18 | static DECODE_TABLE: [u8; 128] = {
[INFO] [stdout]    |        ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `CodecError` is never used
[INFO] [stdout]   --> src/engine/base17.rs:33:10
[INFO] [stdout]    |
[INFO] [stdout] 33 | pub enum CodecError {
[INFO] [stdout]    |          ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `digit_val` is never used
[INFO] [stdout]   --> src/engine/base17.rs:54:4
[INFO] [stdout]    |
[INFO] [stdout] 54 | fn digit_val(ch: u8) -> Result<u16, CodecError> {
[INFO] [stdout]    |    ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `encode_byte` is never used
[INFO] [stdout]   --> src/engine/base17.rs:64:8
[INFO] [stdout]    |
[INFO] [stdout] 64 | pub fn encode_byte(b: u8) -> (u8, u8) {
[INFO] [stdout]    |        ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `decode_pair` is never used
[INFO] [stdout]   --> src/engine/base17.rs:69:8
[INFO] [stdout]    |
[INFO] [stdout] 69 | pub fn decode_pair(hi: u8, lo: u8) -> Result<u16, CodecError> {
[INFO] [stdout]    |        ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `encode_meta` is never used
[INFO] [stdout]   --> src/engine/base17.rs:73:8
[INFO] [stdout]    |
[INFO] [stdout] 73 | pub fn encode_meta(slot: u16) -> (u8, u8) {
[INFO] [stdout]    |        ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `encode_bytes` is never used
[INFO] [stdout]   --> src/engine/base17.rs:81:8
[INFO] [stdout]    |
[INFO] [stdout] 81 | pub fn encode_bytes(data: &[u8]) -> Vec<u8> {
[INFO] [stdout]    |        ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `decode_bytes` is never used
[INFO] [stdout]   --> src/engine/base17.rs:91:8
[INFO] [stdout]    |
[INFO] [stdout] 91 | pub fn decode_bytes(sept: &[u8]) -> Result<Vec<u8>, CodecError> {
[INFO] [stdout]    |        ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `encode_varint` is never used
[INFO] [stdout]    --> src/engine/base17.rs:109:8
[INFO] [stdout]     |
[INFO] [stdout] 109 | pub fn encode_varint(val: u64) -> Vec<u8> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `decode_varint` is never used
[INFO] [stdout]    --> src/engine/base17.rs:124:8
[INFO] [stdout]     |
[INFO] [stdout] 124 | pub fn decode_varint(sept: &[u8]) -> Result<(u64, usize), CodecError> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `encode_u16` is never used
[INFO] [stdout]    --> src/engine/base17.rs:141:8
[INFO] [stdout]     |
[INFO] [stdout] 141 | pub fn encode_u16(v: u16) -> [u8; 4] {
[INFO] [stdout]     |        ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `decode_u16` is never used
[INFO] [stdout]    --> src/engine/base17.rs:149:8
[INFO] [stdout]     |
[INFO] [stdout] 149 | pub fn decode_u16(sept: &[u8]) -> Result<(u16, usize), CodecError> {
[INFO] [stdout]     |        ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `encode_u32` is never used
[INFO] [stdout]    --> src/engine/base17.rs:156:8
[INFO] [stdout]     |
[INFO] [stdout] 156 | pub fn encode_u32(v: u32) -> [u8; 8] {
[INFO] [stdout]     |        ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `decode_u32` is never used
[INFO] [stdout]    --> src/engine/base17.rs:165:8
[INFO] [stdout]     |
[INFO] [stdout] 165 | pub fn decode_u32(sept: &[u8]) -> Result<(u32, usize), CodecError> {
[INFO] [stdout]     |        ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `encode_f32` is never used
[INFO] [stdout]    --> src/engine/base17.rs:176:8
[INFO] [stdout]     |
[INFO] [stdout] 176 | pub fn encode_f32(v: f32) -> [u8; 8] { encode_u32(v.to_bits()) }
[INFO] [stdout]     |        ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `decode_f32` is never used
[INFO] [stdout]    --> src/engine/base17.rs:178:8
[INFO] [stdout]     |
[INFO] [stdout] 178 | pub fn decode_f32(sept: &[u8]) -> Result<(f32, usize), CodecError> {
[INFO] [stdout]     |        ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `encode_string` is never used
[INFO] [stdout]    --> src/engine/base17.rs:185:8
[INFO] [stdout]     |
[INFO] [stdout] 185 | pub fn encode_string(s: &str) -> Vec<u8> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `decode_string` is never used
[INFO] [stdout]    --> src/engine/base17.rs:194:8
[INFO] [stdout]     |
[INFO] [stdout] 194 | pub fn decode_string(sept: &[u8]) -> Result<(String, usize), CodecError> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `Checksummer` is never constructed
[INFO] [stdout]    --> src/engine/base17.rs:205:12
[INFO] [stdout]     |
[INFO] [stdout] 205 | pub struct Checksummer { sum: u16 }
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new`, `feed`, `feed_slice`, `value`, `encode`, and `reset` are never used
[INFO] [stdout]    --> src/engine/base17.rs:208:12
[INFO] [stdout]     |
[INFO] [stdout] 207 | impl Checksummer {
[INFO] [stdout]     | ---------------- associated items in this implementation
[INFO] [stdout] 208 |     pub fn new() -> Self { Self { sum: 0 } }
[INFO] [stdout]     |            ^^^
[INFO] [stdout] 209 |
[INFO] [stdout] 210 |     pub fn feed(&mut self, digit: u8) {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 214 |     pub fn feed_slice(&mut self, digits: &[u8]) {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 218 |     pub fn value(&self) -> u8 { self.sum as u8 }
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] 219 |
[INFO] [stdout] 220 |     pub fn encode(&self) -> (u8, u8, u8, u8) {
[INFO] [stdout]     |            ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 226 |     pub fn reset(&mut self) { self.sum = 0; }
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `StreamEncoder` is never constructed
[INFO] [stdout]    --> src/engine/base17.rs:231:12
[INFO] [stdout]     |
[INFO] [stdout] 231 | pub struct StreamEncoder {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/engine/base17.rs:237:12
[INFO] [stdout]     |
[INFO] [stdout] 236 | impl StreamEncoder {
[INFO] [stdout]     | ------------------ associated items in this implementation
[INFO] [stdout] 237 |     pub fn new() -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 244 |     pub fn write_byte(&mut self, b: u8) {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 250 |     pub fn write_bytes(&mut self, data: &[u8]) {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 254 |     pub fn write_u16(&mut self, v: u16) {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 258 |     pub fn write_u32(&mut self, v: u32) {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 262 |     pub fn write_f32(&mut self, v: f32) {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 266 |     pub fn write_string(&mut self, s: &str) {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 273 |     pub fn write_heartbeat(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 278 |     pub fn finish(mut self) -> Vec<u8> {
[INFO] [stdout]     |            ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 286 |     pub fn len(&self) -> usize { self.buffer.len() }
[INFO] [stdout]     |            ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `StreamDecoder` is never constructed
[INFO] [stdout]    --> src/engine/base17.rs:289:12
[INFO] [stdout]     |
[INFO] [stdout] 289 | pub struct StreamDecoder<'a> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/engine/base17.rs:296:12
[INFO] [stdout]     |
[INFO] [stdout] 295 | impl<'a> StreamDecoder<'a> {
[INFO] [stdout]     | -------------------------- associated items in this implementation
[INFO] [stdout] 296 |     pub fn new(data: &'a [u8]) -> Result<Self, CodecError> {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 303 |     pub fn read_byte(&mut self) -> Result<u8, CodecError> {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 316 |     pub fn read_u16(&mut self) -> Result<u16, CodecError> {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 322 |     pub fn read_u32(&mut self) -> Result<u32, CodecError> {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 328 |     pub fn read_f32(&mut self) -> Result<f32, CodecError> {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 332 |     pub fn read_string(&mut self) -> Result<String, CodecError> {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 339 |     pub fn read_bytes(&mut self, n: usize) -> Result<Vec<u8>, CodecError> {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 345 |     pub fn remaining(&self) -> usize {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 349 |     pub fn is_at_end(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 356 |     pub fn peek_meta(&self) -> Option<u16> {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 361 |     pub fn skip_meta(&mut self) { if self.peek_meta().is_some() { self.pos += 2; } }
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] 362 |
[INFO] [stdout] 363 |     pub fn verify_checksum(&mut self) -> Result<bool, CodecError> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `Opcode` is never used
[INFO] [stdout]   --> src/engine/amni_ir.rs:11:10
[INFO] [stdout]    |
[INFO] [stdout] 11 | pub enum Opcode {
[INFO] [stdout]    |          ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `from_byte` and `category` are never used
[INFO] [stdout]   --> src/engine/amni_ir.rs:37:12
[INFO] [stdout]    |
[INFO] [stdout] 36 | impl Opcode {
[INFO] [stdout]    | ----------- associated items in this implementation
[INFO] [stdout] 37 |     pub fn from_byte(b: u8) -> Option<Self> {
[INFO] [stdout]    |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 65 |     pub fn category(&self) -> &'static str {
[INFO] [stdout]    |            ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `Instruction` is never constructed
[INFO] [stdout]   --> src/engine/amni_ir.rs:75:12
[INFO] [stdout]    |
[INFO] [stdout] 75 | pub struct Instruction {
[INFO] [stdout]    |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `Operands` is never used
[INFO] [stdout]   --> src/engine/amni_ir.rs:81:10
[INFO] [stdout]    |
[INFO] [stdout] 81 | pub enum Operands {
[INFO] [stdout]    |          ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `encode` and `decode` are never used
[INFO] [stdout]    --> src/engine/amni_ir.rs:119:12
[INFO] [stdout]     |
[INFO] [stdout] 118 | impl Instruction {
[INFO] [stdout]     | ---------------- associated items in this implementation
[INFO] [stdout] 119 |     pub fn encode(&self, enc: &mut StreamEncoder) {
[INFO] [stdout]     |            ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 165 |     pub fn decode(dec: &mut StreamDecoder) -> Result<Self, CodecError> {
[INFO] [stdout]     |            ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `IrProgram` is never constructed
[INFO] [stdout]    --> src/engine/amni_ir.rs:219:12
[INFO] [stdout]     |
[INFO] [stdout] 219 | pub struct IrProgram {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new`, `push`, `len`, `is_empty`, `encode_to_wire`, and `decode_from_wire` are never used
[INFO] [stdout]    --> src/engine/amni_ir.rs:224:12
[INFO] [stdout]     |
[INFO] [stdout] 223 | impl IrProgram {
[INFO] [stdout]     | -------------- associated items in this implementation
[INFO] [stdout] 224 |     pub fn new() -> Self { Self { instructions: Vec::new() } }
[INFO] [stdout]     |            ^^^
[INFO] [stdout] 225 |
[INFO] [stdout] 226 |     pub fn push(&mut self, inst: Instruction) { self.instructions.push(inst); }
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] 227 |     pub fn len(&self) -> usize { self.instructions.len() }
[INFO] [stdout]     |            ^^^
[INFO] [stdout] 228 |     pub fn is_empty(&self) -> bool { self.instructions.is_empty() }
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] 229 |
[INFO] [stdout] 230 |     pub fn encode_to_wire(&self) -> Vec<u8> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 236 |     pub fn decode_from_wire(wire: &[u8]) -> Result<Self, CodecError> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `IrBuilder` is never constructed
[INFO] [stdout]    --> src/engine/amni_ir.rs:249:12
[INFO] [stdout]     |
[INFO] [stdout] 249 | pub struct IrBuilder {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/engine/amni_ir.rs:257:12
[INFO] [stdout]     |
[INFO] [stdout] 256 | impl IrBuilder {
[INFO] [stdout]     | -------------- associated items in this implementation
[INFO] [stdout] 257 |     pub fn new() -> Self { Self { prog: IrProgram::new(), next_node_id: 1, next_layer_id: 1, frame_count: 0 } }
[INFO] [stdout]     |            ^^^
[INFO] [stdout] 258 |
[INFO] [stdout] 259 |     pub fn doc_start(&mut self, w: f32, h: f32) {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 262 |     pub fn doc_end(&mut self) {
[INFO] [stdout]     |            ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 265 |     pub fn create_node(&mut self, tag: &str) -> u32 {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 270 |     pub fn append_child(&mut self, parent: u32, child: u32) {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 273 |     pub fn set_attr(&mut self, node: u32, key: &str, value: &str) {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 276 |     pub fn set_text(&mut self, node: u32, text: &str) {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 279 |     pub fn create_box(&mut self, node: u32, x: f32, y: f32, w: f32, h: f32) {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 282 |     pub fn set_margin(&mut self, node: u32, t: f32, r: f32, b: f32, l: f32) {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 285 |     pub fn set_padding(&mut self, node: u32, t: f32, r: f32, b: f32, l: f32) {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 288 |     pub fn paint_rect(&mut self, x: f32, y: f32, w: f32, h: f32, color: u32) {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 291 |     pub fn paint_text(&mut self, x: f32, y: f32, text: &str, color: u32) {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 294 |     pub fn paint_image(&mut self, x: f32, y: f32, w: f32, h: f32, tex: u32) {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 297 |     pub fn paint_clip(&mut self, x: f32, y: f32, w: f32, h: f32) {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 300 |     pub fn paint_unclip(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 303 |     pub fn push_layer(&mut self) -> u32 {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 308 |     pub fn pop_layer(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 311 |     pub fn frame_begin(&mut self) -> u32 {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 317 |     pub fn frame_end(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 321 |     pub fn finish(self) -> IrProgram { self.prog }
[INFO] [stdout]     |            ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `hash_tag` is never used
[INFO] [stdout]    --> src/engine/amni_ir.rs:324:8
[INFO] [stdout]     |
[INFO] [stdout] 324 | pub fn hash_tag(tag: &str) -> u32 {
[INFO] [stdout]     |        ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `emit_ir_from_render_tree` is never used
[INFO] [stdout]    --> src/engine/amni_ir.rs:335:8
[INFO] [stdout]     |
[INFO] [stdout] 335 | pub fn emit_ir_from_render_tree(
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `emit_node` is never used
[INFO] [stdout]    --> src/engine/amni_ir.rs:349:4
[INFO] [stdout]     |
[INFO] [stdout] 349 | fn emit_node(
[INFO] [stdout]     |    ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `rgba_to_u32` is never used
[INFO] [stdout]    --> src/engine/amni_ir.rs:379:4
[INFO] [stdout]     |
[INFO] [stdout] 379 | fn rgba_to_u32(r: u8, g: u8, b: u8, a: u8) -> u32 {
[INFO] [stdout]     |    ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `IrNode` is never constructed
[INFO] [stdout]   --> src/engine/ir_executor.rs:10:8
[INFO] [stdout]    |
[INFO] [stdout] 10 | struct IrNode {
[INFO] [stdout]    |        ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `IrBox` is never constructed
[INFO] [stdout]   --> src/engine/ir_executor.rs:20:8
[INFO] [stdout]    |
[INFO] [stdout] 20 | struct IrBox {
[INFO] [stdout]    |        ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `IrExecutor` is never constructed
[INFO] [stdout]   --> src/engine/ir_executor.rs:37:12
[INFO] [stdout]    |
[INFO] [stdout] 37 | pub struct IrExecutor {
[INFO] [stdout]    |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `TextureRef` is never constructed
[INFO] [stdout]   --> src/engine/ir_executor.rs:52:12
[INFO] [stdout]    |
[INFO] [stdout] 52 | pub struct TextureRef {
[INFO] [stdout]    |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ExecutionResult` is never constructed
[INFO] [stdout]   --> src/engine/ir_executor.rs:59:12
[INFO] [stdout]    |
[INFO] [stdout] 59 | pub struct ExecutionResult {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/engine/ir_executor.rs:70:12
[INFO] [stdout]     |
[INFO] [stdout]  69 | impl IrExecutor {
[INFO] [stdout]     | --------------- associated items in this implementation
[INFO] [stdout]  70 |     pub fn new() -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout]  80 |     pub fn execute(&mut self, program: &IrProgram) -> ExecutionResult {
[INFO] [stdout]     |            ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 300 |     pub fn scroll_to(&mut self, x: f32, y: f32) { self.scroll_x = x; self.scroll_y = y; }
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] 301 |     pub fn scroll_by(&mut self, dx: f32, dy: f32) { self.scroll_x += dx; self.scroll_y += dy; }
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] 302 |     pub fn viewport(&self) -> (f32, f32) { (self.viewport_w, self.viewport_h) }
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] 303 |     pub fn scroll_pos(&self) -> (f32, f32) { (self.scroll_x, self.scroll_y) }
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] 304 |
[INFO] [stdout] 305 |     pub fn register_texture(&mut self, id: u32, width: u32, height: u32) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 309 |     pub fn hit_test(&self, x: f32, y: f32) -> Option<u32> {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 324 |     pub fn get_node_text(&self, id: u32) -> Option<&str> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 328 |     pub fn get_node_attr(&self, id: u32, key: &str) -> Option<&str> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 332 |     pub fn clear(&mut self) {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `u32_to_rgba` is never used
[INFO] [stdout]    --> src/engine/ir_executor.rs:340:4
[INFO] [stdout]     |
[INFO] [stdout] 340 | fn u32_to_rgba(c: u32) -> [u8; 4] {
[INFO] [stdout]     |    ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `ShuntState` is never used
[INFO] [stdout]   --> src/engine/shunt_sandbox.rs:11:10
[INFO] [stdout]    |
[INFO] [stdout] 11 | pub enum ShuntState {
[INFO] [stdout]    |          ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ShuntConfig` is never constructed
[INFO] [stdout]   --> src/engine/shunt_sandbox.rs:19:12
[INFO] [stdout]    |
[INFO] [stdout] 19 | pub struct ShuntConfig {
[INFO] [stdout]    |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `InProcessShunt` is never constructed
[INFO] [stdout]   --> src/engine/shunt_sandbox.rs:33:12
[INFO] [stdout]    |
[INFO] [stdout] 33 | pub struct InProcessShunt {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/engine/shunt_sandbox.rs:40:12
[INFO] [stdout]     |
[INFO] [stdout]  39 | impl InProcessShunt {
[INFO] [stdout]     | ------------------- associated items in this implementation
[INFO] [stdout]  40 |     pub fn new(config: ShuntConfig) -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout]  44 |     pub fn state(&self) -> &ShuntState { &self.state }
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  47 |     pub fn process_html(&mut self, url: &str, html: &str, css_sources: &[&str]) -> Result<IrProgram, String> {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  68 |     pub fn process_to_wire(&mut self, url: &str, html: &str, css_sources: &[&str]) -> Result<Vec<u8>, String> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  73 |     fn emit_ir(&self, html: &str, css_sources: &[&str], vw: f32, vh: f32) -> IrProgram {
[INFO] [stdout]     |        ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 103 |     pub fn get_cached(&self, url: &str) -> Option<&IrProgram> {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 107 |     pub fn clear_cache(&mut self) { self.ir_cache.clear(); }
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] 108 |
[INFO] [stdout] 109 |     pub fn reset(&mut self) {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `build_layout_tree` is never used
[INFO] [stdout]    --> src/engine/shunt_sandbox.rs:116:4
[INFO] [stdout]     |
[INFO] [stdout] 116 | fn build_layout_tree(
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `selector_matches` is never used
[INFO] [stdout]    --> src/engine/shunt_sandbox.rs:159:4
[INFO] [stdout]     |
[INFO] [stdout] 159 | fn selector_matches(selectors: &[String], tag: &str, id: &str, classes: &[&str]) -> bool {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ProcessShunt` is never constructed
[INFO] [stdout]    --> src/engine/shunt_sandbox.rs:171:12
[INFO] [stdout]     |
[INFO] [stdout] 171 | pub struct ProcessShunt {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new`, `spawn`, `send_html`, `is_alive`, `kill`, and `state` are never used
[INFO] [stdout]    --> src/engine/shunt_sandbox.rs:178:12
[INFO] [stdout]     |
[INFO] [stdout] 177 | impl ProcessShunt {
[INFO] [stdout]     | ----------------- associated items in this implementation
[INFO] [stdout] 178 |     pub fn new(config: ShuntConfig) -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 182 |     pub fn spawn(&mut self) -> Result<(), String> {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 198 |     pub fn send_html(&mut self, html: &str) -> Result<Vec<u8>, String> {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 215 |     pub fn is_alive(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 219 |     pub fn kill(&mut self) {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 227 |     pub fn state(&self) -> &ShuntState { &self.state }
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ShuntManager` is never constructed
[INFO] [stdout]    --> src/engine/shunt_sandbox.rs:236:12
[INFO] [stdout]     |
[INFO] [stdout] 236 | pub struct ShuntManager {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/engine/shunt_sandbox.rs:245:12
[INFO] [stdout]     |
[INFO] [stdout] 244 | impl ShuntManager {
[INFO] [stdout]     | ----------------- associated items in this implementation
[INFO] [stdout] 245 |     pub fn new(config: ShuntConfig) -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 256 |     pub fn process_html(&mut self, url: &str, html: &str, css: &[&str]) -> Result<IrProgram, String> {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 286 |     pub fn process_to_wire(&mut self, url: &str, html: &str, css: &[&str]) -> Result<Vec<u8>, String> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 291 |     pub fn state(&self) -> &ShuntState { self.in_process.state() }
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] 292 |
[INFO] [stdout] 293 |     pub fn crash_count(&self) -> u32 { self.crash_count }
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] 294 |
[INFO] [stdout] 295 |     pub fn reset(&mut self) {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 302 |     pub fn stats_json(&self) -> String {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: trait `CloneProgram` is never used
[INFO] [stdout]    --> src/engine/shunt_sandbox.rs:314:7
[INFO] [stdout]     |
[INFO] [stdout] 314 | trait CloneProgram { fn clone_program(&self) -> IrProgram; }
[INFO] [stdout]     |       ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `DomEvent` is never constructed
[INFO] [stdout]  --> src/engine/js_bridge.rs:6:12
[INFO] [stdout]   |
[INFO] [stdout] 6 | pub struct DomEvent {
[INFO] [stdout]   |            ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `mutation_type` and `node_id` are never read
[INFO] [stdout]   --> src/engine/js_bridge.rs:17:9
[INFO] [stdout]    |
[INFO] [stdout] 16 | pub struct DomMutation {
[INFO] [stdout]    |            ----------- fields in this struct
[INFO] [stdout] 17 |     pub mutation_type: MutationType,
[INFO] [stdout]    |         ^^^^^^^^^^^^^
[INFO] [stdout] 18 |     pub node_id: usize,
[INFO] [stdout]    |         ^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `DomMutation` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple variants are never constructed
[INFO] [stdout]   --> src/engine/js_bridge.rs:23:5
[INFO] [stdout]    |
[INFO] [stdout] 22 | pub enum MutationType {
[INFO] [stdout]    |          ------------ variants in this enum
[INFO] [stdout] 23 |     SetText(String),
[INFO] [stdout]    |     ^^^^^^^
[INFO] [stdout] 24 |     SetAttribute(String, String),
[INFO] [stdout]    |     ^^^^^^^^^^^^
[INFO] [stdout] 25 |     RemoveAttribute(String),
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^
[INFO] [stdout] 26 |     SetStyle(String, String),
[INFO] [stdout]    |     ^^^^^^^^
[INFO] [stdout] 27 |     AppendChild(usize),
[INFO] [stdout]    |     ^^^^^^^^^^^
[INFO] [stdout] 28 |     RemoveChild(usize),
[INFO] [stdout]    |     ^^^^^^^^^^^
[INFO] [stdout] 29 |     SetInnerHtml(String),
[INFO] [stdout]    |     ^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `MutationType` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `id`, `callback_code`, `interval_ms`, `is_interval`, and `next_fire_ms` are never read
[INFO] [stdout]   --> src/engine/js_bridge.rs:34:9
[INFO] [stdout]    |
[INFO] [stdout] 33 | pub struct TimerEntry {
[INFO] [stdout]    |            ---------- fields in this struct
[INFO] [stdout] 34 |     pub id: u32,
[INFO] [stdout]    |         ^^
[INFO] [stdout] 35 |     pub callback_code: String,
[INFO] [stdout]    |         ^^^^^^^^^^^^^
[INFO] [stdout] 36 |     pub interval_ms: u64,
[INFO] [stdout]    |         ^^^^^^^^^^^
[INFO] [stdout] 37 |     pub is_interval: bool,
[INFO] [stdout]    |         ^^^^^^^^^^^
[INFO] [stdout] 38 |     pub next_fire_ms: u64,
[INFO] [stdout]    |         ^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `TimerEntry` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `id`, `url`, `method`, `headers`, and `body` are never read
[INFO] [stdout]   --> src/engine/js_bridge.rs:43:9
[INFO] [stdout]    |
[INFO] [stdout] 42 | pub struct FetchRequest {
[INFO] [stdout]    |            ------------ fields in this struct
[INFO] [stdout] 43 |     pub id: u32,
[INFO] [stdout]    |         ^^
[INFO] [stdout] 44 |     pub url: String,
[INFO] [stdout]    |         ^^^
[INFO] [stdout] 45 |     pub method: String,
[INFO] [stdout]    |         ^^^^^^
[INFO] [stdout] 46 |     pub headers: HashMap<String, String>,
[INFO] [stdout]    |         ^^^^^^^
[INFO] [stdout] 47 |     pub body: Option<String>,
[INFO] [stdout]    |         ^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `FetchRequest` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `nodes`, `body_id`, `head_id`, and `parent_map` are never read
[INFO] [stdout]   --> src/engine/js_bridge.rs:52:5
[INFO] [stdout]    |
[INFO] [stdout] 51 | struct DomSnapshot {
[INFO] [stdout]    |        ----------- fields in this struct
[INFO] [stdout] 52 |     nodes: HashMap<usize, SnapshotNode>,
[INFO] [stdout]    |     ^^^^^
[INFO] [stdout] 53 |     body_id: Option<usize>,
[INFO] [stdout]    |     ^^^^^^^
[INFO] [stdout] 54 |     head_id: Option<usize>,
[INFO] [stdout]    |     ^^^^^^^
[INFO] [stdout] 55 |     parent_map: HashMap<usize, usize>,
[INFO] [stdout]    |     ^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `DomSnapshot` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `tag`, `text`, `attrs`, `styles`, `children`, and `classes` are never read
[INFO] [stdout]   --> src/engine/js_bridge.rs:60:5
[INFO] [stdout]    |
[INFO] [stdout] 59 | struct SnapshotNode {
[INFO] [stdout]    |        ------------ fields in this struct
[INFO] [stdout] 60 |     tag: String,
[INFO] [stdout]    |     ^^^
[INFO] [stdout] 61 |     text: String,
[INFO] [stdout]    |     ^^^^
[INFO] [stdout] 62 |     attrs: HashMap<String, String>,
[INFO] [stdout]    |     ^^^^^
[INFO] [stdout] 63 |     styles: HashMap<String, String>,
[INFO] [stdout]    |     ^^^^^^
[INFO] [stdout] 64 |     children: Vec<usize>,
[INFO] [stdout]    |     ^^^^^^^^
[INFO] [stdout] 65 |     classes: Vec<String>,
[INFO] [stdout]    |     ^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `SnapshotNode` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple fields are never read
[INFO] [stdout]   --> src/engine/js_bridge.rs:69:5
[INFO] [stdout]    |
[INFO] [stdout] 68 | pub struct JsDomBridge {
[INFO] [stdout]    |            ----------- fields in this struct
[INFO] [stdout] 69 |     runtime: JsRuntime,
[INFO] [stdout]    |     ^^^^^^^
[INFO] [stdout] 70 |     event_handlers: HashMap<(usize, String), Vec<String>>,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^
[INFO] [stdout] 71 |     pending_mutations: Vec<DomMutation>,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 72 |     timers: HashMap<u32, TimerEntry>,
[INFO] [stdout]    |     ^^^^^^
[INFO] [stdout] 73 |     next_timer_id: u32,
[INFO] [stdout]    |     ^^^^^^^^^^^^^
[INFO] [stdout] 74 |     fetch_queue: Vec<FetchRequest>,
[INFO] [stdout]    |     ^^^^^^^^^^^
[INFO] [stdout] 75 |     next_fetch_id: usize,
[INFO] [stdout]    |     ^^^^^^^^^^^^^
[INFO] [stdout] 76 |     pending_fetches: Vec<FetchRequest>,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^
[INFO] [stdout] 77 |     dom_snapshot: Option<DomSnapshot>,
[INFO] [stdout]    |     ^^^^^^^^^^^^
[INFO] [stdout] 78 |     local_storage: HashMap<String, HashMap<String, String>>,
[INFO] [stdout]    |     ^^^^^^^^^^^^^
[INFO] [stdout] 79 |     session_storage: HashMap<String, HashMap<String, String>>,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^
[INFO] [stdout] 80 |     current_origin: String,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/engine/js_bridge.rs:101:12
[INFO] [stdout]     |
[INFO] [stdout]  83 | impl JsDomBridge {
[INFO] [stdout]     | ---------------- associated items in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 101 |     pub fn set_origin(&mut self, origin: &str) {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 105 |     pub fn snapshot_dom(&mut self, tree: &RenderTree) {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 137 |     fn build_nodes_json(snap: &DomSnapshot) -> String {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 170 |     fn build_storage_json(storage: &HashMap<String, HashMap<String, String>>, origin: &str) -> String {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 175 |     fn inject_dom_api(&mut self) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 479 |     pub fn exec_script(&mut self, script: &str) -> JsExecResult {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 496 |     fn collect_mutations(&mut self) -> Vec<DomMutation> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 551 |     fn collect_timers(&mut self) -> Vec<TimerEntry> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 570 |     fn collect_fetches(&mut self) -> Vec<FetchRequest> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 596 |     fn collect_storage_mutations(&mut self) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 626 |     pub fn dispatch_event(&mut self, event: &DomEvent) -> Vec<DomMutation> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 648 |     pub fn tick_timers(&mut self) -> Vec<DomMutation> {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 677 |     pub fn resolve_fetch(&mut self, id: u32, status: u16, headers: HashMap<String, String>, body: String) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 705 |     pub fn apply_mutations(tree: &mut RenderTree, mutations: &[DomMutation]) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 725 |     pub fn pending_fetch_count(&self) -> usize { self.fetch_queue.len() }
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 726 |     pub fn timer_count(&self) -> usize { self.timers.len() }
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] 727 |
[INFO] [stdout] 728 |     pub fn drain_fetch_queue(&mut self) -> Vec<FetchRequest> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 732 |     pub fn drain_pending_fetches(&mut self) -> Vec<FetchRequest> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 736 |     pub fn get_local_storage(&self, origin: &str) -> &HashMap<String, String> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 741 |     pub fn get_session_storage(&self, origin: &str) -> &HashMap<String, String> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 746 |     pub fn clear_session_storage(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 750 |     pub fn reset(&mut self) {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `JsExecResult` is never constructed
[INFO] [stdout]    --> src/engine/js_bridge.rs:763:12
[INFO] [stdout]     |
[INFO] [stdout] 763 | pub struct JsExecResult {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `InlineItem` is never used
[INFO] [stdout]  --> src/engine/inline_layout.rs:8:10
[INFO] [stdout]   |
[INFO] [stdout] 8 | pub enum InlineItem {
[INFO] [stdout]   |          ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `InlineStyle` is never constructed
[INFO] [stdout]   --> src/engine/inline_layout.rs:15:12
[INFO] [stdout]    |
[INFO] [stdout] 15 | pub struct InlineStyle {
[INFO] [stdout]    |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `from_computed` is never used
[INFO] [stdout]   --> src/engine/inline_layout.rs:25:12
[INFO] [stdout]    |
[INFO] [stdout] 24 | impl InlineStyle {
[INFO] [stdout]    | ---------------- associated function in this implementation
[INFO] [stdout] 25 |     pub fn from_computed(cs: &ComputedStyle) -> Self {
[INFO] [stdout]    |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `PositionedFragment` is never constructed
[INFO] [stdout]   --> src/engine/inline_layout.rs:38:12
[INFO] [stdout]    |
[INFO] [stdout] 38 | pub struct PositionedFragment {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `LineBox` is never constructed
[INFO] [stdout]   --> src/engine/inline_layout.rs:49:12
[INFO] [stdout]    |
[INFO] [stdout] 49 | pub struct LineBox {
[INFO] [stdout]    |            ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `InlineFormattingContext` is never constructed
[INFO] [stdout]   --> src/engine/inline_layout.rs:57:12
[INFO] [stdout]    |
[INFO] [stdout] 57 | pub struct InlineFormattingContext {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `layout`, `commit_line`, `fragment_count`, `line_count`, and `all_fragments` are never used
[INFO] [stdout]    --> src/engine/inline_layout.rs:64:12
[INFO] [stdout]     |
[INFO] [stdout]  63 | impl InlineFormattingContext {
[INFO] [stdout]     | ---------------------------- associated items in this implementation
[INFO] [stdout]  64 |     pub fn layout(items: &[InlineItem], max_width: f32, text_align: TextAlign, shaper: &TextShaper) -> Self {
[INFO] [stdout]     |            ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 130 |     fn commit_line(
[INFO] [stdout]     |        ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 170 |     pub fn fragment_count(&self) -> usize {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 174 |     pub fn line_count(&self) -> usize { self.lines.len() }
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 177 |     pub fn all_fragments(&self) -> Vec<&PositionedFragment> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `split_words` is never used
[INFO] [stdout]    --> src/engine/inline_layout.rs:182:4
[INFO] [stdout]     |
[INFO] [stdout] 182 | fn split_words(text: &str) -> Vec<String> {
[INFO] [stdout]     |    ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `extract_inline_items` is never used
[INFO] [stdout]    --> src/engine/inline_layout.rs:199:8
[INFO] [stdout]     |
[INFO] [stdout] 199 | pub fn extract_inline_items(
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `extract_inline_recursive` is never used
[INFO] [stdout]    --> src/engine/inline_layout.rs:209:4
[INFO] [stdout]     |
[INFO] [stdout] 209 | fn extract_inline_recursive(
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `collapse_whitespace` is never used
[INFO] [stdout]    --> src/engine/inline_layout.rs:271:4
[INFO] [stdout]     |
[INFO] [stdout] 271 | fn collapse_whitespace(s: &str) -> String {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `Transform` is never constructed
[INFO] [stdout]  --> src/engine/css_advanced.rs:3:12
[INFO] [stdout]   |
[INFO] [stdout] 3 | pub struct Transform {
[INFO] [stdout]   |            ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]   --> src/engine/css_advanced.rs:10:12
[INFO] [stdout]    |
[INFO] [stdout]  9 | impl Transform {
[INFO] [stdout]    | -------------- associated items in this implementation
[INFO] [stdout] 10 |     pub fn translate(tx: f32, ty: f32) -> Self { Self { matrix: [1.0, 0.0, 0.0, 1.0, tx, ty] } }
[INFO] [stdout]    |            ^^^^^^^^^
[INFO] [stdout] 11 |     pub fn rotate(deg: f32) -> Self {
[INFO] [stdout]    |            ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 16 |     pub fn scale(sx: f32, sy: f32) -> Self { Self { matrix: [sx, 0.0, 0.0, sy, 0.0, 0.0] } }
[INFO] [stdout]    |            ^^^^^
[INFO] [stdout] 17 |     pub fn skew(ax: f32, ay: f32) -> Self {
[INFO] [stdout]    |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 22 |     pub fn matrix(a: f32, b: f32, c: f32, d: f32, e: f32, f: f32) -> Self { Self { matrix: [a, b, c, d, e, f] } }
[INFO] [stdout]    |            ^^^^^^
[INFO] [stdout] 23 |     pub fn apply_to_point(&self, x: f32, y: f32) -> (f32, f32) {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 27 |     pub fn compose(&self, other: &Transform) -> Transform {
[INFO] [stdout]    |            ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `TimingFunction` is never used
[INFO] [stdout]   --> src/engine/css_advanced.rs:38:10
[INFO] [stdout]    |
[INFO] [stdout] 38 | pub enum TimingFunction {
[INFO] [stdout]    |          ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `interpolate` is never used
[INFO] [stdout]   --> src/engine/css_advanced.rs:47:12
[INFO] [stdout]    |
[INFO] [stdout] 46 | impl TimingFunction {
[INFO] [stdout]    | ------------------- method in this implementation
[INFO] [stdout] 47 |     pub fn interpolate(&self, t: f32) -> f32 {
[INFO] [stdout]    |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `cubic_bezier_sample` is never used
[INFO] [stdout]   --> src/engine/css_advanced.rs:58:4
[INFO] [stdout]    |
[INFO] [stdout] 58 | fn cubic_bezier_sample(x1: f32, y1: f32, x2: f32, y2: f32, t: f32) -> f32 {
[INFO] [stdout]    |    ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `bezier_component` is never used
[INFO] [stdout]   --> src/engine/css_advanced.rs:70:4
[INFO] [stdout]    |
[INFO] [stdout] 70 | fn bezier_component(p1: f32, p2: f32, t: f32) -> f32 {
[INFO] [stdout]    |    ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `Transition` is never constructed
[INFO] [stdout]   --> src/engine/css_advanced.rs:75:12
[INFO] [stdout]    |
[INFO] [stdout] 75 | pub struct Transition {
[INFO] [stdout]    |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `interpolate` is never used
[INFO] [stdout]   --> src/engine/css_advanced.rs:82:12
[INFO] [stdout]    |
[INFO] [stdout] 81 | impl Transition {
[INFO] [stdout]    | --------------- method in this implementation
[INFO] [stdout] 82 |     pub fn interpolate(&self, t: f32) -> f32 { self.timing.interpolate(t) }
[INFO] [stdout]    |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `AnimationDirection` is never used
[INFO] [stdout]   --> src/engine/css_advanced.rs:85:10
[INFO] [stdout]    |
[INFO] [stdout] 85 | pub enum AnimationDirection { Normal, Reverse, Alternate, AlternateReverse }
[INFO] [stdout]    |          ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `FillMode` is never used
[INFO] [stdout]   --> src/engine/css_advanced.rs:87:10
[INFO] [stdout]    |
[INFO] [stdout] 87 | pub enum FillMode { None, Forwards, Backwards, Both }
[INFO] [stdout]    |          ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `Keyframe` is never constructed
[INFO] [stdout]   --> src/engine/css_advanced.rs:89:12
[INFO] [stdout]    |
[INFO] [stdout] 89 | pub struct Keyframe {
[INFO] [stdout]    |            ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `Animation` is never constructed
[INFO] [stdout]   --> src/engine/css_advanced.rs:94:12
[INFO] [stdout]    |
[INFO] [stdout] 94 | pub struct Animation {
[INFO] [stdout]    |            ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `compute_value_at` is never used
[INFO] [stdout]    --> src/engine/css_advanced.rs:104:12
[INFO] [stdout]     |
[INFO] [stdout] 103 | impl Animation {
[INFO] [stdout]     | -------------- method in this implementation
[INFO] [stdout] 104 |     pub fn compute_value_at(&self, property: &str, progress: f32) -> Option<String> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `Gradient` is never used
[INFO] [stdout]    --> src/engine/css_advanced.rs:145:10
[INFO] [stdout]     |
[INFO] [stdout] 145 | pub enum Gradient {
[INFO] [stdout]     |          ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `sample_color_at` is never used
[INFO] [stdout]    --> src/engine/css_advanced.rs:150:12
[INFO] [stdout]     |
[INFO] [stdout] 149 | impl Gradient {
[INFO] [stdout]     | ------------- method in this implementation
[INFO] [stdout] 150 |     pub fn sample_color_at(&self, position: f32) -> [u8; 4] {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `lerp_u8` is never used
[INFO] [stdout]    --> src/engine/css_advanced.rs:178:4
[INFO] [stdout]     |
[INFO] [stdout] 178 | fn lerp_u8(a: u8, b: u8, t: f32) -> u8 {
[INFO] [stdout]     |    ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `BoxShadow` is never constructed
[INFO] [stdout]    --> src/engine/css_advanced.rs:182:12
[INFO] [stdout]     |
[INFO] [stdout] 182 | pub struct BoxShadow {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `TextShadow` is never constructed
[INFO] [stdout]    --> src/engine/css_advanced.rs:191:12
[INFO] [stdout]     |
[INFO] [stdout] 191 | pub struct TextShadow {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `Filter` is never used
[INFO] [stdout]    --> src/engine/css_advanced.rs:198:10
[INFO] [stdout]     |
[INFO] [stdout] 198 | pub enum Filter {
[INFO] [stdout]     |          ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `Orientation` is never used
[INFO] [stdout]    --> src/engine/css_advanced.rs:211:10
[INFO] [stdout]     |
[INFO] [stdout] 211 | pub enum Orientation { Portrait, Landscape }
[INFO] [stdout]     |          ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `ColorScheme` is never used
[INFO] [stdout]    --> src/engine/css_advanced.rs:213:10
[INFO] [stdout]     |
[INFO] [stdout] 213 | pub enum ColorScheme { Light, Dark }
[INFO] [stdout]     |          ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `MediaCondition` is never used
[INFO] [stdout]    --> src/engine/css_advanced.rs:215:10
[INFO] [stdout]     |
[INFO] [stdout] 215 | pub enum MediaCondition {
[INFO] [stdout]     |          ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `MediaQuery` is never constructed
[INFO] [stdout]    --> src/engine/css_advanced.rs:225:12
[INFO] [stdout]     |
[INFO] [stdout] 225 | pub struct MediaQuery {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `evaluate` is never used
[INFO] [stdout]    --> src/engine/css_advanced.rs:229:12
[INFO] [stdout]     |
[INFO] [stdout] 228 | impl MediaQuery {
[INFO] [stdout]     | --------------- method in this implementation
[INFO] [stdout] 229 |     pub fn evaluate(&self, viewport_w: f32, viewport_h: f32, is_dark: bool) -> bool {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `CssVars` is never constructed
[INFO] [stdout]    --> src/engine/css_advanced.rs:247:12
[INFO] [stdout]     |
[INFO] [stdout] 247 | pub struct CssVars {
[INFO] [stdout]     |            ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new`, `set`, `resolve_var`, and `resolve_value` are never used
[INFO] [stdout]    --> src/engine/css_advanced.rs:251:12
[INFO] [stdout]     |
[INFO] [stdout] 250 | impl CssVars {
[INFO] [stdout]     | ------------ associated items in this implementation
[INFO] [stdout] 251 |     pub fn new() -> Self { Self { vars: HashMap::new() } }
[INFO] [stdout]     |            ^^^
[INFO] [stdout] 252 |     pub fn set(&mut self, name: &str, value: &str) { self.vars.insert(name.to_string(), value.to_string()); }
[INFO] [stdout]     |            ^^^
[INFO] [stdout] 253 |     pub fn resolve_var(&self, name: &str) -> Option<String> {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 257 |     pub fn resolve_value(&self, value: &str) -> String {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `parse_calc` is never used
[INFO] [stdout]    --> src/engine/css_advanced.rs:272:8
[INFO] [stdout]     |
[INFO] [stdout] 272 | pub fn parse_calc(expr: &str) -> f32 {
[INFO] [stdout]     |        ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `eval_calc_expr` is never used
[INFO] [stdout]    --> src/engine/css_advanced.rs:277:4
[INFO] [stdout]     |
[INFO] [stdout] 277 | fn eval_calc_expr(expr: &str) -> f32 {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `strip_parens` is never used
[INFO] [stdout]    --> src/engine/css_advanced.rs:321:4
[INFO] [stdout]     |
[INFO] [stdout] 321 | fn strip_parens(s: &str) -> Option<&str> {
[INFO] [stdout]     |    ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `parse_calc_value` is never used
[INFO] [stdout]    --> src/engine/css_advanced.rs:337:4
[INFO] [stdout]     |
[INFO] [stdout] 337 | fn parse_calc_value(s: &str) -> f32 {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `parse_transform` is never used
[INFO] [stdout]    --> src/engine/css_advanced.rs:347:8
[INFO] [stdout]     |
[INFO] [stdout] 347 | pub fn parse_transform(s: &str) -> Transform {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `parse_gradient` is never used
[INFO] [stdout]    --> src/engine/css_advanced.rs:387:8
[INFO] [stdout]     |
[INFO] [stdout] 387 | pub fn parse_gradient(s: &str) -> Option<Gradient> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `split_gradient_args` is never used
[INFO] [stdout]    --> src/engine/css_advanced.rs:437:4
[INFO] [stdout]     |
[INFO] [stdout] 437 | fn split_gradient_args(s: &str) -> Vec<&str> {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `parse_color_stop` is never used
[INFO] [stdout]    --> src/engine/css_advanced.rs:452:4
[INFO] [stdout]     |
[INFO] [stdout] 452 | fn parse_color_stop(s: &str) -> ([u8; 4], Option<f32>) {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `parse_stop_position` is never used
[INFO] [stdout]    --> src/engine/css_advanced.rs:479:4
[INFO] [stdout]     |
[INFO] [stdout] 479 | fn parse_stop_position(s: &str) -> Option<f32> {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `parse_hex_color` is never used
[INFO] [stdout]    --> src/engine/css_advanced.rs:485:4
[INFO] [stdout]     |
[INFO] [stdout] 485 | fn parse_hex_color(s: &str) -> [u8; 4] {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `parse_rgb_color` is never used
[INFO] [stdout]    --> src/engine/css_advanced.rs:507:4
[INFO] [stdout]     |
[INFO] [stdout] 507 | fn parse_rgb_color(s: &str) -> [u8; 4] {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `parse_box_shadow` is never used
[INFO] [stdout]    --> src/engine/css_advanced.rs:520:8
[INFO] [stdout]     |
[INFO] [stdout] 520 | pub fn parse_box_shadow(s: &str) -> Option<BoxShadow> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `parse_filter` is never used
[INFO] [stdout]    --> src/engine/css_advanced.rs:554:8
[INFO] [stdout]     |
[INFO] [stdout] 554 | pub fn parse_filter(s: &str) -> Vec<Filter> {
[INFO] [stdout]     |        ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `parse_transition` is never used
[INFO] [stdout]    --> src/engine/css_advanced.rs:592:8
[INFO] [stdout]     |
[INFO] [stdout] 592 | pub fn parse_transition(s: &str) -> Vec<Transition> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `parse_time_ms` is never used
[INFO] [stdout]    --> src/engine/css_advanced.rs:603:4
[INFO] [stdout]     |
[INFO] [stdout] 603 | fn parse_time_ms(s: &str) -> f32 {
[INFO] [stdout]     |    ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `parse_timing_fn` is never used
[INFO] [stdout]    --> src/engine/css_advanced.rs:608:4
[INFO] [stdout]     |
[INFO] [stdout] 608 | fn parse_timing_fn(s: &str) -> TimingFunction {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `MediaQueryList` is never constructed
[INFO] [stdout]    --> src/engine/css_advanced.rs:625:12
[INFO] [stdout]     |
[INFO] [stdout] 625 | pub struct MediaQueryList {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `evaluate_all` is never used
[INFO] [stdout]    --> src/engine/css_advanced.rs:629:12
[INFO] [stdout]     |
[INFO] [stdout] 628 | impl MediaQueryList {
[INFO] [stdout]     | ------------------- method in this implementation
[INFO] [stdout] 629 |     pub fn evaluate_all(&self, vw: f32, vh: f32, is_dark: bool) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `parse_media_condition` is never used
[INFO] [stdout]    --> src/engine/css_advanced.rs:634:4
[INFO] [stdout]     |
[INFO] [stdout] 634 | fn parse_media_condition(cond: &str) -> Option<MediaCondition> {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `parse_px_value` is never used
[INFO] [stdout]    --> src/engine/css_advanced.rs:664:4
[INFO] [stdout]     |
[INFO] [stdout] 664 | fn parse_px_value(s: &str) -> Option<f32> {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `parse_media_query_str` is never used
[INFO] [stdout]    --> src/engine/css_advanced.rs:669:4
[INFO] [stdout]     |
[INFO] [stdout] 669 | fn parse_media_query_str(s: &str) -> MediaQuery {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `evaluate_media_queries` is never used
[INFO] [stdout]    --> src/engine/css_advanced.rs:678:8
[INFO] [stdout]     |
[INFO] [stdout] 678 | pub fn evaluate_media_queries(css: &str, viewport_width: f32, viewport_height: f32, _dpr: f32) -> String {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `PlayState` is never used
[INFO] [stdout]  --> src/engine/animations.rs:5:10
[INFO] [stdout]   |
[INFO] [stdout] 5 | pub enum PlayState { Running, Paused }
[INFO] [stdout]   |          ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `AnimationUpdate` is never constructed
[INFO] [stdout]  --> src/engine/animations.rs:8:12
[INFO] [stdout]   |
[INFO] [stdout] 8 | pub struct AnimationUpdate {
[INFO] [stdout]   |            ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ActiveTransition` is never constructed
[INFO] [stdout]   --> src/engine/animations.rs:16:12
[INFO] [stdout]    |
[INFO] [stdout] 16 | pub struct ActiveTransition {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `interpolate` and `is_complete` are never used
[INFO] [stdout]   --> src/engine/animations.rs:28:12
[INFO] [stdout]    |
[INFO] [stdout] 27 | impl ActiveTransition {
[INFO] [stdout]    | --------------------- methods in this implementation
[INFO] [stdout] 28 |     pub fn interpolate(&self) -> f32 {
[INFO] [stdout]    |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 37 |     fn is_complete(&self) -> bool {
[INFO] [stdout]    |        ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ActiveAnimation` is never constructed
[INFO] [stdout]   --> src/engine/animations.rs:43:12
[INFO] [stdout]    |
[INFO] [stdout] 43 | pub struct ActiveAnimation {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `progress` and `is_complete` are never used
[INFO] [stdout]   --> src/engine/animations.rs:58:12
[INFO] [stdout]    |
[INFO] [stdout] 57 | impl ActiveAnimation {
[INFO] [stdout]    | -------------------- methods in this implementation
[INFO] [stdout] 58 |     pub fn progress(&self) -> f32 {
[INFO] [stdout]    |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 85 |     fn is_complete(&self) -> bool {
[INFO] [stdout]    |        ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `KeyframeStop` is never constructed
[INFO] [stdout]   --> src/engine/animations.rs:94:12
[INFO] [stdout]    |
[INFO] [stdout] 94 | pub struct KeyframeStop {
[INFO] [stdout]    |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `Keyframes` is never constructed
[INFO] [stdout]    --> src/engine/animations.rs:100:12
[INFO] [stdout]     |
[INFO] [stdout] 100 | pub struct Keyframes {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `interpolate_property` and `properties` are never used
[INFO] [stdout]    --> src/engine/animations.rs:106:12
[INFO] [stdout]     |
[INFO] [stdout] 105 | impl Keyframes {
[INFO] [stdout]     | -------------- methods in this implementation
[INFO] [stdout] 106 |     pub fn interpolate_property(&self, property: &str, progress: f32) -> Option<f32> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 124 |     pub fn properties(&self) -> Vec<String> {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `AnimationController` is never constructed
[INFO] [stdout]    --> src/engine/animations.rs:133:12
[INFO] [stdout]     |
[INFO] [stdout] 133 | pub struct AnimationController {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/engine/animations.rs:140:12
[INFO] [stdout]     |
[INFO] [stdout] 139 | impl AnimationController {
[INFO] [stdout]     | ------------------------ associated items in this implementation
[INFO] [stdout] 140 |     pub fn new() -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 148 |     pub fn register_keyframes(&mut self, name: &str, css: &str) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 153 |     pub fn start_transition(
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 165 |     pub fn start_animation(
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 179 |     pub fn tick(&mut self, delta_ms: f64) -> Vec<AnimationUpdate> {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 229 |     pub fn has_active_animations(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 233 |     pub fn cancel_animations(&mut self, node_id: usize) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 237 |     pub fn cancel_transitions(&mut self, node_id: usize) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 241 |     pub fn active_count(&self) -> usize {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `evaluate` is never used
[INFO] [stdout]    --> src/engine/animations.rs:247:8
[INFO] [stdout]     |
[INFO] [stdout] 247 | pub fn evaluate(easing: &TimingFunction, t: f32) -> f32 {
[INFO] [stdout]     |        ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `parse_keyframe_block` is never used
[INFO] [stdout]    --> src/engine/animations.rs:251:4
[INFO] [stdout]     |
[INFO] [stdout] 251 | fn parse_keyframe_block(css: &str) -> Vec<KeyframeStop> {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `parse_keyframe_selector` is never used
[INFO] [stdout]    --> src/engine/animations.rs:273:4
[INFO] [stdout]     |
[INFO] [stdout] 273 | fn parse_keyframe_selector(s: &str) -> Vec<f32> {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `parse_declarations` is never used
[INFO] [stdout]    --> src/engine/animations.rs:287:4
[INFO] [stdout]     |
[INFO] [stdout] 287 | fn parse_declarations(body: &str) -> HashMap<String, String> {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `parse_keyframes_from_css` is never used
[INFO] [stdout]    --> src/engine/animations.rs:301:8
[INFO] [stdout]     |
[INFO] [stdout] 301 | pub fn parse_keyframes_from_css(css: &str) -> Vec<Keyframes> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple variants are never constructed
[INFO] [stdout]  --> src/engine/forms.rs:5:5
[INFO] [stdout]   |
[INFO] [stdout] 4 | pub enum FormElementType {
[INFO] [stdout]   |          --------------- variants in this enum
[INFO] [stdout] 5 |     TextInput, Password, Email, Number, Search, Tel, Url,
[INFO] [stdout]   |     ^^^^^^^^^  ^^^^^^^^  ^^^^^  ^^^^^^  ^^^^^^  ^^^  ^^^
[INFO] [stdout] 6 |     Textarea, Checkbox, Radio, Select, Button, Submit, Reset,
[INFO] [stdout]   |     ^^^^^^^^  ^^^^^^^^  ^^^^^  ^^^^^^  ^^^^^^  ^^^^^^  ^^^^^
[INFO] [stdout] 7 |     File, Range, Color, Date, Hidden,
[INFO] [stdout]   |     ^^^^  ^^^^^  ^^^^^  ^^^^  ^^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `FormElementType` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `value`, `label`, and `selected` are never read
[INFO] [stdout]   --> src/engine/forms.rs:11:9
[INFO] [stdout]    |
[INFO] [stdout] 10 | pub struct SelectOption {
[INFO] [stdout]    |            ------------ fields in this struct
[INFO] [stdout] 11 |     pub value: String,
[INFO] [stdout]    |         ^^^^^
[INFO] [stdout] 12 |     pub label: String,
[INFO] [stdout]    |         ^^^^^
[INFO] [stdout] 13 |     pub selected: bool,
[INFO] [stdout]    |         ^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `SelectOption` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple fields are never read
[INFO] [stdout]   --> src/engine/forms.rs:17:9
[INFO] [stdout]    |
[INFO] [stdout] 16 | pub struct FormElement {
[INFO] [stdout]    |            ----------- fields in this struct
[INFO] [stdout] 17 |     pub id: String,
[INFO] [stdout]    |         ^^
[INFO] [stdout] 18 |     pub element_type: FormElementType,
[INFO] [stdout]    |         ^^^^^^^^^^^^
[INFO] [stdout] 19 |     pub name: String,
[INFO] [stdout]    |         ^^^^
[INFO] [stdout] 20 |     pub value: String,
[INFO] [stdout]    |         ^^^^^
[INFO] [stdout] 21 |     pub placeholder: String,
[INFO] [stdout]    |         ^^^^^^^^^^^
[INFO] [stdout] 22 |     pub checked: bool,
[INFO] [stdout]    |         ^^^^^^^
[INFO] [stdout] 23 |     pub disabled: bool,
[INFO] [stdout]    |         ^^^^^^^^
[INFO] [stdout] 24 |     pub readonly: bool,
[INFO] [stdout]    |         ^^^^^^^^
[INFO] [stdout] 25 |     pub min: f32,
[INFO] [stdout]    |         ^^^
[INFO] [stdout] 26 |     pub max: f32,
[INFO] [stdout]    |         ^^^
[INFO] [stdout] 27 |     pub step: f32,
[INFO] [stdout]    |         ^^^^
[INFO] [stdout] 28 |     pub options: Vec<SelectOption>,
[INFO] [stdout]    |         ^^^^^^^
[INFO] [stdout] 29 |     pub selected_index: usize,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^
[INFO] [stdout] 30 |     pub focus: bool,
[INFO] [stdout]    |         ^^^^^
[INFO] [stdout] 31 |     pub cursor_pos: usize,
[INFO] [stdout]    |         ^^^^^^^^^^
[INFO] [stdout] 32 |     pub selection_start: usize,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^
[INFO] [stdout] 33 |     pub selection_end: usize,
[INFO] [stdout]    |         ^^^^^^^^^^^^^
[INFO] [stdout] 34 |     pub form_id: String,
[INFO] [stdout]    |         ^^^^^^^
[INFO] [stdout] 35 |     pub scroll_offset: f32,
[INFO] [stdout]    |         ^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `FormElement` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `new` is never used
[INFO] [stdout]   --> src/engine/forms.rs:38:12
[INFO] [stdout]    |
[INFO] [stdout] 37 | impl FormElement {
[INFO] [stdout]    | ---------------- associated function in this implementation
[INFO] [stdout] 38 |     pub fn new(id: &str, element_type: FormElementType) -> Self {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ValidationResult` is never constructed
[INFO] [stdout]   --> src/engine/forms.rs:49:12
[INFO] [stdout]    |
[INFO] [stdout] 49 | pub struct ValidationResult {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `elements`, `active_form_id`, and `focused_element_id` are never read
[INFO] [stdout]   --> src/engine/forms.rs:54:9
[INFO] [stdout]    |
[INFO] [stdout] 53 | pub struct FormState {
[INFO] [stdout]    |            --------- fields in this struct
[INFO] [stdout] 54 |     pub elements: HashMap<String, FormElement>,
[INFO] [stdout]    |         ^^^^^^^^
[INFO] [stdout] 55 |     pub active_form_id: Option<String>,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^
[INFO] [stdout] 56 |     pub focused_element_id: Option<String>,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple methods are never used
[INFO] [stdout]    --> src/engine/forms.rs:62:12
[INFO] [stdout]     |
[INFO] [stdout]  58 | impl FormState {
[INFO] [stdout]     | -------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout]  62 |     pub fn add_element(&mut self, elem: FormElement) {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  65 |     pub fn handle_key_input(&mut self, element_id: &str, key: &str, shift: bool, ctrl: bool) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 199 |     pub fn handle_click(&mut self, element_id: &str, _x: f32, _y: f32) {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 213 |     pub fn handle_mouse_down(&mut self, element_id: &str, x: f32, _y: f32) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 222 |     pub fn handle_mouse_up(&mut self, _element_id: &str, _x: f32, _y: f32) {}
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] 223 |     pub fn submit_form(&self, form_id: &str) -> HashMap<String, String> {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 247 |     pub fn validate_element(&self, id: &str) -> ValidationResult {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_text_input` is never used
[INFO] [stdout]    --> src/engine/forms.rs:283:8
[INFO] [stdout]     |
[INFO] [stdout] 283 | pub fn render_text_input(elem: &FormElement, x: f32, y: f32, w: f32, h: f32) -> Vec<PaintCommand> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_button` is never used
[INFO] [stdout]    --> src/engine/forms.rs:317:8
[INFO] [stdout]     |
[INFO] [stdout] 317 | pub fn render_button(elem: &FormElement, x: f32, y: f32, w: f32, h: f32) -> Vec<PaintCommand> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_checkbox` is never used
[INFO] [stdout]    --> src/engine/forms.rs:341:8
[INFO] [stdout]     |
[INFO] [stdout] 341 | pub fn render_checkbox(elem: &FormElement, x: f32, y: f32, size: f32) -> Vec<PaintCommand> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_radio` is never used
[INFO] [stdout]    --> src/engine/forms.rs:362:8
[INFO] [stdout]     |
[INFO] [stdout] 362 | pub fn render_radio(elem: &FormElement, x: f32, y: f32, size: f32) -> Vec<PaintCommand> {
[INFO] [stdout]     |        ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_select` is never used
[INFO] [stdout]    --> src/engine/forms.rs:380:8
[INFO] [stdout]     |
[INFO] [stdout] 380 | pub fn render_select(elem: &FormElement, x: f32, y: f32, w: f32, h: f32) -> Vec<PaintCommand> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_textarea` is never used
[INFO] [stdout]    --> src/engine/forms.rs:402:8
[INFO] [stdout]     |
[INFO] [stdout] 402 | pub fn render_textarea(elem: &FormElement, x: f32, y: f32, w: f32, h: f32) -> Vec<PaintCommand> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_range` is never used
[INFO] [stdout]    --> src/engine/forms.rs:448:8
[INFO] [stdout]     |
[INFO] [stdout] 448 | pub fn render_range(elem: &FormElement, x: f32, y: f32, w: f32, h: f32) -> Vec<PaintCommand> {
[INFO] [stdout]     |        ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_progress` is never used
[INFO] [stdout]    --> src/engine/forms.rs:465:8
[INFO] [stdout]     |
[INFO] [stdout] 465 | pub fn render_progress(value: f32, max: f32, x: f32, y: f32, w: f32, h: f32) -> Vec<PaintCommand> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variants `None`, `Capture`, `AtTarget`, and `Bubble` are never constructed
[INFO] [stdout]  --> src/engine/events.rs:4:23
[INFO] [stdout]   |
[INFO] [stdout] 4 | pub enum EventPhase { None, Capture, AtTarget, Bubble }
[INFO] [stdout]   |          ----------   ^^^^  ^^^^^^^  ^^^^^^^^  ^^^^^^
[INFO] [stdout]   |          |
[INFO] [stdout]   |          variants in this enum
[INFO] [stdout]   |
[INFO] [stdout]   = note: `EventPhase` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple variants are never constructed
[INFO] [stdout]   --> src/engine/events.rs:7:5
[INFO] [stdout]    |
[INFO] [stdout]  6 | pub enum EventType {
[INFO] [stdout]    |          --------- variants in this enum
[INFO] [stdout]  7 |     Click, DblClick, MouseDown, MouseUp, MouseMove, MouseEnter, MouseLeave,
[INFO] [stdout]    |     ^^^^^  ^^^^^^^^  ^^^^^^^^^  ^^^^^^^  ^^^^^^^^^  ^^^^^^^^^^  ^^^^^^^^^^
[INFO] [stdout]  8 |     MouseOver, MouseOut, KeyDown, KeyUp, KeyPress, Focus, Blur, FocusIn, FocusOut,
[INFO] [stdout]    |     ^^^^^^^^^  ^^^^^^^^  ^^^^^^^  ^^^^^  ^^^^^^^^  ^^^^^  ^^^^  ^^^^^^^  ^^^^^^^^
[INFO] [stdout]  9 |     Input, Change, Submit, Reset, Scroll, Resize, Load, Unload, Error,
[INFO] [stdout]    |     ^^^^^  ^^^^^^  ^^^^^^  ^^^^^  ^^^^^^  ^^^^^^  ^^^^  ^^^^^^  ^^^^^
[INFO] [stdout] 10 |     DOMContentLoaded, Wheel, ContextMenu, TouchStart, TouchEnd, TouchMove,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^  ^^^^^  ^^^^^^^^^^^  ^^^^^^^^^^  ^^^^^^^^  ^^^^^^^^^
[INFO] [stdout] 11 |     DragStart, Drag, DragEnd, Drop, Paste, Copy, Cut,
[INFO] [stdout]    |     ^^^^^^^^^  ^^^^  ^^^^^^^  ^^^^  ^^^^^  ^^^^  ^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `EventType` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `bubbles` and `cancelable` are never used
[INFO] [stdout]   --> src/engine/events.rs:14:12
[INFO] [stdout]    |
[INFO] [stdout] 13 | impl EventType {
[INFO] [stdout]    | -------------- methods in this implementation
[INFO] [stdout] 14 |     pub fn bubbles(&self) -> bool {
[INFO] [stdout]    |            ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 19 |     pub fn cancelable(&self) -> bool {
[INFO] [stdout]    |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `DomEvent` is never constructed
[INFO] [stdout]   --> src/engine/events.rs:28:12
[INFO] [stdout]    |
[INFO] [stdout] 28 | pub struct DomEvent {
[INFO] [stdout]    |            ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new`, `mouse`, `keyboard`, `prevent_default`, `stop_propagation`, and `stop_immediate_propagation` are never used
[INFO] [stdout]   --> src/engine/events.rs:53:12
[INFO] [stdout]    |
[INFO] [stdout] 52 | impl DomEvent {
[INFO] [stdout]    | ------------- associated items in this implementation
[INFO] [stdout] 53 |     pub fn new(event_type: EventType, target: usize) -> Self {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 64 |     pub fn mouse(event_type: EventType, target: usize, x: f32, y: f32, button: u8) -> Self {
[INFO] [stdout]    |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 69 |     pub fn keyboard(event_type: EventType, target: usize, key: &str, code: u32, shift: bool, ctrl: bool, alt: bool, meta: bool) -> S...
[INFO] [stdout]    |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 75 |     pub fn prevent_default(&mut self) { if self.cancelable { self.default_prevented = true; } }
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^
[INFO] [stdout] 76 |     pub fn stop_propagation(&mut self) { self.propagation_stopped = true; }
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] 77 |     pub fn stop_immediate_propagation(&mut self) {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `callback_id`, `phase`, and `once` are never read
[INFO] [stdout]   --> src/engine/events.rs:84:9
[INFO] [stdout]    |
[INFO] [stdout] 83 | pub struct EventHandler {
[INFO] [stdout]    |            ------------ fields in this struct
[INFO] [stdout] 84 |     pub callback_id: u32,
[INFO] [stdout]    |         ^^^^^^^^^^^
[INFO] [stdout] 85 |     pub phase: EventPhase,
[INFO] [stdout]    |         ^^^^^
[INFO] [stdout] 86 |     pub once: bool,
[INFO] [stdout]    |         ^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `EventHandler` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `handlers`, `node_ancestors`, and `next_callback_id` are never read
[INFO] [stdout]   --> src/engine/events.rs:89:5
[INFO] [stdout]    |
[INFO] [stdout] 88 | pub struct EventDispatcher {
[INFO] [stdout]    |            --------------- fields in this struct
[INFO] [stdout] 89 |     handlers: HashMap<(usize, EventType), Vec<EventHandler>>,
[INFO] [stdout]    |     ^^^^^^^^
[INFO] [stdout] 90 |     node_ancestors: HashMap<usize, Vec<usize>>,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^
[INFO] [stdout] 91 |     next_callback_id: u32,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple methods are never used
[INFO] [stdout]    --> src/engine/events.rs:97:12
[INFO] [stdout]     |
[INFO] [stdout]  93 | impl EventDispatcher {
[INFO] [stdout]     | -------------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout]  97 |     pub fn add_listener(&mut self, node_id: usize, event_type: EventType, use_capture: bool, once: bool) -> u32 {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 105 |     pub fn remove_listener(&mut self, node_id: usize, event_type: EventType, callback_id: u32) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 110 |     pub fn dispatch(&mut self, event: &mut DomEvent) -> Vec<u32> {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 141 |     fn fire_handlers(&self, node_id: usize, event: &mut DomEvent, phase: EventPhase, fired: &mut Vec<u32>, once_removals: &mut Vec<...
[INFO] [stdout]     |        ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 152 |     fn build_path(&self, target: usize) -> Vec<usize> {
[INFO] [stdout]     |        ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 161 |     pub fn set_ancestors(&mut self, node_id: usize, ancestors: Vec<usize>) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 164 |     pub fn clear_node(&mut self, node_id: usize) {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `current_focus` and `tab_order` are never read
[INFO] [stdout]    --> src/engine/events.rs:172:9
[INFO] [stdout]     |
[INFO] [stdout] 171 | pub struct FocusManager {
[INFO] [stdout]     |            ------------ fields in this struct
[INFO] [stdout] 172 |     pub current_focus: Option<usize>,
[INFO] [stdout]     |         ^^^^^^^^^^^^^
[INFO] [stdout] 173 |     pub tab_order: Vec<usize>,
[INFO] [stdout]     |         ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `focus`, `blur`, `tab_next`, `tab_prev`, and `set_tab_order` are never used
[INFO] [stdout]    --> src/engine/events.rs:177:12
[INFO] [stdout]     |
[INFO] [stdout] 175 | impl FocusManager {
[INFO] [stdout]     | ----------------- methods in this implementation
[INFO] [stdout] 176 |     pub fn new() -> Self { Self { current_focus: None, tab_order: Vec::new() } }
[INFO] [stdout] 177 |     pub fn focus(&mut self, node_id: usize, dispatcher: &mut EventDispatcher) -> Vec<DomEvent> {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 197 |     pub fn blur(&mut self, dispatcher: &mut EventDispatcher) -> Vec<DomEvent> {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 209 |     pub fn tab_next(&mut self, dispatcher: &mut EventDispatcher) -> Vec<DomEvent> {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 215 |     pub fn tab_prev(&mut self, dispatcher: &mut EventDispatcher) -> Vec<DomEvent> {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 221 |     pub fn set_tab_order(&mut self, ids: Vec<usize>) { self.tab_order = ids; }
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `HitTester` is never constructed
[INFO] [stdout]    --> src/engine/events.rs:223:12
[INFO] [stdout]     |
[INFO] [stdout] 223 | pub struct HitTester;
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `hit_test` is never used
[INFO] [stdout]    --> src/engine/events.rs:225:12
[INFO] [stdout]     |
[INFO] [stdout] 224 | impl HitTester {
[INFO] [stdout]     | -------------- associated function in this implementation
[INFO] [stdout] 225 |     pub fn hit_test(x: f32, y: f32, layout_rects: &HashMap<usize, LayoutRect>) -> Option<usize> {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variants `Center` and `Right` are never constructed
[INFO] [stdout]  --> src/engine/canvas.rs:3:28
[INFO] [stdout]   |
[INFO] [stdout] 3 | pub enum TextAlign { Left, Center, Right }
[INFO] [stdout]   |          ---------         ^^^^^^  ^^^^^
[INFO] [stdout]   |          |
[INFO] [stdout]   |          variants in this enum
[INFO] [stdout]   |
[INFO] [stdout]   = note: `TextAlign` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variants `Top`, `Middle`, and `Bottom` are never constructed
[INFO] [stdout]  --> src/engine/canvas.rs:5:25
[INFO] [stdout]   |
[INFO] [stdout] 5 | pub enum TextBaseline { Top, Middle, Alphabetic, Bottom }
[INFO] [stdout]   |          ------------   ^^^  ^^^^^^              ^^^^^^
[INFO] [stdout]   |          |
[INFO] [stdout]   |          variants in this enum
[INFO] [stdout]   |
[INFO] [stdout]   = note: `TextBaseline` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple fields are never read
[INFO] [stdout]   --> src/engine/canvas.rs:8:9
[INFO] [stdout]    |
[INFO] [stdout]  7 | pub struct CanvasState {
[INFO] [stdout]    |            ----------- fields in this struct
[INFO] [stdout]  8 |     pub fill_color: [u8; 4],
[INFO] [stdout]    |         ^^^^^^^^^^
[INFO] [stdout]  9 |     pub stroke_color: [u8; 4],
[INFO] [stdout]    |         ^^^^^^^^^^^^
[INFO] [stdout] 10 |     pub line_width: f32,
[INFO] [stdout]    |         ^^^^^^^^^^
[INFO] [stdout] 11 |     pub global_alpha: f32,
[INFO] [stdout]    |         ^^^^^^^^^^^^
[INFO] [stdout] 12 |     pub transform: [f32; 6],
[INFO] [stdout]    |         ^^^^^^^^^
[INFO] [stdout] 13 |     pub clip_rect: Option<(f32, f32, f32, f32)>,
[INFO] [stdout]    |         ^^^^^^^^^
[INFO] [stdout] 14 |     pub font_size: f32,
[INFO] [stdout]    |         ^^^^^^^^^
[INFO] [stdout] 15 |     pub text_align: TextAlign,
[INFO] [stdout]    |         ^^^^^^^^^^
[INFO] [stdout] 16 |     pub text_baseline: TextBaseline,
[INFO] [stdout]    |         ^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `CanvasState` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variants `MoveTo`, `LineTo`, `Arc`, `QuadraticCurveTo`, `BezierCurveTo`, and `ClosePath` are never constructed
[INFO] [stdout]   --> src/engine/canvas.rs:35:5
[INFO] [stdout]    |
[INFO] [stdout] 34 | pub enum PathCommand {
[INFO] [stdout]    |          ----------- variants in this enum
[INFO] [stdout] 35 |     MoveTo(f32, f32),
[INFO] [stdout]    |     ^^^^^^
[INFO] [stdout] 36 |     LineTo(f32, f32),
[INFO] [stdout]    |     ^^^^^^
[INFO] [stdout] 37 |     Arc(f32, f32, f32, f32, f32, bool),
[INFO] [stdout]    |     ^^^
[INFO] [stdout] 38 |     QuadraticCurveTo(f32, f32, f32, f32),
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^
[INFO] [stdout] 39 |     BezierCurveTo(f32, f32, f32, f32, f32, f32),
[INFO] [stdout]    |     ^^^^^^^^^^^^^
[INFO] [stdout] 40 |     ClosePath,
[INFO] [stdout]    |     ^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `PathCommand` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `commands` is never read
[INFO] [stdout]   --> src/engine/canvas.rs:44:9
[INFO] [stdout]    |
[INFO] [stdout] 43 | pub struct Path {
[INFO] [stdout]    |            ---- field in this struct
[INFO] [stdout] 44 |     pub commands: Vec<PathCommand>,
[INFO] [stdout]    |         ^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `Path` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new` and `flatten` are never used
[INFO] [stdout]   --> src/engine/canvas.rs:47:12
[INFO] [stdout]    |
[INFO] [stdout] 46 | impl Path {
[INFO] [stdout]    | --------- associated items in this implementation
[INFO] [stdout] 47 |     pub fn new() -> Self { Self { commands: Vec::new() } }
[INFO] [stdout]    |            ^^^
[INFO] [stdout] 48 |     pub fn flatten(&self, tolerance: f32) -> Vec<(f32, f32)> {
[INFO] [stdout]    |            ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `width`, `height`, `pixels`, `state`, `state_stack`, and `current_path` are never read
[INFO] [stdout]    --> src/engine/canvas.rs:113:9
[INFO] [stdout]     |
[INFO] [stdout] 112 | pub struct Canvas2D {
[INFO] [stdout]     |            -------- fields in this struct
[INFO] [stdout] 113 |     pub width: u32,
[INFO] [stdout]     |         ^^^^^
[INFO] [stdout] 114 |     pub height: u32,
[INFO] [stdout]     |         ^^^^^^
[INFO] [stdout] 115 |     pub pixels: Vec<u8>,
[INFO] [stdout]     |         ^^^^^^
[INFO] [stdout] 116 |     state: CanvasState,
[INFO] [stdout]     |     ^^^^^
[INFO] [stdout] 117 |     state_stack: Vec<CanvasState>,
[INFO] [stdout]     |     ^^^^^^^^^^^
[INFO] [stdout] 118 |     current_path: Path,
[INFO] [stdout]     |     ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/engine/canvas.rs:121:12
[INFO] [stdout]     |
[INFO] [stdout] 120 | impl Canvas2D {
[INFO] [stdout]     | ------------- associated items in this implementation
[INFO] [stdout] 121 |     pub fn new(w: u32, h: u32) -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 125 |     pub fn save(&mut self) { self.state_stack.push(self.state.clone()); }
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] 126 |     pub fn restore(&mut self) { if let Some(s) = self.state_stack.pop() { self.state = s; } }
[INFO] [stdout]     |            ^^^^^^^
[INFO] [stdout] 127 |     pub fn fill_rect(&mut self, x: f32, y: f32, w: f32, h: f32) {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 137 |     pub fn stroke_rect(&mut self, x: f32, y: f32, w: f32, h: f32) {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 145 |     pub fn clear_rect(&mut self, x: f32, y: f32, w: f32, h: f32) {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 155 |     pub fn begin_path(&mut self) { self.current_path = Path::new(); }
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] 156 |     pub fn move_to(&mut self, x: f32, y: f32) { self.current_path.commands.push(PathCommand::MoveTo(x, y)); }
[INFO] [stdout]     |            ^^^^^^^
[INFO] [stdout] 157 |     pub fn line_to(&mut self, x: f32, y: f32) { self.current_path.commands.push(PathCommand::LineTo(x, y)); }
[INFO] [stdout]     |            ^^^^^^^
[INFO] [stdout] 158 |     pub fn arc(&mut self, cx: f32, cy: f32, r: f32, start_angle: f32, end_angle: f32, ccw: bool) {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 161 |     pub fn quadratic_curve_to(&mut self, cpx: f32, cpy: f32, x: f32, y: f32) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 164 |     pub fn bezier_curve_to(&mut self, cp1x: f32, cp1y: f32, cp2x: f32, cp2y: f32, x: f32, y: f32) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 167 |     pub fn close_path(&mut self) { self.current_path.commands.push(PathCommand::ClosePath); }
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] 168 |     pub fn fill(&mut self) {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 197 |     pub fn stroke(&mut self) {
[INFO] [stdout]     |            ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 208 |     pub fn fill_text(&mut self, text: &str, x: f32, y: f32) {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 236 |     pub fn draw_image(&mut self, src_pixels: &[u8], src_w: u32, src_h: u32, dx: f32, dy: f32, dw: f32, dh: f32) {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 264 |     pub fn translate(&mut self, tx: f32, ty: f32) {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 268 |     pub fn rotate(&mut self, angle: f32) {
[INFO] [stdout]     |            ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 278 |     pub fn scale(&mut self, sx: f32, sy: f32) {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 282 |     pub fn set_transform(&mut self, a: f32, b: f32, c: f32, d: f32, e: f32, f: f32) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 285 |     pub fn set_fill_style(&mut self, color: [u8; 4]) { self.state.fill_color = color; }
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] 286 |     pub fn set_stroke_style(&mut self, color: [u8; 4]) { self.state.stroke_color = color; }
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] 287 |     pub fn set_line_width(&mut self, w: f32) { self.state.line_width = w.max(0.0); }
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] 288 |     pub fn set_global_alpha(&mut self, a: f32) { self.state.global_alpha = a.clamp(0.0, 1.0); }
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] 289 |     pub fn set_font_size(&mut self, size: f32) { self.state.font_size = size.max(1.0); }
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] 290 |     pub fn set_text_align(&mut self, align: TextAlign) { self.state.text_align = align; }
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] 291 |     pub fn set_text_baseline(&mut self, baseline: TextBaseline) { self.state.text_baseline = baseline; }
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 292 |     pub fn set_clip_rect(&mut self, x: f32, y: f32, w: f32, h: f32) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 295 |     pub fn get_image_data(&self, x: u32, y: u32, w: u32, h: u32) -> Vec<u8> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 307 |     pub fn put_image_data(&mut self, data: &[u8], x: u32, y: u32) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 325 |     pub fn to_png_bytes(&self) -> Vec<u8> {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 332 |     fn set_pixel(&mut self, x: i32, y: i32, color: &[u8; 4]) {
[INFO] [stdout]     |        ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 351 |     fn set_pixel_direct(&mut self, x: i32, y: i32, color: &[u8; 4]) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 356 |     fn apply_alpha(&self, mut color: [u8; 4]) -> [u8; 4] {
[INFO] [stdout]     |        ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 360 |     fn transform_point(&self, x: f32, y: f32) -> (f32, f32) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 364 |     fn draw_line_internal(&mut self, x0: f32, y0: f32, x1: f32, y1: f32, color: &[u8; 4], width: f32) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 369 |     fn draw_line_raw(&mut self, x0: f32, y0: f32, x1: f32, y1: f32, color: &[u8; 4], width: f32) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `SvgElement` is never used
[INFO] [stdout]  --> src/engine/svg.rs:4:10
[INFO] [stdout]   |
[INFO] [stdout] 4 | pub enum SvgElement {
[INFO] [stdout]   |          ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `SvgNode` is never constructed
[INFO] [stdout]  --> src/engine/svg.rs:9:12
[INFO] [stdout]   |
[INFO] [stdout] 9 | pub struct SvgNode {
[INFO] [stdout]   |            ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new`, `attr_f32`, and `attr_str` are never used
[INFO] [stdout]   --> src/engine/svg.rs:17:12
[INFO] [stdout]    |
[INFO] [stdout] 16 | impl SvgNode {
[INFO] [stdout]    | ------------ associated items in this implementation
[INFO] [stdout] 17 |     pub fn new(element: SvgElement) -> Self {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 20 |     fn attr_f32(&self, name: &str, default: f32) -> f32 {
[INFO] [stdout]    |        ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 23 |     fn attr_str(&self, name: &str) -> &str {
[INFO] [stdout]    |        ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `SvgDocument` is never constructed
[INFO] [stdout]   --> src/engine/svg.rs:28:12
[INFO] [stdout]    |
[INFO] [stdout] 28 | pub struct SvgDocument {
[INFO] [stdout]    |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `PathSegment` is never used
[INFO] [stdout]   --> src/engine/svg.rs:36:10
[INFO] [stdout]    |
[INFO] [stdout] 36 | pub enum PathSegment {
[INFO] [stdout]    |          ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `tag_to_element` is never used
[INFO] [stdout]   --> src/engine/svg.rs:48:4
[INFO] [stdout]    |
[INFO] [stdout] 48 | fn tag_to_element(tag: &str) -> Option<SvgElement> {
[INFO] [stdout]    |    ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `XmlToken` is never constructed
[INFO] [stdout]   --> src/engine/svg.rs:69:8
[INFO] [stdout]    |
[INFO] [stdout] 69 | struct XmlToken {
[INFO] [stdout]    |        ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `tokenize_xml` is never used
[INFO] [stdout]   --> src/engine/svg.rs:76:4
[INFO] [stdout]    |
[INFO] [stdout] 76 | fn tokenize_xml(xml: &str) -> Vec<XmlToken> {
[INFO] [stdout]    |    ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `parse_svg` is never used
[INFO] [stdout]    --> src/engine/svg.rs:147:8
[INFO] [stdout]     |
[INFO] [stdout] 147 | pub fn parse_svg(xml: &str) -> Result<SvgDocument, String> {
[INFO] [stdout]     |        ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `parse_dimension` is never used
[INFO] [stdout]    --> src/engine/svg.rs:199:4
[INFO] [stdout]     |
[INFO] [stdout] 199 | fn parse_dimension(s: &str) -> f32 {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `collect_defs` is never used
[INFO] [stdout]    --> src/engine/svg.rs:203:4
[INFO] [stdout]     |
[INFO] [stdout] 203 | fn collect_defs(node: &SvgNode, defs: &mut HashMap<String, SvgNode>) {
[INFO] [stdout]     |    ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_to_commands` is never used
[INFO] [stdout]    --> src/engine/svg.rs:207:8
[INFO] [stdout]     |
[INFO] [stdout] 207 | pub fn render_to_commands(doc: &SvgDocument) -> Vec<PaintCommand> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `RenderCtx` is never constructed
[INFO] [stdout]    --> src/engine/svg.rs:215:8
[INFO] [stdout]     |
[INFO] [stdout] 215 | struct RenderCtx<'a> {
[INFO] [stdout]     |        ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `tx`, `ty`, `tw`, and `th` are never used
[INFO] [stdout]    --> src/engine/svg.rs:223:8
[INFO] [stdout]     |
[INFO] [stdout] 222 | impl<'a> RenderCtx<'a> {
[INFO] [stdout]     | ---------------------- methods in this implementation
[INFO] [stdout] 223 |     fn tx(&self, x: f32) -> f32 { x * self.scale_x + self.offset_x }
[INFO] [stdout]     |        ^^
[INFO] [stdout] 224 |     fn ty(&self, y: f32) -> f32 { y * self.scale_y + self.offset_y }
[INFO] [stdout]     |        ^^
[INFO] [stdout] 225 |     fn tw(&self, w: f32) -> f32 { w * self.scale_x }
[INFO] [stdout]     |        ^^
[INFO] [stdout] 226 |     fn th(&self, h: f32) -> f32 { h * self.scale_y }
[INFO] [stdout]     |        ^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_node` is never used
[INFO] [stdout]    --> src/engine/svg.rs:228:4
[INFO] [stdout]     |
[INFO] [stdout] 228 | fn render_node(node: &SvgNode, ctx: &RenderCtx, commands: &mut Vec<PaintCommand>) {
[INFO] [stdout]     |    ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_ellipse_fill` is never used
[INFO] [stdout]    --> src/engine/svg.rs:354:4
[INFO] [stdout]     |
[INFO] [stdout] 354 | fn render_ellipse_fill(cx: f32, cy: f32, rx: f32, ry: f32, color: [u8; 4], commands: &mut Vec<PaintCommand>) {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_line` is never used
[INFO] [stdout]    --> src/engine/svg.rs:372:4
[INFO] [stdout]     |
[INFO] [stdout] 372 | fn render_line(x0: f32, y0: f32, x1: f32, y1: f32, width: f32, color: [u8; 4], commands: &mut Vec<PaintCommand>) {
[INFO] [stdout]     |    ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `parse_point_list` is never used
[INFO] [stdout]    --> src/engine/svg.rs:407:4
[INFO] [stdout]     |
[INFO] [stdout] 407 | fn parse_point_list(s: &str) -> Vec<(f32, f32)> {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_polygon_fill` is never used
[INFO] [stdout]    --> src/engine/svg.rs:412:4
[INFO] [stdout]     |
[INFO] [stdout] 412 | fn render_polygon_fill(pts: &[(f32, f32)], ctx: &RenderCtx, color: [u8; 4], commands: &mut Vec<PaintCommand>) {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `parse_path_data` is never used
[INFO] [stdout]    --> src/engine/svg.rs:444:8
[INFO] [stdout]     |
[INFO] [stdout] 444 | pub fn parse_path_data(d: &str) -> Vec<PathSegment> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_path_segments` is never used
[INFO] [stdout]    --> src/engine/svg.rs:518:4
[INFO] [stdout]     |
[INFO] [stdout] 518 | fn render_path_segments(segments: &[PathSegment], ctx: &RenderCtx, fill: Option<[u8; 4]>, stroke: Option<[u8; 4]>, stroke_width: f3...
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `parse_svg_color` is never used
[INFO] [stdout]    --> src/engine/svg.rs:633:8
[INFO] [stdout]     |
[INFO] [stdout] 633 | pub fn parse_svg_color(s: &str) -> [u8; 4] {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `parse_svg_transform` is never used
[INFO] [stdout]    --> src/engine/svg.rs:698:8
[INFO] [stdout]     |
[INFO] [stdout] 698 | pub fn parse_svg_transform(s: &str) -> [f32; 6] {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `multiply_matrices` is never used
[INFO] [stdout]    --> src/engine/svg.rs:748:4
[INFO] [stdout]     |
[INFO] [stdout] 748 | fn multiply_matrices(a: [f32; 6], b: [f32; 6]) -> [f32; 6] {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `FontFormat` is never used
[INFO] [stdout]  --> src/engine/web_fonts.rs:5:10
[INFO] [stdout]   |
[INFO] [stdout] 5 | pub enum FontFormat {
[INFO] [stdout]   |          ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `from_url` and `is_supported` are never used
[INFO] [stdout]   --> src/engine/web_fonts.rs:14:12
[INFO] [stdout]    |
[INFO] [stdout] 13 | impl FontFormat {
[INFO] [stdout]    | --------------- associated items in this implementation
[INFO] [stdout] 14 |     pub fn from_url(url: &str) -> Self {
[INFO] [stdout]    |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 29 |     pub fn is_supported(&self) -> bool {
[INFO] [stdout]    |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `FontFace` is never constructed
[INFO] [stdout]   --> src/engine/web_fonts.rs:36:12
[INFO] [stdout]    |
[INFO] [stdout] 36 | pub struct FontFace {
[INFO] [stdout]    |            ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `FontStyle` is never used
[INFO] [stdout]   --> src/engine/web_fonts.rs:48:10
[INFO] [stdout]    |
[INFO] [stdout] 48 | pub enum FontStyle {
[INFO] [stdout]    |          ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `FontCache` is never constructed
[INFO] [stdout]   --> src/engine/web_fonts.rs:62:12
[INFO] [stdout]    |
[INFO] [stdout] 62 | pub struct FontCache {
[INFO] [stdout]    |            ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/engine/web_fonts.rs:68:12
[INFO] [stdout]     |
[INFO] [stdout]  67 | impl FontCache {
[INFO] [stdout]     | -------------- associated items in this implementation
[INFO] [stdout]  68 |     pub fn new() -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout]  77 |     pub fn request_load(&self, face: &FontFace) -> Option<String> {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  94 |     pub fn store_font(&mut self, family: &str, data: Vec<u8>) {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 107 |     pub fn get_font_data(&self, family: &str, weight: u16) -> Option<&[u8]> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 121 |     pub fn has_font(&self, family: &str) -> bool {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 126 |     pub fn add_faces(&mut self, faces: Vec<FontFace>) {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 131 |     pub fn pending_urls(&self) -> Vec<(String, String)> {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `parse_font_face_rules` is never used
[INFO] [stdout]    --> src/engine/web_fonts.rs:153:8
[INFO] [stdout]     |
[INFO] [stdout] 153 | pub fn parse_font_face_rules(css: &str) -> Vec<FontFace> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `parse_font_face_block` is never used
[INFO] [stdout]    --> src/engine/web_fonts.rs:184:4
[INFO] [stdout]     |
[INFO] [stdout] 184 | fn parse_font_face_block(block: &str) -> FontFace {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `extract_url` is never used
[INFO] [stdout]    --> src/engine/web_fonts.rs:246:4
[INFO] [stdout]     |
[INFO] [stdout] 246 | fn extract_url(val: &str) -> String {
[INFO] [stdout]     |    ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `extract_font_faces_from_css` is never used
[INFO] [stdout]    --> src/engine/web_fonts.rs:266:8
[INFO] [stdout]     |
[INFO] [stdout] 266 | pub fn extract_font_faces_from_css(css: &str) -> (String, Vec<FontFace>) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `Viewport` is never constructed
[INFO] [stdout]  --> src/engine/viewport.rs:2:12
[INFO] [stdout]   |
[INFO] [stdout] 2 | pub struct Viewport {
[INFO] [stdout]   |            ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]   --> src/engine/viewport.rs:13:12
[INFO] [stdout]    |
[INFO] [stdout] 12 | impl Viewport {
[INFO] [stdout]    | ------------- associated items in this implementation
[INFO] [stdout] 13 |     pub fn new(w: f32, h: f32) -> Self {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 17 |     pub fn max_scroll_x(&self) -> f32 { (self.content_width - self.width).max(0.0) }
[INFO] [stdout]    |            ^^^^^^^^^^^^
[INFO] [stdout] 18 |     pub fn max_scroll_y(&self) -> f32 { (self.content_height - self.height).max(0.0) }
[INFO] [stdout]    |            ^^^^^^^^^^^^
[INFO] [stdout] 19 |     pub fn scroll_by(&mut self, dx: f32, dy: f32) {
[INFO] [stdout]    |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 23 |     pub fn scroll_to(&mut self, x: f32, y: f32) {
[INFO] [stdout]    |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 27 |     pub fn scroll_to_element(&mut self, element_y: f32, element_h: f32) {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 34 |     pub fn set_size(&mut self, w: f32, h: f32) {
[INFO] [stdout]    |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 40 |     pub fn set_content_size(&mut self, w: f32, h: f32) {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 46 |     pub fn visible_rect(&self) -> (f32, f32, f32, f32) {
[INFO] [stdout]    |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 49 |     pub fn is_element_visible(&self, x: f32, y: f32, w: f32, h: f32) -> bool {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 53 |     pub fn zoom_in(&mut self) { self.zoom = (self.zoom + 0.1).min(5.0); }
[INFO] [stdout]    |            ^^^^^^^
[INFO] [stdout] 54 |     pub fn zoom_out(&mut self) { self.zoom = (self.zoom - 0.1).max(0.1); }
[INFO] [stdout]    |            ^^^^^^^^
[INFO] [stdout] 55 |     pub fn zoom_reset(&mut self) { self.zoom = 1.0; }
[INFO] [stdout]    |            ^^^^^^^^^^
[INFO] [stdout] 56 |     pub fn scroll_percent_y(&self) -> f32 {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `PageSize` is never used
[INFO] [stdout]  --> src/engine/print.rs:4:10
[INFO] [stdout]   |
[INFO] [stdout] 4 | pub enum PageSize {
[INFO] [stdout]   |          ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `dimensions_mm` is never used
[INFO] [stdout]   --> src/engine/print.rs:11:12
[INFO] [stdout]    |
[INFO] [stdout] 10 | impl PageSize {
[INFO] [stdout]    | ------------- method in this implementation
[INFO] [stdout] 11 |     pub fn dimensions_mm(&self) -> (f32, f32) {
[INFO] [stdout]    |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `Orientation` is never used
[INFO] [stdout]   --> src/engine/print.rs:21:10
[INFO] [stdout]    |
[INFO] [stdout] 21 | pub enum Orientation { Portrait, Landscape }
[INFO] [stdout]    |          ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `PrintMargins` is never constructed
[INFO] [stdout]   --> src/engine/print.rs:23:12
[INFO] [stdout]    |
[INFO] [stdout] 23 | pub struct PrintMargins {
[INFO] [stdout]    |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `default_mm` is never used
[INFO] [stdout]   --> src/engine/print.rs:30:12
[INFO] [stdout]    |
[INFO] [stdout] 29 | impl PrintMargins {
[INFO] [stdout]    | ----------------- associated function in this implementation
[INFO] [stdout] 30 |     pub fn default_mm() -> Self { Self { top: 10.0, right: 10.0, bottom: 10.0, left: 10.0 } }
[INFO] [stdout]    |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `PrintJob` is never constructed
[INFO] [stdout]   --> src/engine/print.rs:33:12
[INFO] [stdout]    |
[INFO] [stdout] 33 | pub struct PrintJob {
[INFO] [stdout]    |            ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new` and `content_dimensions_mm` are never used
[INFO] [stdout]   --> src/engine/print.rs:41:12
[INFO] [stdout]    |
[INFO] [stdout] 40 | impl PrintJob {
[INFO] [stdout]    | ------------- associated items in this implementation
[INFO] [stdout] 41 |     pub fn new(title: &str, url: &str) -> Self {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 45 |     pub fn content_dimensions_mm(&self) -> (f32, f32) {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_page_to_image` is never used
[INFO] [stdout]   --> src/engine/print.rs:54:8
[INFO] [stdout]    |
[INFO] [stdout] 54 | pub fn render_page_to_image(html: &str, css: &[&str], width: f32, height: f32) -> Vec<u8> {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `estimate_page_count` is never used
[INFO] [stdout]   --> src/engine/print.rs:59:8
[INFO] [stdout]    |
[INFO] [stdout] 59 | pub fn estimate_page_count(content_height: f32, page_height: f32) -> usize {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `WindowType` is never used
[INFO] [stdout]  --> src/engine/window_mgmt.rs:6:10
[INFO] [stdout]   |
[INFO] [stdout] 6 | pub enum WindowType {
[INFO] [stdout]   |          ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `WindowRequest` is never constructed
[INFO] [stdout]   --> src/engine/window_mgmt.rs:21:12
[INFO] [stdout]    |
[INFO] [stdout] 21 | pub struct WindowRequest {
[INFO] [stdout]    |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `DialogType` is never used
[INFO] [stdout]   --> src/engine/window_mgmt.rs:47:10
[INFO] [stdout]    |
[INFO] [stdout] 47 | pub enum DialogType {
[INFO] [stdout]    |          ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `DialogResult` is never used
[INFO] [stdout]   --> src/engine/window_mgmt.rs:60:10
[INFO] [stdout]    |
[INFO] [stdout] 60 | pub enum DialogResult {
[INFO] [stdout]    |          ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `WindowInfo` is never constructed
[INFO] [stdout]   --> src/engine/window_mgmt.rs:68:12
[INFO] [stdout]    |
[INFO] [stdout] 68 | pub struct WindowInfo {
[INFO] [stdout]    |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `WindowManager` is never constructed
[INFO] [stdout]   --> src/engine/window_mgmt.rs:81:12
[INFO] [stdout]    |
[INFO] [stdout] 81 | pub struct WindowManager {
[INFO] [stdout]    |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/engine/window_mgmt.rs:91:12
[INFO] [stdout]     |
[INFO] [stdout]  90 | impl WindowManager {
[INFO] [stdout]     | ------------------ associated items in this implementation
[INFO] [stdout]  91 |     pub fn new() -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 104 |     pub fn open_window(&mut self, request: WindowRequest) -> Result<u32, String> {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 140 |     pub fn close_window(&mut self, id: u32) {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 147 |     pub fn get_window(&self, id: u32) -> Option<&WindowInfo> {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 152 |     pub fn list_windows(&self) -> Vec<&WindowInfo> {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 157 |     pub fn show_dialog(&mut self, window_id: u32, dialog: DialogType) {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 162 |     pub fn resolve_dialog(&mut self, result: DialogResult) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 168 |     pub fn pending_dialog(&self) -> Option<&(u32, DialogType)> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 173 |     pub fn is_popup_allowed(&self, origin: &str) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 181 |     pub fn allow_popup_origin(&mut self, origin: &str) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 191 |     pub fn window_open_from_js(
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `parse_window_features` is never used
[INFO] [stdout]    --> src/engine/window_mgmt.rs:242:4
[INFO] [stdout]     |
[INFO] [stdout] 242 | fn parse_window_features(features: &str) -> HashMap<String, String> {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `extract_origin` is never used
[INFO] [stdout]    --> src/engine/window_mgmt.rs:268:4
[INFO] [stdout]     |
[INFO] [stdout] 268 | fn extract_origin(url: &str) -> String {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variant `None` is never constructed
[INFO] [stdout]    --> src/engine/drm_fallback.rs:158:5
[INFO] [stdout]     |
[INFO] [stdout] 152 | pub enum FallbackMethod {
[INFO] [stdout]     |          -------------- variant in this enum
[INFO] [stdout] ...
[INFO] [stdout] 158 |     None,
[INFO] [stdout]     |     ^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `FallbackMethod` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `remove_override` is never used
[INFO] [stdout]    --> src/engine/drm_fallback.rs:251:12
[INFO] [stdout]     |
[INFO] [stdout] 187 | impl DrmFallbackManager {
[INFO] [stdout]     | ----------------------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 251 |     pub fn remove_override(&mut self, domain: &str) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `HistoryState` is never constructed
[INFO] [stdout]  --> src/engine/history_api.rs:1:12
[INFO] [stdout]   |
[INFO] [stdout] 1 | pub struct HistoryState {
[INFO] [stdout]   |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `HistoryEntry` is never constructed
[INFO] [stdout]  --> src/engine/history_api.rs:5:12
[INFO] [stdout]   |
[INFO] [stdout] 5 | pub struct HistoryEntry {
[INFO] [stdout]   |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]   --> src/engine/history_api.rs:11:12
[INFO] [stdout]    |
[INFO] [stdout] 10 | impl HistoryState {
[INFO] [stdout]    | ----------------- associated items in this implementation
[INFO] [stdout] 11 |     pub fn new(initial_url: &str) -> Self {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 17 |     pub fn push_state(&mut self, state: &str, title: &str, url: &str) {
[INFO] [stdout]    |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 22 |     pub fn replace_state(&mut self, state: &str, title: &str, url: &str) {
[INFO] [stdout]    |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 29 |     pub fn go_back(&mut self) -> Option<&HistoryEntry> {
[INFO] [stdout]    |            ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 32 |     pub fn go_forward(&mut self) -> Option<&HistoryEntry> {
[INFO] [stdout]    |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 35 |     pub fn go(&mut self, delta: i32) -> Option<&HistoryEntry> {
[INFO] [stdout]    |            ^^
[INFO] [stdout] ...
[INFO] [stdout] 44 |     pub fn length(&self) -> usize { self.entries.len() }
[INFO] [stdout]    |            ^^^^^^
[INFO] [stdout] 45 |     pub fn current(&self) -> Option<&HistoryEntry> { self.entries.get(self.current_index) }
[INFO] [stdout]    |            ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `WorkerHandle` is never constructed
[INFO] [stdout]  --> src/engine/web_workers.rs:3:12
[INFO] [stdout]   |
[INFO] [stdout] 3 | pub struct WorkerHandle {
[INFO] [stdout]   |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `WorkerManager` is never constructed
[INFO] [stdout]  --> src/engine/web_workers.rs:8:12
[INFO] [stdout]   |
[INFO] [stdout] 8 | pub struct WorkerManager {
[INFO] [stdout]   |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new`, `create_worker`, `post_message`, `terminate`, `drain_messages`, and `worker_count` are never used
[INFO] [stdout]   --> src/engine/web_workers.rs:13:12
[INFO] [stdout]    |
[INFO] [stdout] 12 | impl WorkerManager {
[INFO] [stdout]    | ------------------ associated items in this implementation
[INFO] [stdout] 13 |     pub fn new() -> Self { Self { workers: HashMap::new(), next_id: 1 } }
[INFO] [stdout]    |            ^^^
[INFO] [stdout] 14 |     pub fn create_worker(&mut self, script_url: &str) -> u32 {
[INFO] [stdout]    |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 20 |     pub fn post_message(&mut self, worker_id: u32, message: &str) {
[INFO] [stdout]    |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 25 |     pub fn terminate(&mut self, worker_id: u32) { self.workers.remove(&worker_id); }
[INFO] [stdout]    |            ^^^^^^^^^
[INFO] [stdout] 26 |     pub fn drain_messages(&mut self, worker_id: u32) -> Vec<String> {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 29 |     pub fn worker_count(&self) -> usize { self.workers.len() }
[INFO] [stdout]    |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ClipboardManager` is never constructed
[INFO] [stdout]  --> src/engine/clipboard.rs:2:12
[INFO] [stdout]   |
[INFO] [stdout] 2 | pub struct ClipboardManager {
[INFO] [stdout]   |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new`, `read_text`, `write_text`, and `clear` are never used
[INFO] [stdout]  --> src/engine/clipboard.rs:6:12
[INFO] [stdout]   |
[INFO] [stdout] 5 | impl ClipboardManager {
[INFO] [stdout]   | --------------------- associated items in this implementation
[INFO] [stdout] 6 |     pub fn new() -> Self { Self { clipboard_text: String::new() } }
[INFO] [stdout]   |            ^^^
[INFO] [stdout] 7 |     pub fn read_text(&self) -> &str { &self.clipboard_text }
[INFO] [stdout]   |            ^^^^^^^^^
[INFO] [stdout] 8 |     pub fn write_text(&mut self, text: &str) { self.clipboard_text = text.to_string(); }
[INFO] [stdout]   |            ^^^^^^^^^^
[INFO] [stdout] 9 |     pub fn clear(&mut self) { self.clipboard_text.clear(); }
[INFO] [stdout]   |            ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `read_system_clipboard` is never used
[INFO] [stdout]   --> src/engine/clipboard.rs:11:8
[INFO] [stdout]    |
[INFO] [stdout] 11 | pub fn read_system_clipboard() -> Option<String> {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `write_system_clipboard` is never used
[INFO] [stdout]   --> src/engine/clipboard.rs:22:8
[INFO] [stdout]    |
[INFO] [stdout] 22 | pub fn write_system_clipboard(text: &str) -> bool {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `GeolocationResult` is never constructed
[INFO] [stdout]  --> src/engine/web_apis.rs:4:12
[INFO] [stdout]   |
[INFO] [stdout] 4 | pub struct GeolocationResult {
[INFO] [stdout]   |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `GeolocationApi` is never constructed
[INFO] [stdout]   --> src/engine/web_apis.rs:10:12
[INFO] [stdout]    |
[INFO] [stdout] 10 | pub struct GeolocationApi;
[INFO] [stdout]    |            ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `get_position` is never used
[INFO] [stdout]   --> src/engine/web_apis.rs:12:12
[INFO] [stdout]    |
[INFO] [stdout] 11 | impl GeolocationApi {
[INFO] [stdout]    | ------------------- associated function in this implementation
[INFO] [stdout] 12 |     pub fn get_position() -> GeolocationResult {
[INFO] [stdout]    |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `NotificationsApi` is never constructed
[INFO] [stdout]   --> src/engine/web_apis.rs:16:12
[INFO] [stdout]    |
[INFO] [stdout] 16 | pub struct NotificationsApi;
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated functions `request_permission` and `show_notification` are never used
[INFO] [stdout]   --> src/engine/web_apis.rs:18:12
[INFO] [stdout]    |
[INFO] [stdout] 17 | impl NotificationsApi {
[INFO] [stdout]    | --------------------- associated functions in this implementation
[INFO] [stdout] 18 |     pub fn request_permission() -> String { "denied".to_string() }
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 19 |     pub fn show_notification(_title: &str, _body: &str) -> bool { false }
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `PerformanceApi` is never constructed
[INFO] [stdout]   --> src/engine/web_apis.rs:21:12
[INFO] [stdout]    |
[INFO] [stdout] 21 | pub struct PerformanceApi {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new`, `mark`, `measure`, `now`, `navigation_start`, and `now_internal` are never used
[INFO] [stdout]   --> src/engine/web_apis.rs:27:12
[INFO] [stdout]    |
[INFO] [stdout] 26 | impl PerformanceApi {
[INFO] [stdout]    | ------------------- associated items in this implementation
[INFO] [stdout] 27 |     pub fn new() -> Self {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 31 |     pub fn mark(&mut self, name: &str) {
[INFO] [stdout]    |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 35 |     pub fn measure(&self, _name: &str, start_mark: &str, end_mark: &str) -> Option<f64> {
[INFO] [stdout]    |            ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 40 |     pub fn now() -> f64 {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 43 |     pub fn navigation_start(&self) -> f64 { self.navigation_start_ms }
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] 44 |     fn now_internal(&self) -> f64 { self.start.elapsed().as_secs_f64() * 1000.0 }
[INFO] [stdout]    |        ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `IntersectionEntry` is never constructed
[INFO] [stdout]   --> src/engine/web_apis.rs:47:12
[INFO] [stdout]    |
[INFO] [stdout] 47 | pub struct IntersectionEntry {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `IntersectionObserverStub` is never constructed
[INFO] [stdout]   --> src/engine/web_apis.rs:52:12
[INFO] [stdout]    |
[INFO] [stdout] 52 | pub struct IntersectionObserverStub {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new`, `observe`, `unobserve`, and `check_intersections` are never used
[INFO] [stdout]   --> src/engine/web_apis.rs:57:12
[INFO] [stdout]    |
[INFO] [stdout] 56 | impl IntersectionObserverStub {
[INFO] [stdout]    | ----------------------------- associated items in this implementation
[INFO] [stdout] 57 |     pub fn new() -> Self { Self { entries: Vec::new(), observed: Vec::new() } }
[INFO] [stdout]    |            ^^^
[INFO] [stdout] 58 |     pub fn observe(&mut self, target_id: usize) {
[INFO] [stdout]    |            ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 61 |     pub fn unobserve(&mut self, target_id: usize) { self.observed.retain(|&id| id != target_id); }
[INFO] [stdout]    |            ^^^^^^^^^
[INFO] [stdout] 62 |     pub fn check_intersections(&self, viewport_rect: &(f32, f32, f32, f32), layouts: &HashMap<usize, crate::engine::layout::LayoutRe...
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `ServiceWorkerState` is never used
[INFO] [stdout]  --> src/engine/service_workers.rs:4:10
[INFO] [stdout]   |
[INFO] [stdout] 4 | pub enum ServiceWorkerState {
[INFO] [stdout]   |          ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ServiceWorkerRegistration` is never constructed
[INFO] [stdout]   --> src/engine/service_workers.rs:13:12
[INFO] [stdout]    |
[INFO] [stdout] 13 | pub struct ServiceWorkerRegistration {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ServiceWorkerResponse` is never constructed
[INFO] [stdout]   --> src/engine/service_workers.rs:21:12
[INFO] [stdout]    |
[INFO] [stdout] 21 | pub struct ServiceWorkerResponse {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ServiceWorkerManager` is never constructed
[INFO] [stdout]   --> src/engine/service_workers.rs:27:12
[INFO] [stdout]    |
[INFO] [stdout] 27 | pub struct ServiceWorkerManager {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]   --> src/engine/service_workers.rs:32:12
[INFO] [stdout]    |
[INFO] [stdout] 31 | impl ServiceWorkerManager {
[INFO] [stdout]    | ------------------------- associated items in this implementation
[INFO] [stdout] 32 |     pub fn new() -> Self { Self { registrations: HashMap::new() } }
[INFO] [stdout]    |            ^^^
[INFO] [stdout] 33 |
[INFO] [stdout] 34 |     pub fn register(&mut self, scope: &str, script_url: &str) -> String {
[INFO] [stdout]    |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 49 |     pub fn unregister(&mut self, scope: &str) -> bool {
[INFO] [stdout]    |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 53 |     pub fn get_registration(&self, scope: &str) -> Option<&ServiceWorkerRegistration> {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 57 |     pub fn get_registrations(&self) -> Vec<&ServiceWorkerRegistration> {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 61 |     pub fn matches_scope(&self, url: &str) -> Option<&ServiceWorkerRegistration> {
[INFO] [stdout]    |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 73 |     pub fn intercept_fetch(&self, _url: &str, _method: &str) -> Option<ServiceWorkerResponse> {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 77 |     pub fn registration_count(&self) -> usize { self.registrations.len() }
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `IdbIndex` is never constructed
[INFO] [stdout]  --> src/engine/indexeddb.rs:5:12
[INFO] [stdout]   |
[INFO] [stdout] 5 | pub struct IdbIndex {
[INFO] [stdout]   |            ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `IdbObjectStore` is never constructed
[INFO] [stdout]   --> src/engine/indexeddb.rs:12:12
[INFO] [stdout]    |
[INFO] [stdout] 12 | pub struct IdbObjectStore {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple methods are never used
[INFO] [stdout]   --> src/engine/indexeddb.rs:21:12
[INFO] [stdout]    |
[INFO] [stdout] 20 | impl IdbObjectStore {
[INFO] [stdout]    | ------------------- methods in this implementation
[INFO] [stdout] 21 |     pub fn put(&mut self, key: &str, value: Value) {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 25 |     pub fn get(&self, key: &str) -> Option<&Value> {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 29 |     pub fn delete(&mut self, key: &str) -> bool {
[INFO] [stdout]    |            ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 33 |     pub fn clear(&mut self) {
[INFO] [stdout]    |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 37 |     pub fn count(&self) -> usize {
[INFO] [stdout]    |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 41 |     pub fn get_all(&self) -> Vec<(&String, &Value)> {
[INFO] [stdout]    |            ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 45 |     pub fn create_index(&mut self, name: &str, key_path: &str, unique: bool) {
[INFO] [stdout]    |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `IdbDatabase` is never constructed
[INFO] [stdout]   --> src/engine/indexeddb.rs:55:12
[INFO] [stdout]    |
[INFO] [stdout] 55 | pub struct IdbDatabase {
[INFO] [stdout]    |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `create_object_store`, `delete_object_store`, and `object_store_names` are never used
[INFO] [stdout]   --> src/engine/indexeddb.rs:62:12
[INFO] [stdout]    |
[INFO] [stdout] 61 | impl IdbDatabase {
[INFO] [stdout]    | ---------------- methods in this implementation
[INFO] [stdout] 62 |     pub fn create_object_store(&mut self, name: &str, key_path: Option<&str>, auto_increment: bool) -> &mut IdbObjectStore {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 73 |     pub fn delete_object_store(&mut self, name: &str) -> bool {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 77 |     pub fn object_store_names(&self) -> Vec<String> {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `IdbManager` is never constructed
[INFO] [stdout]   --> src/engine/indexeddb.rs:82:12
[INFO] [stdout]    |
[INFO] [stdout] 82 | pub struct IdbManager {
[INFO] [stdout]    |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new`, `make_key`, `open`, `delete_database`, and `list_databases` are never used
[INFO] [stdout]    --> src/engine/indexeddb.rs:87:12
[INFO] [stdout]     |
[INFO] [stdout]  86 | impl IdbManager {
[INFO] [stdout]     | --------------- associated items in this implementation
[INFO] [stdout]  87 |     pub fn new() -> Self { Self { databases: HashMap::new() } }
[INFO] [stdout]     |            ^^^
[INFO] [stdout]  88 |
[INFO] [stdout]  89 |     fn make_key(origin: &str, name: &str) -> String {
[INFO] [stdout]     |        ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  93 |     pub fn open(&mut self, origin: &str, name: &str, version: u32) -> &mut IdbDatabase {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 102 |     pub fn delete_database(&mut self, origin: &str, name: &str) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 107 |     pub fn list_databases(&self, origin: &str) -> Vec<String> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `IceCandidate` is never constructed
[INFO] [stdout]  --> src/engine/webrtc.rs:4:12
[INFO] [stdout]   |
[INFO] [stdout] 4 | pub struct IceCandidate {
[INFO] [stdout]   |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `SdpType` is never used
[INFO] [stdout]   --> src/engine/webrtc.rs:11:10
[INFO] [stdout]    |
[INFO] [stdout] 11 | pub enum SdpType { Offer, Answer, Pranswer, Rollback }
[INFO] [stdout]    |          ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `SessionDescription` is never constructed
[INFO] [stdout]   --> src/engine/webrtc.rs:14:12
[INFO] [stdout]    |
[INFO] [stdout] 14 | pub struct SessionDescription {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `RtcSignalingState` is never used
[INFO] [stdout]   --> src/engine/webrtc.rs:20:10
[INFO] [stdout]    |
[INFO] [stdout] 20 | pub enum RtcSignalingState {
[INFO] [stdout]    |          ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `RtcIceConnectionState` is never used
[INFO] [stdout]   --> src/engine/webrtc.rs:26:10
[INFO] [stdout]    |
[INFO] [stdout] 26 | pub enum RtcIceConnectionState {
[INFO] [stdout]    |          ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `DataChannelState` is never used
[INFO] [stdout]   --> src/engine/webrtc.rs:31:10
[INFO] [stdout]    |
[INFO] [stdout] 31 | pub enum DataChannelState { Connecting, Open, Closing, Closed }
[INFO] [stdout]    |          ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `RtcDataChannel` is never constructed
[INFO] [stdout]   --> src/engine/webrtc.rs:34:12
[INFO] [stdout]    |
[INFO] [stdout] 34 | pub struct RtcDataChannel {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `send`, `close`, and `drain_messages` are never used
[INFO] [stdout]   --> src/engine/webrtc.rs:42:12
[INFO] [stdout]    |
[INFO] [stdout] 41 | impl RtcDataChannel {
[INFO] [stdout]    | ------------------- methods in this implementation
[INFO] [stdout] 42 |     pub fn send(&mut self, msg: &str) {
[INFO] [stdout]    |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 48 |     pub fn close(&mut self) {
[INFO] [stdout]    |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 52 |     pub fn drain_messages(&mut self) -> Vec<String> {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `RtcPeerConnection` is never constructed
[INFO] [stdout]   --> src/engine/webrtc.rs:57:12
[INFO] [stdout]    |
[INFO] [stdout] 57 | pub struct RtcPeerConnection {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/engine/webrtc.rs:70:12
[INFO] [stdout]     |
[INFO] [stdout]  69 | impl RtcPeerConnection {
[INFO] [stdout]     | ---------------------- associated items in this implementation
[INFO] [stdout]  70 |     pub fn new() -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout]  84 |     pub fn create_offer(&self) -> SessionDescription {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  95 |     pub fn create_answer(&self) -> SessionDescription {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 106 |     pub fn set_local_description(&mut self, desc: SessionDescription) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 116 |     pub fn set_remote_description(&mut self, desc: SessionDescription) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 126 |     pub fn add_ice_candidate(&mut self, candidate: IceCandidate) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 130 |     pub fn create_data_channel(&mut self, label: &str) -> String {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 139 |     pub fn add_stream(&mut self, stream_id: &str) {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 145 |     pub fn close(&mut self) {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `RtcManager` is never constructed
[INFO] [stdout]    --> src/engine/webrtc.rs:152:12
[INFO] [stdout]     |
[INFO] [stdout] 152 | pub struct RtcManager {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new`, `create_connection`, `get_connection`, `get_connection_mut`, `close_connection`, and `connection_count` are never used
[INFO] [stdout]    --> src/engine/webrtc.rs:157:12
[INFO] [stdout]     |
[INFO] [stdout] 156 | impl RtcManager {
[INFO] [stdout]     | --------------- associated items in this implementation
[INFO] [stdout] 157 |     pub fn new() -> Self { Self { connections: HashMap::new() } }
[INFO] [stdout]     |            ^^^
[INFO] [stdout] 158 |
[INFO] [stdout] 159 |     pub fn create_connection(&mut self) -> String {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 166 |     pub fn get_connection(&self, id: &str) -> Option<&RtcPeerConnection> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 170 |     pub fn get_connection_mut(&mut self, id: &str) -> Option<&mut RtcPeerConnection> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 174 |     pub fn close_connection(&mut self, id: &str) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 178 |     pub fn connection_count(&self) -> usize { self.connections.len() }
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `DisplayMode` is never used
[INFO] [stdout]  --> src/engine/pwa.rs:5:10
[INFO] [stdout]   |
[INFO] [stdout] 5 | pub enum DisplayMode { Fullscreen, Standalone, MinimalUi, Browser }
[INFO] [stdout]   |          ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ManifestIcon` is never constructed
[INFO] [stdout]   --> src/engine/pwa.rs:25:12
[INFO] [stdout]    |
[INFO] [stdout] 25 | pub struct ManifestIcon {
[INFO] [stdout]    |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `WebAppManifest` is never constructed
[INFO] [stdout]   --> src/engine/pwa.rs:34:12
[INFO] [stdout]    |
[INFO] [stdout] 34 | pub struct WebAppManifest {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `InstalledPwa` is never constructed
[INFO] [stdout]   --> src/engine/pwa.rs:53:12
[INFO] [stdout]    |
[INFO] [stdout] 53 | pub struct InstalledPwa {
[INFO] [stdout]    |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `PwaManager` is never constructed
[INFO] [stdout]   --> src/engine/pwa.rs:60:12
[INFO] [stdout]    |
[INFO] [stdout] 60 | pub struct PwaManager {
[INFO] [stdout]    |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/engine/pwa.rs:65:12
[INFO] [stdout]     |
[INFO] [stdout]  64 | impl PwaManager {
[INFO] [stdout]     | --------------- associated items in this implementation
[INFO] [stdout]  65 |     pub fn new() -> Self { Self { installed_apps: HashMap::new() } }
[INFO] [stdout]     |            ^^^
[INFO] [stdout]  66 |
[INFO] [stdout]  67 |     pub fn parse_manifest(json: &str) -> Result<WebAppManifest, String> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  71 |     pub fn detect_manifest_link(html: &str) -> Option<String> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  99 |     pub fn install_app(&mut self, manifest: &WebAppManifest, url: &str) -> String {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 115 |     pub fn uninstall_app(&mut self, id: &str) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 125 |     pub fn is_installed(&self, url: &str) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 129 |     pub fn list_installed(&self) -> Vec<&InstalledPwa> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 133 |     pub fn get_display_mode(&self, url: &str) -> DisplayMode {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `CachedResponse` is never constructed
[INFO] [stdout]  --> src/engine/cache_api.rs:4:12
[INFO] [stdout]   |
[INFO] [stdout] 4 | pub struct CachedResponse {
[INFO] [stdout]   |            ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `Cache` is never constructed
[INFO] [stdout]   --> src/engine/cache_api.rs:12:12
[INFO] [stdout]    |
[INFO] [stdout] 12 | pub struct Cache {
[INFO] [stdout]    |            ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new`, `put`, `match_request`, `match_all`, `delete`, and `keys` are never used
[INFO] [stdout]   --> src/engine/cache_api.rs:18:12
[INFO] [stdout]    |
[INFO] [stdout] 17 | impl Cache {
[INFO] [stdout]    | ---------- associated items in this implementation
[INFO] [stdout] 18 |     pub fn new(name: &str) -> Self {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 22 |     pub fn put(&mut self, url: &str, status: u16, headers: HashMap<String, String>, body: Vec<u8>) {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 32 |     pub fn match_request(&self, url: &str) -> Option<&CachedResponse> {
[INFO] [stdout]    |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 36 |     pub fn match_all(&self, url: &str) -> Vec<&CachedResponse> {
[INFO] [stdout]    |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 40 |     pub fn delete(&mut self, url: &str) -> bool {
[INFO] [stdout]    |            ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 44 |     pub fn keys(&self) -> Vec<&String> {
[INFO] [stdout]    |            ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `CacheStorage` is never constructed
[INFO] [stdout]   --> src/engine/cache_api.rs:49:12
[INFO] [stdout]    |
[INFO] [stdout] 49 | pub struct CacheStorage {
[INFO] [stdout]    |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new`, `open`, `has`, `delete`, `keys`, and `match_request` are never used
[INFO] [stdout]   --> src/engine/cache_api.rs:55:12
[INFO] [stdout]    |
[INFO] [stdout] 54 | impl CacheStorage {
[INFO] [stdout]    | ----------------- associated items in this implementation
[INFO] [stdout] 55 |     pub fn new() -> Self {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 59 |     pub fn open(&mut self, origin: &str, name: &str) -> &mut Cache {
[INFO] [stdout]    |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 67 |     pub fn has(&self, origin: &str, name: &str) -> bool {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 74 |     pub fn delete(&mut self, origin: &str, name: &str) -> bool {
[INFO] [stdout]    |            ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 81 |     pub fn keys(&self, origin: &str) -> Vec<String> {
[INFO] [stdout]    |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 90 |     pub fn match_request(&self, origin: &str, url: &str) -> Option<&CachedResponse> {
[INFO] [stdout]    |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `js_runtime`, `media`, and `interactor` are never read
[INFO] [stdout]   --> src/app.rs:43:9
[INFO] [stdout]    |
[INFO] [stdout] 25 | pub struct BrowserState {
[INFO] [stdout]    |            ------------ fields in this struct
[INFO] [stdout] ...
[INFO] [stdout] 43 |     pub js_runtime: JsRuntime,
[INFO] [stdout]    |         ^^^^^^^^^^
[INFO] [stdout] 44 |     pub media: MediaManager,
[INFO] [stdout]    |         ^^^^^
[INFO] [stdout] 45 |     pub drm: DrmFallbackManager,
[INFO] [stdout] 46 |     pub interactor: PageInteractor,
[INFO] [stdout]    |         ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: hiding a lifetime that's elided elsewhere is confusing
[INFO] [stdout]    --> src/net/http.rs:255:20
[INFO] [stdout]     |
[INFO] [stdout] 255 |     pub fn request(&self, url: &str) -> AmniRequestBuilder {
[INFO] [stdout]     |                    ^^^^^                ^^^^^^^^^^^^^^^^^^ the same lifetime is hidden here
[INFO] [stdout]     |                    |
[INFO] [stdout]     |                    the lifetime is elided 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] 255 |     pub fn request(&self, url: &str) -> AmniRequestBuilder<'_> {
[INFO] [stdout]     |                                                           ++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `extraction_js` and `settings_json` are never used
[INFO] [stdout]   --> src/ui/reader.rs:36:12
[INFO] [stdout]    |
[INFO] [stdout] 33 | impl ReaderMode {
[INFO] [stdout]    | --------------- associated items in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 36 |     pub fn extraction_js() -> &'static str {
[INFO] [stdout]    |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 65 |     pub fn settings_json(&self) -> String {
[INFO] [stdout]    |            ^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: static `CUSTOM` is never used
[INFO] [stdout]   --> src/ui/emoji.rs:68:8
[INFO] [stdout]    |
[INFO] [stdout] 68 | static CUSTOM: LazyLock<std::sync::RwLock<HashMap<String, String>>> = LazyLock::new(|| std::sync::RwLock::new(HashMap::new()));
[INFO] [stdout]    |        ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `register` is never used
[INFO] [stdout]   --> src/ui/emoji.rs:76:8
[INFO] [stdout]    |
[INFO] [stdout] 76 | pub fn register(name: String, glyph: String) {
[INFO] [stdout]    |        ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `resolve` is never used
[INFO] [stdout]   --> src/ui/emoji.rs:79:8
[INFO] [stdout]    |
[INFO] [stdout] 79 | pub fn resolve(name: &str) -> String {
[INFO] [stdout]    |        ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `resolve_html` is never used
[INFO] [stdout]   --> src/ui/emoji.rs:83:8
[INFO] [stdout]    |
[INFO] [stdout] 83 | pub fn resolve_html(name: &str) -> String {
[INFO] [stdout]    |        ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `all_names` is never used
[INFO] [stdout]   --> src/ui/emoji.rs:87:8
[INFO] [stdout]    |
[INFO] [stdout] 87 | pub fn all_names() -> Vec<&'static str> {
[INFO] [stdout]    |        ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `query` is never read
[INFO] [stdout]    --> src/net/ipc.rs:100:18
[INFO] [stdout]     |
[INFO] [stdout] 100 |     FindInPage { query: String },
[INFO] [stdout]     |     ----------   ^^^^^
[INFO] [stdout]     |     |
[INFO] [stdout]     |     field in this variant
[INFO] [stdout]     |
[INFO] [stdout]     = note: `IpcMessage` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variants `SessionInfo`, `ReaderSettingsResp`, `PermissionsDefaults`, `DevToolsConsole`, `DevToolsNetwork`, and `DrmWebViewRequired` are never constructed
[INFO] [stdout]    --> src/net/ipc.rs:236:5
[INFO] [stdout]     |
[INFO] [stdout] 202 | pub enum IpcResponse {
[INFO] [stdout]     |          ----------- variants in this enum
[INFO] [stdout] ...
[INFO] [stdout] 236 |     SessionInfo { data: String },
[INFO] [stdout]     |     ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 246 |     ReaderSettingsResp { data: String },
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 250 |     PermissionsDefaults { data: String },
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 256 |     DevToolsConsole { data: String },
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^
[INFO] [stdout] 257 |     #[serde(rename = "devtools_network")]
[INFO] [stdout] 258 |     DevToolsNetwork { data: String },
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 282 |     DrmWebViewRequired { url: String, reason: String },
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `IpcResponse` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `cached_at_epoch` is never read
[INFO] [stdout]   --> src/net/dns.rs:11:9
[INFO] [stdout]    |
[INFO] [stdout]  6 | pub struct DnsRecord {
[INFO] [stdout]    |            --------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 11 |     pub cached_at_epoch: u64,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `DnsRecord` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `url` and `name` are never used
[INFO] [stdout]   --> src/net/dns.rs:22:12
[INFO] [stdout]    |
[INFO] [stdout] 21 | impl DohProvider {
[INFO] [stdout]    | ---------------- methods in this implementation
[INFO] [stdout] 22 |     pub fn url(&self) -> &str {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 30 |     pub fn name(&self) -> &str {
[INFO] [stdout]    |            ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `DnsAnswer` is never constructed
[INFO] [stdout]   --> src/net/dns.rs:43:12
[INFO] [stdout]    |
[INFO] [stdout] 43 | pub struct DnsAnswer {
[INFO] [stdout]    |            ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `DnsResponse` is never constructed
[INFO] [stdout]   --> src/net/dns.rs:52:12
[INFO] [stdout]    |
[INFO] [stdout] 52 | pub struct DnsResponse {
[INFO] [stdout]    |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `last_clean` is never read
[INFO] [stdout]   --> src/net/dns.rs:62:5
[INFO] [stdout]    |
[INFO] [stdout] 58 | pub struct DohResolver {
[INFO] [stdout]    |            ----------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 62 |     last_clean: Instant,
[INFO] [stdout]    |     ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `resolve`, `query_doh`, `clean_cache`, and `clear_cache` are never used
[INFO] [stdout]    --> src/net/dns.rs:68:12
[INFO] [stdout]     |
[INFO] [stdout]  64 | impl DohResolver {
[INFO] [stdout]     | ---------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout]  68 |     pub fn resolve(&mut self, hostname: &str) -> Option<Vec<String>> {
[INFO] [stdout]     |            ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  94 |     fn query_doh(&self, hostname: &str) -> Result<Vec<String>, String> {
[INFO] [stdout]     |        ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 117 |     fn clean_cache(&mut self) {
[INFO] [stdout]     |        ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 122 |     pub fn clear_cache(&mut self) { self.cache.clear(); }
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `block_3pc` and `default_auth` are never read
[INFO] [stdout]   --> src/net/http.rs:27:5
[INFO] [stdout]    |
[INFO] [stdout] 23 | pub struct AmniClient {
[INFO] [stdout]    |            ---------- fields in this struct
[INFO] [stdout] ...
[INFO] [stdout] 27 |     block_3pc: bool,
[INFO] [stdout]    |     ^^^^^^^^^
[INFO] [stdout] 28 |     user_agent: String,
[INFO] [stdout] 29 |     default_auth: Option<String>,
[INFO] [stdout]    |     ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `url` and `from_cache` are never read
[INFO] [stdout]   --> src/net/http.rs:35:9
[INFO] [stdout]    |
[INFO] [stdout] 31 | pub struct AmniResponse {
[INFO] [stdout]    |            ------------ fields in this struct
[INFO] [stdout] ...
[INFO] [stdout] 35 |     pub url: String,
[INFO] [stdout]    |         ^^^
[INFO] [stdout] 36 |     pub from_cache: bool,
[INFO] [stdout]    |         ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple methods are never used
[INFO] [stdout]    --> src/net/http.rs:88:18
[INFO] [stdout]     |
[INFO] [stdout]  38 | impl AmniClient {
[INFO] [stdout]     | --------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout]  88 |     pub async fn post(&self, url: &str, content_type: &str, body: Bytes) -> Result<AmniResponse, Box<dyn std::error::Error + Send +...
[INFO] [stdout]     |                  ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 126 |     pub fn clear_cache(&self) {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 129 |     pub fn cache_size(&self) -> usize {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 132 |     pub fn set_dnt(&mut self, enabled: bool) { self.dnt = enabled; }
[INFO] [stdout]     |            ^^^^^^^
[INFO] [stdout] 133 |     pub fn set_block_3pc(&mut self, enabled: bool) { self.block_3pc = enabled; }
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 165 |     pub async fn put(&self, url: &str, content_type: &str, body: Bytes) -> Result<AmniResponse, Box<dyn std::error::Error + Send + ...
[INFO] [stdout]     |                  ^^^
[INFO] [stdout] ...
[INFO] [stdout] 183 |     pub async fn delete(&self, url: &str) -> Result<AmniResponse, Box<dyn std::error::Error + Send + Sync>> {
[INFO] [stdout]     |                  ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 200 |     pub async fn patch(&self, url: &str, content_type: &str, body: Bytes) -> Result<AmniResponse, Box<dyn std::error::Error + Send ...
[INFO] [stdout]     |                  ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 218 |     pub async fn head(&self, url: &str) -> Result<AmniResponse, Box<dyn std::error::Error + Send + Sync>> {
[INFO] [stdout]     |                  ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 235 |     pub async fn options(&self, url: &str) -> Result<AmniResponse, Box<dyn std::error::Error + Send + Sync>> {
[INFO] [stdout]     |                  ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 255 |     pub fn request(&self, url: &str) -> AmniRequestBuilder {
[INFO] [stdout]     |            ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 278 |     pub fn set_bearer_token(&mut self, token: &str) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 283 |     pub fn set_basic_auth(&mut self, user: &str, pass: &str) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `AmniRequestBuilder` is never constructed
[INFO] [stdout]    --> src/net/http.rs:291:12
[INFO] [stdout]     |
[INFO] [stdout] 291 | pub struct AmniRequestBuilder<'a> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `method`, `header`, `body`, `timeout`, and `send` are never used
[INFO] [stdout]    --> src/net/http.rs:302:12
[INFO] [stdout]     |
[INFO] [stdout] 300 | impl<'a> AmniRequestBuilder<'a> {
[INFO] [stdout]     | ------------------------------- methods in this implementation
[INFO] [stdout] 301 |     /// Set the HTTP method (GET, POST, PUT, DELETE, PATCH, HEAD, OPTIONS).
[INFO] [stdout] 302 |     pub fn method(mut self, method: &str) -> Self {
[INFO] [stdout]     |            ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 308 |     pub fn header(mut self, key: &str, value: &str) -> Self {
[INFO] [stdout]     |            ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 314 |     pub fn body(mut self, data: Vec<u8>) -> Self {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 320 |     pub fn timeout(mut self, duration: Duration) -> Self {
[INFO] [stdout]     |            ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 326 |     pub async fn send(self) -> Result<AmniResponse, Box<dyn std::error::Error + Send + Sync>> {
[INFO] [stdout]     |                  ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `header`, `content_type`, `is_json`, `is_html`, `json`, and `is_ok` are never used
[INFO] [stdout]    --> src/net/http.rs:361:12
[INFO] [stdout]     |
[INFO] [stdout] 355 | impl AmniResponse {
[INFO] [stdout]     | ----------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 361 |     pub fn header(&self, name: &str) -> Option<&str> {
[INFO] [stdout]     |            ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 368 |     pub fn content_type(&self) -> Option<&str> {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 373 |     pub fn is_json(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 378 |     pub fn is_html(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 383 |     pub fn json<T: DeserializeOwned>(&self) -> Result<T, Box<dyn std::error::Error + Send + Sync>> {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 389 |     pub fn is_ok(&self) -> bool { self.status >= 200 && self.status < 300 }
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/net/cookies.rs:58:12
[INFO] [stdout]     |
[INFO] [stdout]  24 | impl CookieJar {
[INFO] [stdout]     | -------------- associated items in this implementation
[INFO] [stdout] ...
[INFO] [stdout]  58 |     pub fn clear_domain(&mut self, domain: &str) { self.cookies.remove(domain); }
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout]  59 |     pub fn clear_all(&mut self) { self.cookies.clear(); info!("All cookies cleared"); }
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout]  60 |     pub fn domain_count(&self) -> usize { self.cookies.len() }
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout]  61 |     pub fn total_count(&self) -> usize { self.cookies.values().map(|v| v.len()).sum() }
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout]  62 |     pub fn set_block_third_party(&mut self, block: bool) { self.block_third_party = block; }
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]  63 |     pub fn add_allow(&mut self, domain: String) { self.allow_list.push(domain); }
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout]  64 |     pub fn add_deny(&mut self, domain: String) { self.deny_list.push(domain); }
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  99 |     pub fn save(&self) -> String { serde_json::to_string(&self.cookies).unwrap_or_default() }
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] 100 |     pub fn load(data: &str, block_third_party: bool) -> Self {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: type alias `BoxErr` is never used
[INFO] [stdout]  --> src/net/websocket.rs:8:6
[INFO] [stdout]   |
[INFO] [stdout] 8 | type BoxErr = Box<dyn std::error::Error + Send + Sync>;
[INFO] [stdout]   |      ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `WebSocketState` is never used
[INFO] [stdout]   --> src/net/websocket.rs:10:10
[INFO] [stdout]    |
[INFO] [stdout] 10 | pub enum WebSocketState { Connecting, Open, Closing, Closed }
[INFO] [stdout]    |          ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `WebSocketFrame` is never constructed
[INFO] [stdout]   --> src/net/websocket.rs:12:12
[INFO] [stdout]    |
[INFO] [stdout] 12 | pub struct WebSocketFrame {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]   --> src/net/websocket.rs:18:15
[INFO] [stdout]    |
[INFO] [stdout] 17 | impl WebSocketFrame {
[INFO] [stdout]    | ------------------- associated items in this implementation
[INFO] [stdout] 18 |     pub const TEXT: u8 = 1;
[INFO] [stdout]    |               ^^^^
[INFO] [stdout] 19 |     pub const BINARY: u8 = 2;
[INFO] [stdout]    |               ^^^^^^
[INFO] [stdout] 20 |     pub const CLOSE: u8 = 8;
[INFO] [stdout]    |               ^^^^^
[INFO] [stdout] 21 |     pub const PING: u8 = 9;
[INFO] [stdout]    |               ^^^^
[INFO] [stdout] 22 |     pub const PONG: u8 = 10;
[INFO] [stdout]    |               ^^^^
[INFO] [stdout] 23 |     pub fn text(msg: &str) -> Self { Self { opcode: Self::TEXT, payload: msg.as_bytes().to_vec(), fin: true } }
[INFO] [stdout]    |            ^^^^
[INFO] [stdout] 24 |     pub fn binary(data: &[u8]) -> Self { Self { opcode: Self::BINARY, payload: data.to_vec(), fin: true } }
[INFO] [stdout]    |            ^^^^^^
[INFO] [stdout] 25 |     pub fn close() -> Self { Self { opcode: Self::CLOSE, payload: Vec::new(), fin: true } }
[INFO] [stdout]    |            ^^^^^
[INFO] [stdout] 26 |     pub fn ping() -> Self { Self { opcode: Self::PING, payload: Vec::new(), fin: true } }
[INFO] [stdout]    |            ^^^^
[INFO] [stdout] 27 |     pub fn pong(payload: Vec<u8>) -> Self { Self { opcode: Self::PONG, payload, fin: true } }
[INFO] [stdout]    |            ^^^^
[INFO] [stdout] 28 |     pub fn encode_masked(&self) -> Vec<u8> {
[INFO] [stdout]    |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 49 |     pub fn encode_unmasked(&self) -> Vec<u8> {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `decode_frame` is never used
[INFO] [stdout]   --> src/net/websocket.rs:67:14
[INFO] [stdout]    |
[INFO] [stdout] 67 | pub async fn decode_frame<R: AsyncReadExt + Unpin>(reader: &mut R) -> Result<WebSocketFrame, BoxErr> {
[INFO] [stdout]    |              ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `parse_ws_url` is never used
[INFO] [stdout]   --> src/net/websocket.rs:97:4
[INFO] [stdout]    |
[INFO] [stdout] 97 | fn parse_ws_url(url: &str) -> Result<(String, u16, String, bool), BoxErr> {
[INFO] [stdout]    |    ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `generate_ws_key` is never used
[INFO] [stdout]    --> src/net/websocket.rs:110:4
[INFO] [stdout]     |
[INFO] [stdout] 110 | fn generate_ws_key() -> String {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `WebSocket` is never constructed
[INFO] [stdout]    --> src/net/websocket.rs:114:12
[INFO] [stdout]     |
[INFO] [stdout] 114 | pub struct WebSocket {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `connect`, `send_text`, `send_binary`, `send_ping`, `close`, and `recv` are never used
[INFO] [stdout]    --> src/net/websocket.rs:121:18
[INFO] [stdout]     |
[INFO] [stdout] 120 | impl WebSocket {
[INFO] [stdout]     | -------------- associated items in this implementation
[INFO] [stdout] 121 |     pub async fn connect(url: &str) -> Result<Self, BoxErr> {
[INFO] [stdout]     |                  ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 201 |     pub async fn send_text(&self, msg: &str) -> Result<(), BoxErr> {
[INFO] [stdout]     |                  ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 205 |     pub async fn send_binary(&self, data: &[u8]) -> Result<(), BoxErr> {
[INFO] [stdout]     |                  ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 209 |     pub async fn send_ping(&self) -> Result<(), BoxErr> {
[INFO] [stdout]     |                  ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 213 |     pub async fn close(&mut self) -> Result<(), BoxErr> {
[INFO] [stdout]     |                  ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 219 |     pub async fn recv(&mut self) -> Option<WebSocketFrame> {
[INFO] [stdout]     |                  ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `WebSocketManager` is never constructed
[INFO] [stdout]    --> src/net/websocket.rs:223:12
[INFO] [stdout]     |
[INFO] [stdout] 223 | pub struct WebSocketManager {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/net/websocket.rs:227:12
[INFO] [stdout]     |
[INFO] [stdout] 226 | impl WebSocketManager {
[INFO] [stdout]     | --------------------- associated items in this implementation
[INFO] [stdout] 227 |     pub fn new() -> Self { Self { connections: HashMap::new() } }
[INFO] [stdout]     |            ^^^
[INFO] [stdout] 228 |     pub async fn create(&mut self, id: &str, url: &str) -> Result<(), BoxErr> {
[INFO] [stdout]     |                  ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 233 |     pub async fn close(&mut self, id: &str) -> Result<(), BoxErr> {
[INFO] [stdout]     |                  ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 240 |     pub async fn send(&self, id: &str, msg: &str) -> Result<(), BoxErr> {
[INFO] [stdout]     |                  ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 244 |     pub async fn recv(&mut self, id: &str) -> Option<WebSocketFrame> {
[INFO] [stdout]     |                  ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 248 |     pub fn state(&self, id: &str) -> Option<WebSocketState> {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 251 |     pub fn ids(&self) -> Vec<String> { self.connections.keys().cloned().collect() }
[INFO] [stdout]     |            ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `RequestType` is never used
[INFO] [stdout]  --> src/net/cors.rs:4:10
[INFO] [stdout]   |
[INFO] [stdout] 4 | pub enum RequestType { Simple, Preflight, Actual }
[INFO] [stdout]   |          ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `allowed_origins`, `allowed_methods`, `allowed_headers`, `max_age`, and `allow_credentials` are never read
[INFO] [stdout]   --> src/net/cors.rs:7:9
[INFO] [stdout]    |
[INFO] [stdout]  6 | pub struct CorsConfig {
[INFO] [stdout]    |            ---------- fields in this struct
[INFO] [stdout]  7 |     pub allowed_origins: Vec<String>,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^
[INFO] [stdout]  8 |     pub allowed_methods: Vec<String>,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^
[INFO] [stdout]  9 |     pub allowed_headers: Vec<String>,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^
[INFO] [stdout] 10 |     pub max_age: u64,
[INFO] [stdout]    |         ^^^^^^^
[INFO] [stdout] 11 |     pub allow_credentials: bool,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `CorsConfig` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `CorsResult` is never constructed
[INFO] [stdout]   --> src/net/cors.rs:25:12
[INFO] [stdout]    |
[INFO] [stdout] 25 | pub struct CorsResult {
[INFO] [stdout]    |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `is_simple_method` is never used
[INFO] [stdout]   --> src/net/cors.rs:29:8
[INFO] [stdout]    |
[INFO] [stdout] 29 | pub fn is_simple_method(method: &str) -> bool {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `is_simple_header` is never used
[INFO] [stdout]   --> src/net/cors.rs:32:8
[INFO] [stdout]    |
[INFO] [stdout] 32 | pub fn is_simple_header(name: &str) -> bool {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `is_simple_content_type` is never used
[INFO] [stdout]   --> src/net/cors.rs:36:8
[INFO] [stdout]    |
[INFO] [stdout] 36 | pub fn is_simple_content_type(value: &str) -> bool {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `classify_request` is never used
[INFO] [stdout]   --> src/net/cors.rs:41:8
[INFO] [stdout]    |
[INFO] [stdout] 41 | pub fn classify_request(method: &str, headers: &[(String, String)], origin: Option<&str>) -> RequestType {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `PreflightRequest` is never constructed
[INFO] [stdout]   --> src/net/cors.rs:55:12
[INFO] [stdout]    |
[INFO] [stdout] 55 | pub struct PreflightRequest {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `build_preflight_request` is never used
[INFO] [stdout]   --> src/net/cors.rs:60:8
[INFO] [stdout]    |
[INFO] [stdout] 60 | pub fn build_preflight_request(url: &str, method: &str, request_headers: &[(String, String)], origin: &str) -> PreflightRequest {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `validate_response` is never used
[INFO] [stdout]   --> src/net/cors.rs:74:8
[INFO] [stdout]    |
[INFO] [stdout] 74 | pub fn validate_response(origin: &str, response_headers: &[(String, String)]) -> CorsResult {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `check_method_allowed` is never used
[INFO] [stdout]   --> src/net/cors.rs:89:8
[INFO] [stdout]    |
[INFO] [stdout] 89 | pub fn check_method_allowed(method: &str, response_headers: &[(String, String)]) -> bool {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `check_headers_allowed` is never used
[INFO] [stdout]   --> src/net/cors.rs:98:8
[INFO] [stdout]    |
[INFO] [stdout] 98 | pub fn check_headers_allowed(request_headers: &[(String, String)], response_headers: &[(String, String)]) -> bool {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `allowed_methods`, `allowed_headers`, `inserted`, and `max_age` are never read
[INFO] [stdout]    --> src/net/cors.rs:112:5
[INFO] [stdout]     |
[INFO] [stdout] 111 | struct CorsEntry {
[INFO] [stdout]     |        --------- fields in this struct
[INFO] [stdout] 112 |     allowed_methods: Vec<String>,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^
[INFO] [stdout] 113 |     allowed_headers: Vec<String>,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^
[INFO] [stdout] 114 |     inserted: Instant,
[INFO] [stdout]     |     ^^^^^^^^
[INFO] [stdout] 115 |     max_age: Duration,
[INFO] [stdout]     |     ^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `CorsEntry` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `entries` is never read
[INFO] [stdout]    --> src/net/cors.rs:118:5
[INFO] [stdout]     |
[INFO] [stdout] 117 | pub struct CorsCache {
[INFO] [stdout]     |            --------- field in this struct
[INFO] [stdout] 118 |     entries: HashMap<(String, String), CorsEntry>,
[INFO] [stdout]     |     ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `check`, `store`, `evict_expired`, and `clear` are never used
[INFO] [stdout]    --> src/net/cors.rs:122:12
[INFO] [stdout]     |
[INFO] [stdout] 120 | impl CorsCache {
[INFO] [stdout]     | -------------- methods in this implementation
[INFO] [stdout] 121 |     pub fn new() -> Self { Self { entries: HashMap::new() } }
[INFO] [stdout] 122 |     pub fn check(&self, origin: &str, url: &str) -> Option<(&[String], &[String])> {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 128 |     pub fn store(&mut self, origin: &str, url: &str, response_headers: &[(String, String)]) {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 147 |     pub fn evict_expired(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 150 |     pub fn clear(&mut self) { self.entries.clear(); }
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `config` and `cache` are never read
[INFO] [stdout]    --> src/net/cors.rs:153:9
[INFO] [stdout]     |
[INFO] [stdout] 152 | pub struct CorsEnforcer {
[INFO] [stdout]     |            ------------ fields in this struct
[INFO] [stdout] 153 |     pub config: CorsConfig,
[INFO] [stdout]     |         ^^^^^^
[INFO] [stdout] 154 |     pub cache: CorsCache,
[INFO] [stdout]     |         ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `should_allow` is never used
[INFO] [stdout]    --> src/net/cors.rs:159:12
[INFO] [stdout]     |
[INFO] [stdout] 156 | impl CorsEnforcer {
[INFO] [stdout]     | ----------------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 159 |     pub fn should_allow(&self, origin: &str, url: &str, method: &str, headers: &[(String, String)]) -> CorsResult {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `allows_inline_script`, `allows_inline_style`, and `allows_eval` are never used
[INFO] [stdout]    --> src/net/csp.rs:130:12
[INFO] [stdout]     |
[INFO] [stdout] 115 | impl CspPolicy {
[INFO] [stdout]     | -------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 130 |     pub fn allows_inline_script(&self, nonce: Option<&str>) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 144 |     pub fn allows_inline_style(&self, nonce: Option<&str>) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 158 |     pub fn allows_eval(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `report` is never read
[INFO] [stdout]    --> src/net/csp.rs:183:9
[INFO] [stdout]     |
[INFO] [stdout] 181 | pub struct CspResult {
[INFO] [stdout]     |            --------- field in this struct
[INFO] [stdout] 182 |     pub allowed: bool,
[INFO] [stdout] 183 |     pub report: Option<CspViolation>,
[INFO] [stdout]     |         ^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `CspResult` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `directive`, `blocked_uri`, and `document_uri` are never read
[INFO] [stdout]    --> src/net/csp.rs:187:9
[INFO] [stdout]     |
[INFO] [stdout] 186 | pub struct CspViolation {
[INFO] [stdout]     |            ------------ fields in this struct
[INFO] [stdout] 187 |     pub directive: String,
[INFO] [stdout]     |         ^^^^^^^^^
[INFO] [stdout] 188 |     pub blocked_uri: String,
[INFO] [stdout]     |         ^^^^^^^^^^^
[INFO] [stdout] 189 |     pub document_uri: String,
[INFO] [stdout]     |         ^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `CspViolation` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `check_inline_script`, `check_inline_style`, and `check_eval` are never used
[INFO] [stdout]    --> src/net/csp.rs:240:12
[INFO] [stdout]     |
[INFO] [stdout] 196 | impl CspEnforcer {
[INFO] [stdout]     | ---------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 240 |     pub fn check_inline_script(&self, nonce: Option<&str>) -> CspResult {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 253 |     pub fn check_inline_style(&self, nonce: Option<&str>) -> CspResult {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 266 |     pub fn check_eval(&self) -> CspResult {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `USER_AGENT` is never used
[INFO] [stdout]  --> src/storage/config.rs:9:11
[INFO] [stdout]   |
[INFO] [stdout] 9 | pub const USER_AGENT: &str = "AmniBrowse/0.3 (Privacy-First; Amni-Scient)";
[INFO] [stdout]   |           ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `find_by_url`, `list_folder`, and `search` are never used
[INFO] [stdout]   --> src/storage/bookmarks.rs:78:12
[INFO] [stdout]    |
[INFO] [stdout] 35 | impl BookmarkManager {
[INFO] [stdout]    | -------------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 78 |     pub fn find_by_url(&self, url: &str) -> Option<&Bookmark> {
[INFO] [stdout]    |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 82 |     pub fn list_folder(&self, folder: Option<&str>) -> Vec<&Bookmark> {
[INFO] [stdout]    |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 89 |     pub fn search(&self, query: &str) -> Vec<&Bookmark> {
[INFO] [stdout]    |            ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `get_by_date`, `delete_by_url`, `clear_range`, and `to_json` are never used
[INFO] [stdout]   --> src/storage/history.rs:66:12
[INFO] [stdout]    |
[INFO] [stdout] 35 | impl HistoryManager {
[INFO] [stdout]    | ------------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 66 |     pub fn get_by_date(&self, date: NaiveDate) -> Vec<&HistoryEntry> {
[INFO] [stdout]    |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 80 |     pub fn delete_by_url(&mut self, url: &str) {
[INFO] [stdout]    |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 84 |     pub fn clear_range(&mut self, from: DateTime<Utc>, to: DateTime<Utc>) {
[INFO] [stdout]    |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 93 |     pub fn to_json(&self) -> String {
[INFO] [stdout]    |            ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `to_json` is never used
[INFO] [stdout]   --> src/storage/session.rs:74:12
[INFO] [stdout]    |
[INFO] [stdout] 38 | impl SessionManager {
[INFO] [stdout]    | ------------------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 74 |     pub fn to_json(&self) -> String {
[INFO] [stdout]    |            ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `progress_pct` is never used
[INFO] [stdout]   --> src/storage/downloads.rs:47:12
[INFO] [stdout]    |
[INFO] [stdout] 31 | impl DownloadItem {
[INFO] [stdout]    | ----------------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 47 |     pub fn progress_pct(&self) -> f64 {
[INFO] [stdout]    |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `search_credentials` is never used
[INFO] [stdout]    --> src/crypto/vault.rs:252:12
[INFO] [stdout]     |
[INFO] [stdout]  55 | impl PasswordManager {
[INFO] [stdout]     | -------------------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 252 |     pub fn search_credentials(&self, query: &str) -> Vec<CredentialSummary> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `list_addresses` and `decrypt_card_number` are never used
[INFO] [stdout]   --> src/crypto/autofill.rs:75:12
[INFO] [stdout]    |
[INFO] [stdout] 49 | impl AutofillManager {
[INFO] [stdout]    | -------------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 75 |     pub fn list_addresses(&self) -> &[AddressProfile] { &self.store.addresses }
[INFO] [stdout]    |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 92 |     pub fn decrypt_card_number(&self, card_id: &str) -> Result<String, String> {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `audio`, `video`, `codec_registry`, and `stream_manager` are never read
[INFO] [stdout]   --> src/media/mod.rs:11:9
[INFO] [stdout]    |
[INFO] [stdout] 10 | pub struct MediaManager {
[INFO] [stdout]    |            ------------ fields in this struct
[INFO] [stdout] 11 |     pub audio: AudioEngine,
[INFO] [stdout]    |         ^^^^^
[INFO] [stdout] 12 |     pub video: VideoEngine,
[INFO] [stdout]    |         ^^^^^
[INFO] [stdout] 13 |     pub codec_registry: codecs::CodecRegistry,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^
[INFO] [stdout] 14 |     pub stream_manager: stream::MediaStreamManager,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `stop_all`, `is_media_url`, and `capabilities_json` are never used
[INFO] [stdout]   --> src/media/mod.rs:27:12
[INFO] [stdout]    |
[INFO] [stdout] 17 | impl MediaManager {
[INFO] [stdout]    | ----------------- associated items in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 27 |     pub fn stop_all(&mut self) {
[INFO] [stdout]    |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 32 |     pub fn is_media_url(url: &str) -> bool {
[INFO] [stdout]    |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 39 |     pub fn capabilities_json() -> String {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variants `Stopped`, `Playing`, and `Paused` are never constructed
[INFO] [stdout]  --> src/media/audio.rs:4:26
[INFO] [stdout]   |
[INFO] [stdout] 4 | pub enum PlaybackState { Stopped, Playing, Paused }
[INFO] [stdout]   |          -------------   ^^^^^^^  ^^^^^^^  ^^^^^^
[INFO] [stdout]   |          |
[INFO] [stdout]   |          variants in this enum
[INFO] [stdout]   |
[INFO] [stdout]   = note: `PlaybackState` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple fields are never read
[INFO] [stdout]   --> src/media/audio.rs:8:9
[INFO] [stdout]    |
[INFO] [stdout]  7 | pub struct AudioTrack {
[INFO] [stdout]    |            ---------- fields in this struct
[INFO] [stdout]  8 |     pub id: String,
[INFO] [stdout]    |         ^^
[INFO] [stdout]  9 |     pub url: String,
[INFO] [stdout]    |         ^^^
[INFO] [stdout] 10 |     pub state: PlaybackState,
[INFO] [stdout]    |         ^^^^^
[INFO] [stdout] 11 |     pub duration_secs: f64,
[INFO] [stdout]    |         ^^^^^^^^^^^^^
[INFO] [stdout] 12 |     pub position_secs: f64,
[INFO] [stdout]    |         ^^^^^^^^^^^^^
[INFO] [stdout] 13 |     pub volume: f32,
[INFO] [stdout]    |         ^^^^^^
[INFO] [stdout] 14 |     pub muted: bool,
[INFO] [stdout]    |         ^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `AudioTrack` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `tracks`, `master_volume`, and `master_muted` are never read
[INFO] [stdout]   --> src/media/audio.rs:18:5
[INFO] [stdout]    |
[INFO] [stdout] 17 | pub struct AudioEngine {
[INFO] [stdout]    |            ----------- fields in this struct
[INFO] [stdout] 18 |     tracks: HashMap<String, AudioTrack>,
[INFO] [stdout]    |     ^^^^^^
[INFO] [stdout] 19 |     master_volume: f32,
[INFO] [stdout]    |     ^^^^^^^^^^^^^
[INFO] [stdout] 20 |     master_muted: bool,
[INFO] [stdout]    |     ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/media/audio.rs:49:12
[INFO] [stdout]     |
[INFO] [stdout]  25 | impl AudioEngine {
[INFO] [stdout]     | ---------------- associated items in this implementation
[INFO] [stdout] ...
[INFO] [stdout]  49 |     pub fn load_track(&mut self, url: &str) -> String {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  60 |     pub fn play(&mut self, id: &str) -> bool {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout]  68 |     pub fn pause(&mut self, id: &str) -> bool {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  75 |     pub fn stop(&mut self, id: &str) -> bool {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout]  83 |     pub fn seek(&mut self, id: &str, position_secs: f64) -> bool {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout]  90 |     pub fn set_volume(&mut self, id: &str, volume: f32) {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  96 |     pub fn set_muted(&mut self, id: &str, muted: bool) {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 100 |     pub fn set_master_volume(&mut self, vol: f32) { self.master_volume = vol.clamp(0.0, 1.0); }
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 101 |     pub fn set_master_muted(&mut self, muted: bool) { self.master_muted = muted; }
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] 102 |     pub fn master_volume(&self) -> f32 { self.master_volume }
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] 103 |     pub fn master_muted(&self) -> bool { self.master_muted }
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] 104 |
[INFO] [stdout] 105 |     pub fn get_track(&self, id: &str) -> Option<&AudioTrack> { self.tracks.get(id) }
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] 106 |     pub fn remove_track(&mut self, id: &str) { self.stop(id); self.tracks.remove(id); }
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] 107 |     pub fn active_tracks(&self) -> Vec<&AudioTrack> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 111 |     fn start_playback(&self, _id: &str) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 118 |     pub fn decode_audio_info(data: &[u8]) -> Option<AudioInfo> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 144 |     pub fn is_available() -> bool { cfg!(feature = "media-playback") }
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `AudioInfo` is never constructed
[INFO] [stdout]    --> src/media/audio.rs:148:12
[INFO] [stdout]     |
[INFO] [stdout] 148 | pub struct AudioInfo {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variants `Idle`, `Loading`, `Playing`, `Paused`, `Ended`, and `Error` are never constructed
[INFO] [stdout]  --> src/media/video.rs:4:23
[INFO] [stdout]   |
[INFO] [stdout] 4 | pub enum VideoState { Idle, Loading, Playing, Paused, Ended, Error(String) }
[INFO] [stdout]   |          ----------   ^^^^  ^^^^^^^  ^^^^^^^  ^^^^^^  ^^^^^  ^^^^^
[INFO] [stdout]   |          |
[INFO] [stdout]   |          variants in this enum
[INFO] [stdout]   |
[INFO] [stdout]   = note: `VideoState` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple fields are never read
[INFO] [stdout]   --> src/media/video.rs:8:9
[INFO] [stdout]    |
[INFO] [stdout]  7 | pub struct VideoTrack {
[INFO] [stdout]    |            ---------- fields in this struct
[INFO] [stdout]  8 |     pub id: String,
[INFO] [stdout]    |         ^^
[INFO] [stdout]  9 |     pub url: String,
[INFO] [stdout]    |         ^^^
[INFO] [stdout] 10 |     pub state: VideoState,
[INFO] [stdout]    |         ^^^^^
[INFO] [stdout] 11 |     pub width: u32,
[INFO] [stdout]    |         ^^^^^
[INFO] [stdout] 12 |     pub height: u32,
[INFO] [stdout]    |         ^^^^^^
[INFO] [stdout] 13 |     pub duration_secs: f64,
[INFO] [stdout]    |         ^^^^^^^^^^^^^
[INFO] [stdout] 14 |     pub position_secs: f64,
[INFO] [stdout]    |         ^^^^^^^^^^^^^
[INFO] [stdout] 15 |     pub volume: f32,
[INFO] [stdout]    |         ^^^^^^
[INFO] [stdout] 16 |     pub muted: bool,
[INFO] [stdout]    |         ^^^^^
[INFO] [stdout] 17 |     pub frame_data: Option<Vec<u8>>,
[INFO] [stdout]    |         ^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `VideoTrack` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `tracks` is never read
[INFO] [stdout]   --> src/media/video.rs:21:5
[INFO] [stdout]    |
[INFO] [stdout] 20 | pub struct VideoEngine {
[INFO] [stdout]    |            ----------- field in this struct
[INFO] [stdout] 21 |     tracks: HashMap<String, VideoTrack>,
[INFO] [stdout]    |     ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]   --> src/media/video.rs:27:12
[INFO] [stdout]    |
[INFO] [stdout] 24 | impl VideoEngine {
[INFO] [stdout]    | ---------------- associated items in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 27 |     pub fn load_track(&mut self, url: &str) -> String {
[INFO] [stdout]    |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 40 |     pub fn play(&mut self, id: &str) -> bool {
[INFO] [stdout]    |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 44 |     pub fn pause(&mut self, id: &str) -> bool {
[INFO] [stdout]    |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 48 |     pub fn stop(&mut self, id: &str) -> bool {
[INFO] [stdout]    |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 54 |     pub fn seek(&mut self, id: &str, pos: f64) -> bool {
[INFO] [stdout]    |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 60 |     pub fn set_volume(&mut self, id: &str, vol: f32) {
[INFO] [stdout]    |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 64 |     pub fn set_muted(&mut self, id: &str, muted: bool) {
[INFO] [stdout]    |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 68 |     pub fn get_track(&self, id: &str) -> Option<&VideoTrack> { self.tracks.get(id) }
[INFO] [stdout]    |            ^^^^^^^^^
[INFO] [stdout] 69 |
[INFO] [stdout] 70 |     pub fn remove_track(&mut self, id: &str) { self.tracks.remove(id); }
[INFO] [stdout]    |            ^^^^^^^^^^^^
[INFO] [stdout] 71 |
[INFO] [stdout] 72 |     pub fn extract_poster_frame(data: &[u8]) -> Option<(u32, u32, Vec<u8>)> {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 81 |     pub fn supported_containers() -> &'static [&'static str] {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 85 |     pub fn is_video_url(url: &str) -> bool {
[INFO] [stdout]    |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `id` and `name` are never read
[INFO] [stdout]  --> src/media/codecs.rs:6:9
[INFO] [stdout]   |
[INFO] [stdout] 5 | pub struct CodecProfile {
[INFO] [stdout]   |            ------------ fields in this struct
[INFO] [stdout] 6 |     pub id: String,
[INFO] [stdout]   |         ^^
[INFO] [stdout] 7 |     pub codec_type: CodecType,
[INFO] [stdout] 8 |     pub name: String,
[INFO] [stdout]   |         ^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `CodecProfile` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `label` and `muted` are never read
[INFO] [stdout]   --> src/media/stream.rs:16:9
[INFO] [stdout]    |
[INFO] [stdout] 13 | pub struct MediaStreamTrack {
[INFO] [stdout]    |            ---------------- fields in this struct
[INFO] [stdout] ...
[INFO] [stdout] 16 |     pub label: String,
[INFO] [stdout]    |         ^^^^^
[INFO] [stdout] 17 |     pub enabled: bool,
[INFO] [stdout] 18 |     pub muted: bool,
[INFO] [stdout]    |         ^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `MediaStreamTrack` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `id` is never read
[INFO] [stdout]   --> src/media/stream.rs:24:9
[INFO] [stdout]    |
[INFO] [stdout] 23 | pub struct MediaStream {
[INFO] [stdout]    |            ----------- field in this struct
[INFO] [stdout] 24 |     pub id: String,
[INFO] [stdout]    |         ^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `MediaStream` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `device_id`, `label`, and `group_id` are never read
[INFO] [stdout]   --> src/media/stream.rs:30:9
[INFO] [stdout]    |
[INFO] [stdout] 29 | pub struct MediaDeviceInfo {
[INFO] [stdout]    |            --------------- fields in this struct
[INFO] [stdout] 30 |     pub device_id: String,
[INFO] [stdout]    |         ^^^^^^^^^
[INFO] [stdout] 31 |     pub kind: DeviceKind,
[INFO] [stdout] 32 |     pub label: String,
[INFO] [stdout]    |         ^^^^^
[INFO] [stdout] 33 |     pub group_id: String,
[INFO] [stdout]    |         ^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `MediaDeviceInfo` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `get_display_media` is never used
[INFO] [stdout]   --> src/media/stream.rs:77:12
[INFO] [stdout]    |
[INFO] [stdout] 40 | impl MediaStreamManager {
[INFO] [stdout]    | ----------------------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 77 |     pub fn get_display_media(&mut self) -> Result<String, String> {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variant `Sequence` is never constructed
[INFO] [stdout]  --> src/media/mse.rs:7:33
[INFO] [stdout]   |
[INFO] [stdout] 7 | pub enum AppendMode { Segments, Sequence }
[INFO] [stdout]   |          ----------             ^^^^^^^^
[INFO] [stdout]   |          |
[INFO] [stdout]   |          variant in this enum
[INFO] [stdout]   |
[INFO] [stdout]   = note: `AppendMode` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `id`, `mime_type`, and `mode` are never read
[INFO] [stdout]   --> src/media/mse.rs:11:9
[INFO] [stdout]    |
[INFO] [stdout] 10 | pub struct SourceBuffer {
[INFO] [stdout]    |            ------------ fields in this struct
[INFO] [stdout] 11 |     pub id: String,
[INFO] [stdout]    |         ^^
[INFO] [stdout] 12 |     pub mime_type: String,
[INFO] [stdout]    |         ^^^^^^^^^
[INFO] [stdout] 13 |     pub mode: AppendMode,
[INFO] [stdout]    |         ^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `SourceBuffer` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `abort` is never used
[INFO] [stdout]   --> src/media/mse.rs:26:12
[INFO] [stdout]    |
[INFO] [stdout] 20 | impl SourceBuffer {
[INFO] [stdout]    | ----------------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 26 |     pub fn abort(&mut self) {
[INFO] [stdout]    |            ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `active_source_buffers` is never used
[INFO] [stdout]    --> src/media/mse.rs:126:12
[INFO] [stdout]     |
[INFO] [stdout]  82 | impl MediaSource {
[INFO] [stdout]     | ---------------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 126 |     pub fn active_source_buffers(&self) -> Vec<&SourceBuffer> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `private_tab_count` and `has_private_tabs` are never used
[INFO] [stdout]    --> src/engine/tabs.rs:160:12
[INFO] [stdout]     |
[INFO] [stdout] 109 | impl TabManager {
[INFO] [stdout]     | --------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 160 |     pub fn private_tab_count(&self) -> usize { self.tabs.iter().filter(|t| t.is_private).count() }
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 161 |     pub fn has_private_tabs(&self) -> bool { self.tabs.iter().any(|t| t.is_private) }
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `is_blocked_url` is never used
[INFO] [stdout]    --> src/engine/adblocker.rs:196:12
[INFO] [stdout]     |
[INFO] [stdout] 102 | impl AdBlocker {
[INFO] [stdout]     | -------------- associated function in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 196 |     pub fn is_blocked_url(url: &str) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `install_from_dir`, `copy_dir_recursive`, `get_content_scripts`, `url_matches_pattern`, and `list` are never used
[INFO] [stdout]    --> src/engine/extensions.rs:86:12
[INFO] [stdout]     |
[INFO] [stdout]  43 | impl ExtensionManager {
[INFO] [stdout]     | --------------------- associated items in this implementation
[INFO] [stdout] ...
[INFO] [stdout]  86 |     pub fn install_from_dir(&mut self, source: &PathBuf) -> Result<String, String> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 103 |     fn copy_dir_recursive(src: &PathBuf, dst: &PathBuf) -> std::io::Result<()> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 135 |     pub fn get_content_scripts(&self, url: &str) -> Vec<(String, Vec<String>, Vec<String>)> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 151 |     fn url_matches_pattern(url: &str, pattern: &str) -> bool {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 154 |     pub fn list(&self) -> &[Extension] { &self.registry.extensions }
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `get_permission`, `reset_all`, and `defaults_json` are never used
[INFO] [stdout]    --> src/engine/permissions.rs:81:12
[INFO] [stdout]     |
[INFO] [stdout]  50 | impl PermissionsManager {
[INFO] [stdout]     | ----------------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout]  81 |     pub fn get_permission(&self, url: &str, perm: &PermissionType) -> PermissionState {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 106 |     pub fn reset_all(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 113 |     pub fn defaults_json(&self) -> String {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `log_network`, `console_json`, and `network_json` are never used
[INFO] [stdout]   --> src/engine/devtools.rs:68:12
[INFO] [stdout]    |
[INFO] [stdout] 52 | impl DevToolsState {
[INFO] [stdout]    | ------------------ methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 68 |     pub fn log_network(&mut self, entry: NetworkEntry) {
[INFO] [stdout]    |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 74 |     pub fn console_json(&self) -> String {
[INFO] [stdout]    |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 78 |     pub fn network_json(&self) -> String {
[INFO] [stdout]    |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `DomNode` is never constructed
[INFO] [stdout]  --> src/engine/dom.rs:8:12
[INFO] [stdout]   |
[INFO] [stdout] 8 | pub struct DomNode<'a> {
[INFO] [stdout]   |            ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/engine/dom.rs:36:12
[INFO] [stdout]     |
[INFO] [stdout]  28 | impl AmniDom {
[INFO] [stdout]     | ------------ associated items in this implementation
[INFO] [stdout] ...
[INFO] [stdout]  36 |     pub fn root(&self) -> &Handle { &self.dom.document }
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 190 |     pub fn query_by_tag(&self, tag: &str) -> Vec<Handle> {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 195 |     fn find_by_tag(&self, handle: &Handle, tag: &str, results: &mut Vec<Handle>) {
[INFO] [stdout]     |        ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 201 |     pub fn query_by_id(&self, id: &str) -> Option<Handle> {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 204 |     fn find_by_id(&self, handle: &Handle, id: &str) -> Option<Handle> {
[INFO] [stdout]     |        ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 211 |     pub fn query_selector(&self, selector: &str) -> Option<Handle> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 214 |     pub fn query_selector_all(&self, selector: &str) -> Vec<Handle> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 231 |     pub fn query_by_class(&self, class: &str) -> Vec<Handle> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 236 |     pub fn query_by_attr(&self, attr: &str, value: &str) -> Vec<Handle> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 241 |     fn find_first_simple(&self, handle: &Handle, sel: &str) -> Option<Handle> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 248 |     fn find_all_simple(&self, handle: &Handle, sel: &str, results: &mut Vec<Handle>) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 252 |     fn matches_simple(handle: &Handle, sel: &str) -> bool {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 286 |     fn find_by_class(&self, handle: &Handle, class: &str, results: &mut Vec<Handle>) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 294 |     fn find_by_attr_val(&self, handle: &Handle, attr: &str, value: &str, results: &mut Vec<Handle>) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `add_leaf_with_text` and `clear` are never used
[INFO] [stdout]   --> src/engine/layout.rs:41:12
[INFO] [stdout]    |
[INFO] [stdout] 24 | impl LayoutEngine {
[INFO] [stdout]    | ----------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 41 |     pub fn add_leaf_with_text(&mut self, id: usize, style: &ComputedStyle, text: TextInfo) -> Option<NodeId> {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 84 |     pub fn clear(&mut self) { self.tree.clear(); self.nodes.clear(); self.results.clear(); }
[INFO] [stdout]    |            ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `important` is never read
[INFO] [stdout]   --> src/engine/style.rs:16:9
[INFO] [stdout]    |
[INFO] [stdout] 13 | pub struct Declaration {
[INFO] [stdout]    |            ----------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 16 |     pub important: bool,
[INFO] [stdout]    |         ^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `Declaration` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `image_cache`, `cors`, `csp`, and `canvas_registry` are never read
[INFO] [stdout]   --> src/engine/pipeline.rs:18:9
[INFO] [stdout]    |
[INFO] [stdout] 15 | pub struct RenderPipeline {
[INFO] [stdout]    |            -------------- fields in this struct
[INFO] [stdout] ...
[INFO] [stdout] 18 |     pub image_cache: ImageCache,
[INFO] [stdout]    |         ^^^^^^^^^^^
[INFO] [stdout] 19 |     pub cors: CorsEnforcer,
[INFO] [stdout]    |         ^^^^
[INFO] [stdout] 20 |     pub csp: Option<CspEnforcer>,
[INFO] [stdout]    |         ^^^
[INFO] [stdout] 21 |     pub canvas_registry: HashMap<usize, crate::engine::canvas::Canvas2D>,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `css_sources` is never read
[INFO] [stdout]   --> src/engine/pipeline.rs:28:9
[INFO] [stdout]    |
[INFO] [stdout] 23 | pub struct PageResult {
[INFO] [stdout]    |            ---------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 28 |     pub css_sources: Vec<String>,
[INFO] [stdout]    |         ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `LayoutResult` is never constructed
[INFO] [stdout]   --> src/engine/pipeline.rs:41:12
[INFO] [stdout]    |
[INFO] [stdout] 41 | pub struct LayoutResult {
[INFO] [stdout]    |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/engine/pipeline.rs:136:12
[INFO] [stdout]     |
[INFO] [stdout]  47 | impl RenderPipeline {
[INFO] [stdout]     | ------------------- associated items in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 136 |     pub fn parse_and_layout(html: &str, css_sources: &[&str], vw: f32, vh: f32) -> LayoutResult {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 153 |     fn build_tree(handle: &Handle, sheets: &[StyleSheet], engine: &mut LayoutEngine, styles: &mut HashMap<usize, ComputedStyle>, co...
[INFO] [stdout]     |        ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 207 |     fn apply_tag_font_defaults(tag: &str, cs: &mut ComputedStyle) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 219 |     fn selector_matches(selectors: &[String], tag: &str, id: &str, classes: &[&str]) -> bool {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 232 |     pub fn render_to_semantic_html(html: &str) -> String {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 237 |     pub fn extract_page_meta(html: &str) -> PageSummary {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 247 |     pub async fn execute_fetch_requests(&self, requests: Vec<crate::engine::js_bridge::FetchRequest>) -> Vec<(u32, u16, HashMap<Str...
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 309 |     pub async fn fetch_full_layout(&self, url: &str, vw: f32, vh: f32) -> Result<(PageResult, LayoutResult), String> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 316 |     pub fn render_to_pixels(&mut self, html: &str, css_sources: &[&str], vw: f32, vh: f32) -> RenderedPage {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 350 |     pub async fn fetch_and_render(&mut self, url: &str, vw: f32, vh: f32) -> Result<(PageResult, RenderedPage), String> {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `RenderedPage` is never constructed
[INFO] [stdout]    --> src/engine/pipeline.rs:374:12
[INFO] [stdout]     |
[INFO] [stdout] 374 | pub struct RenderedPage {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `event_dispatcher`, `focus_manager`, `form_state`, `js_bridge`, and `current_layouts` are never read
[INFO] [stdout]    --> src/engine/pipeline.rs:384:9
[INFO] [stdout]     |
[INFO] [stdout] 383 | pub struct PageInteractor {
[INFO] [stdout]     |            -------------- fields in this struct
[INFO] [stdout] 384 |     pub event_dispatcher: EventDispatcher,
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^
[INFO] [stdout] 385 |     pub focus_manager: FocusManager,
[INFO] [stdout]     |         ^^^^^^^^^^^^^
[INFO] [stdout] 386 |     pub form_state: FormState,
[INFO] [stdout]     |         ^^^^^^^^^^
[INFO] [stdout] 387 |     pub js_bridge: crate::engine::js_bridge::JsDomBridge,
[INFO] [stdout]     |         ^^^^^^^^^
[INFO] [stdout] 388 |     pub current_layouts: HashMap<usize, LayoutRect>,
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple methods are never used
[INFO] [stdout]    --> src/engine/pipeline.rs:400:12
[INFO] [stdout]     |
[INFO] [stdout] 390 | impl PageInteractor {
[INFO] [stdout]     | ------------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 400 |     pub fn dispatch_click(&mut self, x: f32, y: f32) -> Option<usize> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 406 |     pub fn dispatch_key(&mut self, key: &str, code: u32, shift: bool, ctrl: bool, alt: bool) {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 414 |     pub fn focus_node(&mut self, node_id: usize) {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 417 |     pub fn tab_focus_next(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 420 |     pub fn submit_form(&self, form_id: &str) -> HashMap<String, String> {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 423 |     pub fn set_page_origin(&mut self, url: &str) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 429 |     pub fn drain_js_fetches(&mut self) -> Vec<crate::engine::js_bridge::FetchRequest> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `extract_scripts` is never used
[INFO] [stdout]    --> src/engine/pipeline.rs:434:8
[INFO] [stdout]     |
[INFO] [stdout] 434 | pub fn extract_scripts(html: &str) -> Vec<String> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `extract_external_script_urls` is never used
[INFO] [stdout]    --> src/engine/pipeline.rs:441:8
[INFO] [stdout]     |
[INFO] [stdout] 441 | pub fn extract_external_script_urls(html: &str) -> Vec<String> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `collect_external_scripts` is never used
[INFO] [stdout]    --> src/engine/pipeline.rs:448:4
[INFO] [stdout]     |
[INFO] [stdout] 448 | fn collect_external_scripts(handle: &Handle, out: &mut Vec<String>) {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `collect_inline_scripts` is never used
[INFO] [stdout]    --> src/engine/pipeline.rs:460:4
[INFO] [stdout]     |
[INFO] [stdout] 460 | fn collect_inline_scripts(handle: &Handle, out: &mut Vec<String>) {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `rect` and `color` are never read
[INFO] [stdout]  --> src/engine/paint.rs:8:16
[INFO] [stdout]   |
[INFO] [stdout] 8 |     FillRect { rect: PaintRect, color: [u8; 4] },
[INFO] [stdout]   |     --------   ^^^^             ^^^^^
[INFO] [stdout]   |     |
[INFO] [stdout]   |     fields in this variant
[INFO] [stdout]   |
[INFO] [stdout]   = note: `PaintCommand` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `x`, `y`, `text`, `font_size`, `color`, and `max_width` are never read
[INFO] [stdout]  --> src/engine/paint.rs:9:16
[INFO] [stdout]   |
[INFO] [stdout] 9 |     DrawText { x: f32, y: f32, text: String, font_size: f32, color: [u8; 4], max_width: f32 },
[INFO] [stdout]   |     --------   ^       ^       ^^^^          ^^^^^^^^^       ^^^^^           ^^^^^^^^^
[INFO] [stdout]   |     |
[INFO] [stdout]   |     fields in this variant
[INFO] [stdout]   |
[INFO] [stdout]   = note: `PaintCommand` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `rect`, `image_data`, `img_w`, and `img_h` are never read
[INFO] [stdout]   --> src/engine/paint.rs:10:17
[INFO] [stdout]    |
[INFO] [stdout] 10 |     DrawImage { rect: PaintRect, image_data: Option<Vec<u8>>, img_w: u32, img_h: u32 },
[INFO] [stdout]    |     ---------   ^^^^             ^^^^^^^^^^                   ^^^^^       ^^^^^
[INFO] [stdout]    |     |
[INFO] [stdout]    |     fields in this variant
[INFO] [stdout]    |
[INFO] [stdout]    = note: `PaintCommand` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `rect` is never read
[INFO] [stdout]   --> src/engine/paint.rs:11:16
[INFO] [stdout]    |
[INFO] [stdout] 11 |     PushClip { rect: PaintRect },
[INFO] [stdout]    |     --------   ^^^^
[INFO] [stdout]    |     |
[INFO] [stdout]    |     field in this variant
[INFO] [stdout]    |
[INFO] [stdout]    = note: `PaintCommand` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variants `DrawCanvas`, `DrawSvg`, `DrawVideo`, `DrawAudio`, and `DrawIframe` are never constructed
[INFO] [stdout]   --> src/engine/paint.rs:13:5
[INFO] [stdout]    |
[INFO] [stdout]  7 | pub enum PaintCommand {
[INFO] [stdout]    |          ------------ variants in this enum
[INFO] [stdout] ...
[INFO] [stdout] 13 |     DrawCanvas { rect: PaintRect, canvas_id: usize },
[INFO] [stdout]    |     ^^^^^^^^^^
[INFO] [stdout] 14 |     DrawSvg { rect: PaintRect, svg_content: String },
[INFO] [stdout]    |     ^^^^^^^
[INFO] [stdout] 15 |     DrawVideo { rect: PaintRect, video_id: usize },
[INFO] [stdout]    |     ^^^^^^^^^
[INFO] [stdout] 16 |     DrawAudio { rect: PaintRect, audio_id: usize },
[INFO] [stdout]    |     ^^^^^^^^^
[INFO] [stdout] 17 |     DrawIframe { rect: PaintRect, src: String },
[INFO] [stdout]    |     ^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `PaintCommand` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `x`, `y`, `w`, and `h` are never read
[INFO] [stdout]   --> src/engine/paint.rs:22:9
[INFO] [stdout]    |
[INFO] [stdout] 21 | pub struct PaintRect {
[INFO] [stdout]    |            --------- fields in this struct
[INFO] [stdout] 22 |     pub x: f32,
[INFO] [stdout]    |         ^
[INFO] [stdout] 23 |     pub y: f32,
[INFO] [stdout]    |         ^
[INFO] [stdout] 24 |     pub w: f32,
[INFO] [stdout]    |         ^
[INFO] [stdout] 25 |     pub h: f32,
[INFO] [stdout]    |         ^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `PaintRect` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `width` and `height` are never read
[INFO] [stdout]   --> src/engine/paint.rs:37:9
[INFO] [stdout]    |
[INFO] [stdout] 35 | pub struct DisplayList {
[INFO] [stdout]    |            ----------- fields in this struct
[INFO] [stdout] 36 |     pub commands: Vec<PaintCommand>,
[INFO] [stdout] 37 |     pub width: u32,
[INFO] [stdout]    |         ^^^^^
[INFO] [stdout] 38 |     pub height: u32,
[INFO] [stdout]    |         ^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `DisplayList` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `id` and `iframe_src` are never read
[INFO] [stdout]   --> src/engine/paint.rs:47:9
[INFO] [stdout]    |
[INFO] [stdout] 46 | pub struct RenderNode {
[INFO] [stdout]    |            ---------- fields in this struct
[INFO] [stdout] 47 |     pub id: usize,
[INFO] [stdout]    |         ^^
[INFO] [stdout] ...
[INFO] [stdout] 51 |     pub iframe_src: String,
[INFO] [stdout]    |         ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `build_display_list` is never used
[INFO] [stdout]    --> src/engine/paint.rs:156:8
[INFO] [stdout]     |
[INFO] [stdout] 156 | pub fn build_display_list(
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `color_to_rgba` is never used
[INFO] [stdout]    --> src/engine/paint.rs:218:8
[INFO] [stdout]     |
[INFO] [stdout] 218 | pub fn color_to_rgba(c: &Color) -> [u8; 4] {
[INFO] [stdout]     |        ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `SoftwareRenderer` is never constructed
[INFO] [stdout]    --> src/engine/paint.rs:222:12
[INFO] [stdout]     |
[INFO] [stdout] 222 | pub struct SoftwareRenderer {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/engine/paint.rs:232:12
[INFO] [stdout]     |
[INFO] [stdout] 231 | impl SoftwareRenderer {
[INFO] [stdout]     | --------------------- associated items in this implementation
[INFO] [stdout] 232 |     pub fn new(width: u32, height: u32) -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 264 |     pub fn render(&mut self, dl: &DisplayList) {
[INFO] [stdout]     |            ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 307 |     fn is_clipped(&self, x: f32, y: f32) -> bool {
[INFO] [stdout]     |        ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 311 |     fn set_pixel(&mut self, x: i32, y: i32, color: &[u8; 4]) {
[INFO] [stdout]     |        ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 328 |     fn fill_rect(&mut self, rect: &PaintRect, color: &[u8; 4]) {
[INFO] [stdout]     |        ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 336 |     fn draw_text(&mut self, x: f32, y: f32, text: &str, font_size: f32, color: &[u8; 4], max_width: f32) {
[INFO] [stdout]     |        ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 366 |     fn draw_image(&mut self, rect: &PaintRect, rgba: &[u8], img_w: u32, img_h: u32) {
[INFO] [stdout]     |        ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 388 |     fn draw_border(&mut self, rect: &PaintRect, color: &[u8; 4]) {
[INFO] [stdout]     |        ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 396 |     fn draw_play_icon(&mut self, rect: &PaintRect) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 410 |     pub fn clear(&mut self, color: [u8; 4]) {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 417 |     pub fn render_with_resources(&mut self, dl: &DisplayList, canvases: &HashMap<usize, crate::engine::canvas::Canvas2D>) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 468 |     fn render_canvas(&mut self, rect: &PaintRect, canvas: &crate::engine::canvas::Canvas2D) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 490 |     fn render_svg(&mut self, rect: &PaintRect, svg_content: &str) {
[INFO] [stdout]     |        ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 541 |     pub fn pixels(&self) -> &[u8] { &self.pixels }
[INFO] [stdout]     |            ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ShapedLine` is never constructed
[INFO] [stdout]  --> src/engine/text.rs:9:12
[INFO] [stdout]   |
[INFO] [stdout] 9 | pub struct ShapedLine {
[INFO] [stdout]   |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ShapedText` is never constructed
[INFO] [stdout]   --> src/engine/text.rs:16:12
[INFO] [stdout]    |
[INFO] [stdout] 16 | pub struct ShapedText {
[INFO] [stdout]    |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `layout_text` and `char_width` are never used
[INFO] [stdout]    --> src/engine/text.rs:62:12
[INFO] [stdout]     |
[INFO] [stdout]  22 | impl TextShaper {
[INFO] [stdout]     | --------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout]  62 |     pub fn layout_text(&self, text: &str, font_size: f32, max_width: f32) -> ShapedText {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 103 |     pub fn char_width(&self, ch: char, font_size: f32) -> f32 {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `width`, `height`, and `rgba_data` are never read
[INFO] [stdout]  --> src/engine/image_decode.rs:4:9
[INFO] [stdout]   |
[INFO] [stdout] 3 | pub struct CachedImage {
[INFO] [stdout]   |            ----------- fields in this struct
[INFO] [stdout] 4 |     pub width: u32,
[INFO] [stdout]   |         ^^^^^
[INFO] [stdout] 5 |     pub height: u32,
[INFO] [stdout]   |         ^^^^^^
[INFO] [stdout] 6 |     pub rgba_data: Vec<u8>,
[INFO] [stdout]   |         ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `entries` and `max_entries` are never read
[INFO] [stdout]   --> src/engine/image_decode.rs:10:5
[INFO] [stdout]    |
[INFO] [stdout]  9 | pub struct ImageCache {
[INFO] [stdout]    |            ---------- fields in this struct
[INFO] [stdout] 10 |     entries: HashMap<String, CachedImage>,
[INFO] [stdout]    |     ^^^^^^^
[INFO] [stdout] 11 |     max_entries: usize,
[INFO] [stdout]    |     ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]   --> src/engine/image_decode.rs:19:12
[INFO] [stdout]    |
[INFO] [stdout] 14 | impl ImageCache {
[INFO] [stdout]    | --------------- associated items in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 19 |     pub fn decode_bytes(&mut self, url: &str, data: &[u8]) -> Result<(), String> {
[INFO] [stdout]    |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 34 |     pub fn decode_and_resize(&mut self, url: &str, data: &[u8], max_dim: u32) -> Result<(), String> {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 50 |     pub fn get(&self, url: &str) -> Option<&CachedImage> { self.entries.get(url) }
[INFO] [stdout]    |            ^^^
[INFO] [stdout] 51 |
[INFO] [stdout] 52 |     pub fn contains(&self, url: &str) -> bool { self.entries.contains_key(url) }
[INFO] [stdout]    |            ^^^^^^^^
[INFO] [stdout] 53 |
[INFO] [stdout] 54 |     pub fn remove(&mut self, url: &str) { self.entries.remove(url); }
[INFO] [stdout]    |            ^^^^^^
[INFO] [stdout] 55 |
[INFO] [stdout] 56 |     pub fn clear(&mut self) { self.entries.clear(); }
[INFO] [stdout]    |            ^^^^^
[INFO] [stdout] 57 |
[INFO] [stdout] 58 |     pub fn len(&self) -> usize { self.entries.len() }
[INFO] [stdout]    |            ^^^
[INFO] [stdout] 59 |
[INFO] [stdout] 60 |     pub fn decode_file(&mut self, path: &str) -> Result<(), String> {
[INFO] [stdout]    |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 65 |     pub fn create_solid_color(width: u32, height: u32, r: u8, g: u8, b: u8, a: u8) -> CachedImage {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 73 |     pub fn supported_formats() -> &'static [&'static str] {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `detect_format` is never used
[INFO] [stdout]   --> src/engine/image_decode.rs:78:8
[INFO] [stdout]    |
[INFO] [stdout] 78 | pub fn detect_format(data: &[u8]) -> Option<&'static str> {
[INFO] [stdout]    |        ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `console_log` and `globals` are never read
[INFO] [stdout]  --> src/engine/js.rs:8:5
[INFO] [stdout]   |
[INFO] [stdout] 5 | pub struct JsRuntime {
[INFO] [stdout]   |            --------- fields in this struct
[INFO] [stdout] ...
[INFO] [stdout] 8 |     console_log: Vec<ConsoleEntry>,
[INFO] [stdout]   |     ^^^^^^^^^^^
[INFO] [stdout] 9 |     globals: HashMap<String, String>,
[INFO] [stdout]   |     ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `level`, `message`, and `timestamp` are never read
[INFO] [stdout]   --> src/engine/js.rs:14:9
[INFO] [stdout]    |
[INFO] [stdout] 13 | pub struct ConsoleEntry {
[INFO] [stdout]    |            ------------ fields in this struct
[INFO] [stdout] 14 |     pub level: String,
[INFO] [stdout]    |         ^^^^^
[INFO] [stdout] 15 |     pub message: String,
[INFO] [stdout]    |         ^^^^^^^
[INFO] [stdout] 16 |     pub timestamp: u64,
[INFO] [stdout]    |         ^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `ConsoleEntry` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `JsEvalResult` is never constructed
[INFO] [stdout]   --> src/engine/js.rs:20:12
[INFO] [stdout]    |
[INFO] [stdout] 20 | pub struct JsEvalResult {
[INFO] [stdout]    |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `eval`, `eval_dom_script`, `drain_console`, `set_global`, `reset`, and `is_available` are never used
[INFO] [stdout]    --> src/engine/js.rs:56:12
[INFO] [stdout]     |
[INFO] [stdout]  26 | impl JsRuntime {
[INFO] [stdout]     | -------------- associated items in this implementation
[INFO] [stdout] ...
[INFO] [stdout]  56 |     pub fn eval(&mut self, script: &str) -> JsEvalResult {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout]  78 |     pub fn eval_dom_script(&mut self, script: &str, document_json: &str) -> JsEvalResult {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 108 |     fn drain_console(&mut self) -> Vec<ConsoleEntry> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 137 |     pub fn set_global(&mut self, name: &str, value: &str) {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 146 |     pub fn reset(&mut self) {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 154 |     pub fn is_available() -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `HEARTBEAT` is never used
[INFO] [stdout]   --> src/engine/base17.rs:12:11
[INFO] [stdout]    |
[INFO] [stdout] 12 | pub const HEARTBEAT: u16 = 259;
[INFO] [stdout]    |           ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `ERROR_SLOT` is never used
[INFO] [stdout]   --> src/engine/base17.rs:13:11
[INFO] [stdout]    |
[INFO] [stdout] 13 | pub const ERROR_SLOT: u16 = 260;
[INFO] [stdout]    |           ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variants `IncompleteVarint` and `ChecksumMismatch` are never constructed
[INFO] [stdout]   --> src/engine/base17.rs:36:5
[INFO] [stdout]    |
[INFO] [stdout] 33 | pub enum CodecError {
[INFO] [stdout]    |          ---------- variants in this enum
[INFO] [stdout] ...
[INFO] [stdout] 36 |     IncompleteVarint,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^
[INFO] [stdout] 37 |     ChecksumMismatch { expected: u8, got: u8 },
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `CodecError` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `encode_f32` is never used
[INFO] [stdout]    --> src/engine/base17.rs:176:8
[INFO] [stdout]     |
[INFO] [stdout] 176 | pub fn encode_f32(v: f32) -> [u8; 8] { encode_u32(v.to_bits()) }
[INFO] [stdout]     |        ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `decode_f32` is never used
[INFO] [stdout]    --> src/engine/base17.rs:178:8
[INFO] [stdout]     |
[INFO] [stdout] 178 | pub fn decode_f32(sept: &[u8]) -> Result<(f32, usize), CodecError> {
[INFO] [stdout]     |        ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `feed_slice`, `value`, and `reset` are never used
[INFO] [stdout]    --> src/engine/base17.rs:214:12
[INFO] [stdout]     |
[INFO] [stdout] 207 | impl Checksummer {
[INFO] [stdout]     | ---------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 214 |     pub fn feed_slice(&mut self, digits: &[u8]) {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 218 |     pub fn value(&self) -> u8 { self.sum as u8 }
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 226 |     pub fn reset(&mut self) { self.sum = 0; }
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `write_heartbeat` and `len` are never used
[INFO] [stdout]    --> src/engine/base17.rs:273:12
[INFO] [stdout]     |
[INFO] [stdout] 236 | impl StreamEncoder {
[INFO] [stdout]     | ------------------ methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 273 |     pub fn write_heartbeat(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 286 |     pub fn len(&self) -> usize { self.buffer.len() }
[INFO] [stdout]     |            ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `read_bytes`, `remaining`, and `verify_checksum` are never used
[INFO] [stdout]    --> src/engine/base17.rs:339:12
[INFO] [stdout]     |
[INFO] [stdout] 295 | impl<'a> StreamDecoder<'a> {
[INFO] [stdout]     | -------------------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 339 |     pub fn read_bytes(&mut self, n: usize) -> Result<Vec<u8>, CodecError> {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 345 |     pub fn remaining(&self) -> usize {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 363 |     pub fn verify_checksum(&mut self) -> Result<bool, CodecError> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `category` is never used
[INFO] [stdout]   --> src/engine/amni_ir.rs:65:12
[INFO] [stdout]    |
[INFO] [stdout] 36 | impl Opcode {
[INFO] [stdout]    | ----------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 65 |     pub fn category(&self) -> &'static str {
[INFO] [stdout]    |            ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `next_layer_id` is never read
[INFO] [stdout]    --> src/engine/amni_ir.rs:252:5
[INFO] [stdout]     |
[INFO] [stdout] 249 | pub struct IrBuilder {
[INFO] [stdout]     |            --------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 252 |     next_layer_id: u32,
[INFO] [stdout]     |     ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple methods are never used
[INFO] [stdout]    --> src/engine/amni_ir.rs:270:12
[INFO] [stdout]     |
[INFO] [stdout] 256 | impl IrBuilder {
[INFO] [stdout]     | -------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 270 |     pub fn append_child(&mut self, parent: u32, child: u32) {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 273 |     pub fn set_attr(&mut self, node: u32, key: &str, value: &str) {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 276 |     pub fn set_text(&mut self, node: u32, text: &str) {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 282 |     pub fn set_margin(&mut self, node: u32, t: f32, r: f32, b: f32, l: f32) {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 285 |     pub fn set_padding(&mut self, node: u32, t: f32, r: f32, b: f32, l: f32) {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 297 |     pub fn paint_clip(&mut self, x: f32, y: f32, w: f32, h: f32) {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 300 |     pub fn paint_unclip(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 303 |     pub fn push_layer(&mut self) -> u32 {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 308 |     pub fn pop_layer(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `id` and `tag_hash` are never read
[INFO] [stdout]   --> src/engine/ir_executor.rs:11:5
[INFO] [stdout]    |
[INFO] [stdout] 10 | struct IrNode {
[INFO] [stdout]    |        ------ fields in this struct
[INFO] [stdout] 11 |     id: u32,
[INFO] [stdout]    |     ^^
[INFO] [stdout] 12 |     tag_hash: u32,
[INFO] [stdout]    |     ^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `IrNode` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `textures` is never read
[INFO] [stdout]   --> src/engine/ir_executor.rs:40:5
[INFO] [stdout]    |
[INFO] [stdout] 37 | pub struct IrExecutor {
[INFO] [stdout]    |            ---------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 40 |     textures: HashMap<u32, TextureRef>,
[INFO] [stdout]    |     ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `id`, `width`, and `height` are never read
[INFO] [stdout]   --> src/engine/ir_executor.rs:53:9
[INFO] [stdout]    |
[INFO] [stdout] 52 | pub struct TextureRef {
[INFO] [stdout]    |            ---------- fields in this struct
[INFO] [stdout] 53 |     pub id: u32,
[INFO] [stdout]    |         ^^
[INFO] [stdout] 54 |     pub width: u32,
[INFO] [stdout]    |         ^^^^^
[INFO] [stdout] 55 |     pub height: u32,
[INFO] [stdout]    |         ^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `TextureRef` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `display_list`, `frame_num`, `navigate_requests`, and `resource_requests` are never read
[INFO] [stdout]   --> src/engine/ir_executor.rs:60:9
[INFO] [stdout]    |
[INFO] [stdout] 59 | pub struct ExecutionResult {
[INFO] [stdout]    |            --------------- fields in this struct
[INFO] [stdout] 60 |     pub display_list: DisplayList,
[INFO] [stdout]    |         ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 64 |     pub frame_num: u32,
[INFO] [stdout]    |         ^^^^^^^^^
[INFO] [stdout] 65 |     pub navigate_requests: Vec<String>,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 66 |     pub resource_requests: Vec<(String, u8)>,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `ExecutionResult` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple methods are never used
[INFO] [stdout]    --> src/engine/ir_executor.rs:300:12
[INFO] [stdout]     |
[INFO] [stdout]  69 | impl IrExecutor {
[INFO] [stdout]     | --------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 300 |     pub fn scroll_to(&mut self, x: f32, y: f32) { self.scroll_x = x; self.scroll_y = y; }
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] 301 |     pub fn scroll_by(&mut self, dx: f32, dy: f32) { self.scroll_x += dx; self.scroll_y += dy; }
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] 302 |     pub fn viewport(&self) -> (f32, f32) { (self.viewport_w, self.viewport_h) }
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] 303 |     pub fn scroll_pos(&self) -> (f32, f32) { (self.scroll_x, self.scroll_y) }
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] 304 |
[INFO] [stdout] 305 |     pub fn register_texture(&mut self, id: u32, width: u32, height: u32) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 324 |     pub fn get_node_text(&self, id: u32) -> Option<&str> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 328 |     pub fn get_node_attr(&self, id: u32, key: &str) -> Option<&str> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 332 |     pub fn clear(&mut self) {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `memory_budget_mb` and `watchdog_timeout_ms` are never read
[INFO] [stdout]   --> src/engine/shunt_sandbox.rs:20:9
[INFO] [stdout]    |
[INFO] [stdout] 19 | pub struct ShuntConfig {
[INFO] [stdout]    |            ----------- fields in this struct
[INFO] [stdout] 20 |     pub memory_budget_mb: usize,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^
[INFO] [stdout] 21 |     pub watchdog_timeout_ms: u64,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `ShuntConfig` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `config` is never read
[INFO] [stdout]   --> src/engine/shunt_sandbox.rs:35:5
[INFO] [stdout]    |
[INFO] [stdout] 33 | pub struct InProcessShunt {
[INFO] [stdout]    |            -------------- field in this struct
[INFO] [stdout] 34 |     state: ShuntState,
[INFO] [stdout] 35 |     config: ShuntConfig,
[INFO] [stdout]    |     ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `get_cached`, `clear_cache`, and `reset` are never used
[INFO] [stdout]    --> src/engine/shunt_sandbox.rs:103:12
[INFO] [stdout]     |
[INFO] [stdout]  39 | impl InProcessShunt {
[INFO] [stdout]     | ------------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 103 |     pub fn get_cached(&self, url: &str) -> Option<&IrProgram> {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 107 |     pub fn clear_cache(&mut self) { self.ir_cache.clear(); }
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] 108 |
[INFO] [stdout] 109 |     pub fn reset(&mut self) {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `is_alive` and `state` are never used
[INFO] [stdout]    --> src/engine/shunt_sandbox.rs:215:12
[INFO] [stdout]     |
[INFO] [stdout] 177 | impl ProcessShunt {
[INFO] [stdout]     | ----------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 215 |     pub fn is_alive(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 227 |     pub fn state(&self) -> &ShuntState { &self.state }
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `process_to_wire`, `state`, `crash_count`, `reset`, and `stats_json` are never used
[INFO] [stdout]    --> src/engine/shunt_sandbox.rs:286:12
[INFO] [stdout]     |
[INFO] [stdout] 244 | impl ShuntManager {
[INFO] [stdout]     | ----------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 286 |     pub fn process_to_wire(&mut self, url: &str, html: &str, css: &[&str]) -> Result<Vec<u8>, String> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 291 |     pub fn state(&self) -> &ShuntState { self.in_process.state() }
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] 292 |
[INFO] [stdout] 293 |     pub fn crash_count(&self) -> u32 { self.crash_count }
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] 294 |
[INFO] [stdout] 295 |     pub fn reset(&mut self) {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 302 |     pub fn stats_json(&self) -> String {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `DomEvent` is never constructed
[INFO] [stdout]  --> src/engine/js_bridge.rs:6:12
[INFO] [stdout]   |
[INFO] [stdout] 6 | pub struct DomEvent {
[INFO] [stdout]   |            ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `mutation_type` and `node_id` are never read
[INFO] [stdout]   --> src/engine/js_bridge.rs:17:9
[INFO] [stdout]    |
[INFO] [stdout] 16 | pub struct DomMutation {
[INFO] [stdout]    |            ----------- fields in this struct
[INFO] [stdout] 17 |     pub mutation_type: MutationType,
[INFO] [stdout]    |         ^^^^^^^^^^^^^
[INFO] [stdout] 18 |     pub node_id: usize,
[INFO] [stdout]    |         ^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `DomMutation` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple variants are never constructed
[INFO] [stdout]   --> src/engine/js_bridge.rs:23:5
[INFO] [stdout]    |
[INFO] [stdout] 22 | pub enum MutationType {
[INFO] [stdout]    |          ------------ variants in this enum
[INFO] [stdout] 23 |     SetText(String),
[INFO] [stdout]    |     ^^^^^^^
[INFO] [stdout] 24 |     SetAttribute(String, String),
[INFO] [stdout]    |     ^^^^^^^^^^^^
[INFO] [stdout] 25 |     RemoveAttribute(String),
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^
[INFO] [stdout] 26 |     SetStyle(String, String),
[INFO] [stdout]    |     ^^^^^^^^
[INFO] [stdout] 27 |     AppendChild(usize),
[INFO] [stdout]    |     ^^^^^^^^^^^
[INFO] [stdout] 28 |     RemoveChild(usize),
[INFO] [stdout]    |     ^^^^^^^^^^^
[INFO] [stdout] 29 |     SetInnerHtml(String),
[INFO] [stdout]    |     ^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `MutationType` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `id`, `callback_code`, `interval_ms`, `is_interval`, and `next_fire_ms` are never read
[INFO] [stdout]   --> src/engine/js_bridge.rs:34:9
[INFO] [stdout]    |
[INFO] [stdout] 33 | pub struct TimerEntry {
[INFO] [stdout]    |            ---------- fields in this struct
[INFO] [stdout] 34 |     pub id: u32,
[INFO] [stdout]    |         ^^
[INFO] [stdout] 35 |     pub callback_code: String,
[INFO] [stdout]    |         ^^^^^^^^^^^^^
[INFO] [stdout] 36 |     pub interval_ms: u64,
[INFO] [stdout]    |         ^^^^^^^^^^^
[INFO] [stdout] 37 |     pub is_interval: bool,
[INFO] [stdout]    |         ^^^^^^^^^^^
[INFO] [stdout] 38 |     pub next_fire_ms: u64,
[INFO] [stdout]    |         ^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `TimerEntry` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `id`, `url`, `method`, `headers`, and `body` are never read
[INFO] [stdout]   --> src/engine/js_bridge.rs:43:9
[INFO] [stdout]    |
[INFO] [stdout] 42 | pub struct FetchRequest {
[INFO] [stdout]    |            ------------ fields in this struct
[INFO] [stdout] 43 |     pub id: u32,
[INFO] [stdout]    |         ^^
[INFO] [stdout] 44 |     pub url: String,
[INFO] [stdout]    |         ^^^
[INFO] [stdout] 45 |     pub method: String,
[INFO] [stdout]    |         ^^^^^^
[INFO] [stdout] 46 |     pub headers: HashMap<String, String>,
[INFO] [stdout]    |         ^^^^^^^
[INFO] [stdout] 47 |     pub body: Option<String>,
[INFO] [stdout]    |         ^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `FetchRequest` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `nodes`, `body_id`, `head_id`, and `parent_map` are never read
[INFO] [stdout]   --> src/engine/js_bridge.rs:52:5
[INFO] [stdout]    |
[INFO] [stdout] 51 | struct DomSnapshot {
[INFO] [stdout]    |        ----------- fields in this struct
[INFO] [stdout] 52 |     nodes: HashMap<usize, SnapshotNode>,
[INFO] [stdout]    |     ^^^^^
[INFO] [stdout] 53 |     body_id: Option<usize>,
[INFO] [stdout]    |     ^^^^^^^
[INFO] [stdout] 54 |     head_id: Option<usize>,
[INFO] [stdout]    |     ^^^^^^^
[INFO] [stdout] 55 |     parent_map: HashMap<usize, usize>,
[INFO] [stdout]    |     ^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `DomSnapshot` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `tag`, `text`, `attrs`, `styles`, `children`, and `classes` are never read
[INFO] [stdout]   --> src/engine/js_bridge.rs:60:5
[INFO] [stdout]    |
[INFO] [stdout] 59 | struct SnapshotNode {
[INFO] [stdout]    |        ------------ fields in this struct
[INFO] [stdout] 60 |     tag: String,
[INFO] [stdout]    |     ^^^
[INFO] [stdout] 61 |     text: String,
[INFO] [stdout]    |     ^^^^
[INFO] [stdout] 62 |     attrs: HashMap<String, String>,
[INFO] [stdout]    |     ^^^^^
[INFO] [stdout] 63 |     styles: HashMap<String, String>,
[INFO] [stdout]    |     ^^^^^^
[INFO] [stdout] 64 |     children: Vec<usize>,
[INFO] [stdout]    |     ^^^^^^^^
[INFO] [stdout] 65 |     classes: Vec<String>,
[INFO] [stdout]    |     ^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `SnapshotNode` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple fields are never read
[INFO] [stdout]   --> src/engine/js_bridge.rs:69:5
[INFO] [stdout]    |
[INFO] [stdout] 68 | pub struct JsDomBridge {
[INFO] [stdout]    |            ----------- fields in this struct
[INFO] [stdout] 69 |     runtime: JsRuntime,
[INFO] [stdout]    |     ^^^^^^^
[INFO] [stdout] 70 |     event_handlers: HashMap<(usize, String), Vec<String>>,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^
[INFO] [stdout] 71 |     pending_mutations: Vec<DomMutation>,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 72 |     timers: HashMap<u32, TimerEntry>,
[INFO] [stdout]    |     ^^^^^^
[INFO] [stdout] 73 |     next_timer_id: u32,
[INFO] [stdout]    |     ^^^^^^^^^^^^^
[INFO] [stdout] 74 |     fetch_queue: Vec<FetchRequest>,
[INFO] [stdout]    |     ^^^^^^^^^^^
[INFO] [stdout] 75 |     next_fetch_id: usize,
[INFO] [stdout]    |     ^^^^^^^^^^^^^
[INFO] [stdout] 76 |     pending_fetches: Vec<FetchRequest>,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^
[INFO] [stdout] 77 |     dom_snapshot: Option<DomSnapshot>,
[INFO] [stdout]    |     ^^^^^^^^^^^^
[INFO] [stdout] 78 |     local_storage: HashMap<String, HashMap<String, String>>,
[INFO] [stdout]    |     ^^^^^^^^^^^^^
[INFO] [stdout] 79 |     session_storage: HashMap<String, HashMap<String, String>>,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^
[INFO] [stdout] 80 |     current_origin: String,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/engine/js_bridge.rs:101:12
[INFO] [stdout]     |
[INFO] [stdout]  83 | impl JsDomBridge {
[INFO] [stdout]     | ---------------- associated items in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 101 |     pub fn set_origin(&mut self, origin: &str) {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 105 |     pub fn snapshot_dom(&mut self, tree: &RenderTree) {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 137 |     fn build_nodes_json(snap: &DomSnapshot) -> String {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 170 |     fn build_storage_json(storage: &HashMap<String, HashMap<String, String>>, origin: &str) -> String {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 175 |     fn inject_dom_api(&mut self) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 479 |     pub fn exec_script(&mut self, script: &str) -> JsExecResult {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 496 |     fn collect_mutations(&mut self) -> Vec<DomMutation> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 551 |     fn collect_timers(&mut self) -> Vec<TimerEntry> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 570 |     fn collect_fetches(&mut self) -> Vec<FetchRequest> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 596 |     fn collect_storage_mutations(&mut self) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 626 |     pub fn dispatch_event(&mut self, event: &DomEvent) -> Vec<DomMutation> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 648 |     pub fn tick_timers(&mut self) -> Vec<DomMutation> {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 677 |     pub fn resolve_fetch(&mut self, id: u32, status: u16, headers: HashMap<String, String>, body: String) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 705 |     pub fn apply_mutations(tree: &mut RenderTree, mutations: &[DomMutation]) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 725 |     pub fn pending_fetch_count(&self) -> usize { self.fetch_queue.len() }
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 726 |     pub fn timer_count(&self) -> usize { self.timers.len() }
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] 727 |
[INFO] [stdout] 728 |     pub fn drain_fetch_queue(&mut self) -> Vec<FetchRequest> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 732 |     pub fn drain_pending_fetches(&mut self) -> Vec<FetchRequest> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 736 |     pub fn get_local_storage(&self, origin: &str) -> &HashMap<String, String> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 741 |     pub fn get_session_storage(&self, origin: &str) -> &HashMap<String, String> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 746 |     pub fn clear_session_storage(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 750 |     pub fn reset(&mut self) {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `JsExecResult` is never constructed
[INFO] [stdout]    --> src/engine/js_bridge.rs:763:12
[INFO] [stdout]     |
[INFO] [stdout] 763 | pub struct JsExecResult {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variants `InlineBox` and `LineBreak` are never constructed
[INFO] [stdout]   --> src/engine/inline_layout.rs:10:5
[INFO] [stdout]    |
[INFO] [stdout]  8 | pub enum InlineItem {
[INFO] [stdout]    |          ---------- variants in this enum
[INFO] [stdout]  9 |     Text { text: String, style: InlineStyle },
[INFO] [stdout] 10 |     InlineBox { width: f32, height: f32, node_id: usize },
[INFO] [stdout]    |     ^^^^^^^^^
[INFO] [stdout] 11 |     LineBreak,
[INFO] [stdout]    |     ^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `InlineItem` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `font_weight`, `color`, `is_bold`, and `is_italic` are never read
[INFO] [stdout]   --> src/engine/inline_layout.rs:17:9
[INFO] [stdout]    |
[INFO] [stdout] 15 | pub struct InlineStyle {
[INFO] [stdout]    |            ----------- fields in this struct
[INFO] [stdout] 16 |     pub font_size: f32,
[INFO] [stdout] 17 |     pub font_weight: u16,
[INFO] [stdout]    |         ^^^^^^^^^^^
[INFO] [stdout] 18 |     pub line_height: f32,
[INFO] [stdout] 19 |     pub color: [u8; 4],
[INFO] [stdout]    |         ^^^^^
[INFO] [stdout] 20 |     pub is_bold: bool,
[INFO] [stdout]    |         ^^^^^^^
[INFO] [stdout] 21 |     pub is_italic: bool,
[INFO] [stdout]    |         ^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `InlineStyle` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `from_computed` is never used
[INFO] [stdout]   --> src/engine/inline_layout.rs:25:12
[INFO] [stdout]    |
[INFO] [stdout] 24 | impl InlineStyle {
[INFO] [stdout]    | ---------------- associated function in this implementation
[INFO] [stdout] 25 |     pub fn from_computed(cs: &ComputedStyle) -> Self {
[INFO] [stdout]    |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `width`, `text`, `style`, and `node_id` are never read
[INFO] [stdout]   --> src/engine/inline_layout.rs:41:9
[INFO] [stdout]    |
[INFO] [stdout] 38 | pub struct PositionedFragment {
[INFO] [stdout]    |            ------------------ fields in this struct
[INFO] [stdout] ...
[INFO] [stdout] 41 |     pub width: f32,
[INFO] [stdout]    |         ^^^^^
[INFO] [stdout] 42 |     pub height: f32,
[INFO] [stdout] 43 |     pub text: String,
[INFO] [stdout]    |         ^^^^
[INFO] [stdout] 44 |     pub style: InlineStyle,
[INFO] [stdout]    |         ^^^^^
[INFO] [stdout] 45 |     pub node_id: Option<usize>,
[INFO] [stdout]    |         ^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `PositionedFragment` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `y`, `width`, `height`, and `baseline` are never read
[INFO] [stdout]   --> src/engine/inline_layout.rs:50:9
[INFO] [stdout]    |
[INFO] [stdout] 49 | pub struct LineBox {
[INFO] [stdout]    |            ------- fields in this struct
[INFO] [stdout] 50 |     pub y: f32,
[INFO] [stdout]    |         ^
[INFO] [stdout] 51 |     pub width: f32,
[INFO] [stdout]    |         ^^^^^
[INFO] [stdout] 52 |     pub height: f32,
[INFO] [stdout]    |         ^^^^^^
[INFO] [stdout] 53 |     pub baseline: f32,
[INFO] [stdout]    |         ^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `LineBox` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `all_fragments` is never used
[INFO] [stdout]    --> src/engine/inline_layout.rs:177:12
[INFO] [stdout]     |
[INFO] [stdout]  63 | impl InlineFormattingContext {
[INFO] [stdout]     | ---------------------------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 177 |     pub fn all_fragments(&self) -> Vec<&PositionedFragment> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `extract_inline_items` is never used
[INFO] [stdout]    --> src/engine/inline_layout.rs:199:8
[INFO] [stdout]     |
[INFO] [stdout] 199 | pub fn extract_inline_items(
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `extract_inline_recursive` is never used
[INFO] [stdout]    --> src/engine/inline_layout.rs:209:4
[INFO] [stdout]     |
[INFO] [stdout] 209 | fn extract_inline_recursive(
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `Transform` is never constructed
[INFO] [stdout]  --> src/engine/css_advanced.rs:3:12
[INFO] [stdout]   |
[INFO] [stdout] 3 | pub struct Transform {
[INFO] [stdout]   |            ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]   --> src/engine/css_advanced.rs:10:12
[INFO] [stdout]    |
[INFO] [stdout]  9 | impl Transform {
[INFO] [stdout]    | -------------- associated items in this implementation
[INFO] [stdout] 10 |     pub fn translate(tx: f32, ty: f32) -> Self { Self { matrix: [1.0, 0.0, 0.0, 1.0, tx, ty] } }
[INFO] [stdout]    |            ^^^^^^^^^
[INFO] [stdout] 11 |     pub fn rotate(deg: f32) -> Self {
[INFO] [stdout]    |            ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 16 |     pub fn scale(sx: f32, sy: f32) -> Self { Self { matrix: [sx, 0.0, 0.0, sy, 0.0, 0.0] } }
[INFO] [stdout]    |            ^^^^^
[INFO] [stdout] 17 |     pub fn skew(ax: f32, ay: f32) -> Self {
[INFO] [stdout]    |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 22 |     pub fn matrix(a: f32, b: f32, c: f32, d: f32, e: f32, f: f32) -> Self { Self { matrix: [a, b, c, d, e, f] } }
[INFO] [stdout]    |            ^^^^^^
[INFO] [stdout] 23 |     pub fn apply_to_point(&self, x: f32, y: f32) -> (f32, f32) {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 27 |     pub fn compose(&self, other: &Transform) -> Transform {
[INFO] [stdout]    |            ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variants `EaseIn`, `EaseOut`, `EaseInOut`, and `CubicBezier` are never constructed
[INFO] [stdout]   --> src/engine/css_advanced.rs:41:5
[INFO] [stdout]    |
[INFO] [stdout] 38 | pub enum TimingFunction {
[INFO] [stdout]    |          -------------- variants in this enum
[INFO] [stdout] ...
[INFO] [stdout] 41 |     EaseIn,
[INFO] [stdout]    |     ^^^^^^
[INFO] [stdout] 42 |     EaseOut,
[INFO] [stdout]    |     ^^^^^^^
[INFO] [stdout] 43 |     EaseInOut,
[INFO] [stdout]    |     ^^^^^^^^^
[INFO] [stdout] 44 |     CubicBezier(f32, f32, f32, f32),
[INFO] [stdout]    |     ^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `TimingFunction` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `Transition` is never constructed
[INFO] [stdout]   --> src/engine/css_advanced.rs:75:12
[INFO] [stdout]    |
[INFO] [stdout] 75 | pub struct Transition {
[INFO] [stdout]    |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `interpolate` is never used
[INFO] [stdout]   --> src/engine/css_advanced.rs:82:12
[INFO] [stdout]    |
[INFO] [stdout] 81 | impl Transition {
[INFO] [stdout]    | --------------- method in this implementation
[INFO] [stdout] 82 |     pub fn interpolate(&self, t: f32) -> f32 { self.timing.interpolate(t) }
[INFO] [stdout]    |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variants `Reverse` and `AlternateReverse` are never constructed
[INFO] [stdout]   --> src/engine/css_advanced.rs:85:39
[INFO] [stdout]    |
[INFO] [stdout] 85 | pub enum AnimationDirection { Normal, Reverse, Alternate, AlternateReverse }
[INFO] [stdout]    |          ------------------           ^^^^^^^             ^^^^^^^^^^^^^^^^
[INFO] [stdout]    |          |
[INFO] [stdout]    |          variants in this enum
[INFO] [stdout]    |
[INFO] [stdout]    = note: `AnimationDirection` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variants `Forwards`, `Backwards`, and `Both` are never constructed
[INFO] [stdout]   --> src/engine/css_advanced.rs:87:27
[INFO] [stdout]    |
[INFO] [stdout] 87 | pub enum FillMode { None, Forwards, Backwards, Both }
[INFO] [stdout]    |          --------         ^^^^^^^^  ^^^^^^^^^  ^^^^
[INFO] [stdout]    |          |
[INFO] [stdout]    |          variants in this enum
[INFO] [stdout]    |
[INFO] [stdout]    = note: `FillMode` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `Keyframe` is never constructed
[INFO] [stdout]   --> src/engine/css_advanced.rs:89:12
[INFO] [stdout]    |
[INFO] [stdout] 89 | pub struct Keyframe {
[INFO] [stdout]    |            ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `Animation` is never constructed
[INFO] [stdout]   --> src/engine/css_advanced.rs:94:12
[INFO] [stdout]    |
[INFO] [stdout] 94 | pub struct Animation {
[INFO] [stdout]    |            ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `compute_value_at` is never used
[INFO] [stdout]    --> src/engine/css_advanced.rs:104:12
[INFO] [stdout]     |
[INFO] [stdout] 103 | impl Animation {
[INFO] [stdout]     | -------------- method in this implementation
[INFO] [stdout] 104 |     pub fn compute_value_at(&self, property: &str, progress: f32) -> Option<String> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `Gradient` is never used
[INFO] [stdout]    --> src/engine/css_advanced.rs:145:10
[INFO] [stdout]     |
[INFO] [stdout] 145 | pub enum Gradient {
[INFO] [stdout]     |          ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `sample_color_at` is never used
[INFO] [stdout]    --> src/engine/css_advanced.rs:150:12
[INFO] [stdout]     |
[INFO] [stdout] 149 | impl Gradient {
[INFO] [stdout]     | ------------- method in this implementation
[INFO] [stdout] 150 |     pub fn sample_color_at(&self, position: f32) -> [u8; 4] {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `lerp_u8` is never used
[INFO] [stdout]    --> src/engine/css_advanced.rs:178:4
[INFO] [stdout]     |
[INFO] [stdout] 178 | fn lerp_u8(a: u8, b: u8, t: f32) -> u8 {
[INFO] [stdout]     |    ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `BoxShadow` is never constructed
[INFO] [stdout]    --> src/engine/css_advanced.rs:182:12
[INFO] [stdout]     |
[INFO] [stdout] 182 | pub struct BoxShadow {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `TextShadow` is never constructed
[INFO] [stdout]    --> src/engine/css_advanced.rs:191:12
[INFO] [stdout]     |
[INFO] [stdout] 191 | pub struct TextShadow {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `Filter` is never used
[INFO] [stdout]    --> src/engine/css_advanced.rs:198:10
[INFO] [stdout]     |
[INFO] [stdout] 198 | pub enum Filter {
[INFO] [stdout]     |          ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `CssVars` is never constructed
[INFO] [stdout]    --> src/engine/css_advanced.rs:247:12
[INFO] [stdout]     |
[INFO] [stdout] 247 | pub struct CssVars {
[INFO] [stdout]     |            ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new`, `set`, `resolve_var`, and `resolve_value` are never used
[INFO] [stdout]    --> src/engine/css_advanced.rs:251:12
[INFO] [stdout]     |
[INFO] [stdout] 250 | impl CssVars {
[INFO] [stdout]     | ------------ associated items in this implementation
[INFO] [stdout] 251 |     pub fn new() -> Self { Self { vars: HashMap::new() } }
[INFO] [stdout]     |            ^^^
[INFO] [stdout] 252 |     pub fn set(&mut self, name: &str, value: &str) { self.vars.insert(name.to_string(), value.to_string()); }
[INFO] [stdout]     |            ^^^
[INFO] [stdout] 253 |     pub fn resolve_var(&self, name: &str) -> Option<String> {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 257 |     pub fn resolve_value(&self, value: &str) -> String {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `parse_calc` is never used
[INFO] [stdout]    --> src/engine/css_advanced.rs:272:8
[INFO] [stdout]     |
[INFO] [stdout] 272 | pub fn parse_calc(expr: &str) -> f32 {
[INFO] [stdout]     |        ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `eval_calc_expr` is never used
[INFO] [stdout]    --> src/engine/css_advanced.rs:277:4
[INFO] [stdout]     |
[INFO] [stdout] 277 | fn eval_calc_expr(expr: &str) -> f32 {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `strip_parens` is never used
[INFO] [stdout]    --> src/engine/css_advanced.rs:321:4
[INFO] [stdout]     |
[INFO] [stdout] 321 | fn strip_parens(s: &str) -> Option<&str> {
[INFO] [stdout]     |    ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `parse_calc_value` is never used
[INFO] [stdout]    --> src/engine/css_advanced.rs:337:4
[INFO] [stdout]     |
[INFO] [stdout] 337 | fn parse_calc_value(s: &str) -> f32 {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `parse_transform` is never used
[INFO] [stdout]    --> src/engine/css_advanced.rs:347:8
[INFO] [stdout]     |
[INFO] [stdout] 347 | pub fn parse_transform(s: &str) -> Transform {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `parse_gradient` is never used
[INFO] [stdout]    --> src/engine/css_advanced.rs:387:8
[INFO] [stdout]     |
[INFO] [stdout] 387 | pub fn parse_gradient(s: &str) -> Option<Gradient> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `split_gradient_args` is never used
[INFO] [stdout]    --> src/engine/css_advanced.rs:437:4
[INFO] [stdout]     |
[INFO] [stdout] 437 | fn split_gradient_args(s: &str) -> Vec<&str> {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `parse_color_stop` is never used
[INFO] [stdout]    --> src/engine/css_advanced.rs:452:4
[INFO] [stdout]     |
[INFO] [stdout] 452 | fn parse_color_stop(s: &str) -> ([u8; 4], Option<f32>) {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `parse_stop_position` is never used
[INFO] [stdout]    --> src/engine/css_advanced.rs:479:4
[INFO] [stdout]     |
[INFO] [stdout] 479 | fn parse_stop_position(s: &str) -> Option<f32> {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `parse_hex_color` is never used
[INFO] [stdout]    --> src/engine/css_advanced.rs:485:4
[INFO] [stdout]     |
[INFO] [stdout] 485 | fn parse_hex_color(s: &str) -> [u8; 4] {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `parse_rgb_color` is never used
[INFO] [stdout]    --> src/engine/css_advanced.rs:507:4
[INFO] [stdout]     |
[INFO] [stdout] 507 | fn parse_rgb_color(s: &str) -> [u8; 4] {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `parse_box_shadow` is never used
[INFO] [stdout]    --> src/engine/css_advanced.rs:520:8
[INFO] [stdout]     |
[INFO] [stdout] 520 | pub fn parse_box_shadow(s: &str) -> Option<BoxShadow> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `parse_filter` is never used
[INFO] [stdout]    --> src/engine/css_advanced.rs:554:8
[INFO] [stdout]     |
[INFO] [stdout] 554 | pub fn parse_filter(s: &str) -> Vec<Filter> {
[INFO] [stdout]     |        ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `parse_transition` is never used
[INFO] [stdout]    --> src/engine/css_advanced.rs:592:8
[INFO] [stdout]     |
[INFO] [stdout] 592 | pub fn parse_transition(s: &str) -> Vec<Transition> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `parse_time_ms` is never used
[INFO] [stdout]    --> src/engine/css_advanced.rs:603:4
[INFO] [stdout]     |
[INFO] [stdout] 603 | fn parse_time_ms(s: &str) -> f32 {
[INFO] [stdout]     |    ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `parse_timing_fn` is never used
[INFO] [stdout]    --> src/engine/css_advanced.rs:608:4
[INFO] [stdout]     |
[INFO] [stdout] 608 | fn parse_timing_fn(s: &str) -> TimingFunction {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `MediaQueryList` is never constructed
[INFO] [stdout]    --> src/engine/css_advanced.rs:625:12
[INFO] [stdout]     |
[INFO] [stdout] 625 | pub struct MediaQueryList {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `evaluate_all` is never used
[INFO] [stdout]    --> src/engine/css_advanced.rs:629:12
[INFO] [stdout]     |
[INFO] [stdout] 628 | impl MediaQueryList {
[INFO] [stdout]     | ------------------- method in this implementation
[INFO] [stdout] 629 |     pub fn evaluate_all(&self, vw: f32, vh: f32, is_dark: bool) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `node_id` and `property` are never read
[INFO] [stdout]   --> src/engine/animations.rs:9:9
[INFO] [stdout]    |
[INFO] [stdout]  8 | pub struct AnimationUpdate {
[INFO] [stdout]    |            --------------- fields in this struct
[INFO] [stdout]  9 |     pub node_id: usize,
[INFO] [stdout]    |         ^^^^^^^
[INFO] [stdout] 10 |     pub property: String,
[INFO] [stdout]    |         ^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `AnimationUpdate` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `node_id` is never read
[INFO] [stdout]   --> src/engine/animations.rs:44:9
[INFO] [stdout]    |
[INFO] [stdout] 43 | pub struct ActiveAnimation {
[INFO] [stdout]    |            --------------- field in this struct
[INFO] [stdout] 44 |     pub node_id: usize,
[INFO] [stdout]    |         ^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `ActiveAnimation` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `has_active_animations` and `cancel_animations` are never used
[INFO] [stdout]    --> src/engine/animations.rs:229:12
[INFO] [stdout]     |
[INFO] [stdout] 139 | impl AnimationController {
[INFO] [stdout]     | ------------------------ methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 229 |     pub fn has_active_animations(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 233 |     pub fn cancel_animations(&mut self, node_id: usize) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `evaluate` is never used
[INFO] [stdout]    --> src/engine/animations.rs:247:8
[INFO] [stdout]     |
[INFO] [stdout] 247 | pub fn evaluate(easing: &TimingFunction, t: f32) -> f32 {
[INFO] [stdout]     |        ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple variants are never constructed
[INFO] [stdout]  --> src/engine/forms.rs:5:5
[INFO] [stdout]   |
[INFO] [stdout] 4 | pub enum FormElementType {
[INFO] [stdout]   |          --------------- variants in this enum
[INFO] [stdout] 5 |     TextInput, Password, Email, Number, Search, Tel, Url,
[INFO] [stdout]   |     ^^^^^^^^^  ^^^^^^^^  ^^^^^  ^^^^^^  ^^^^^^  ^^^  ^^^
[INFO] [stdout] 6 |     Textarea, Checkbox, Radio, Select, Button, Submit, Reset,
[INFO] [stdout]   |     ^^^^^^^^  ^^^^^^^^  ^^^^^  ^^^^^^  ^^^^^^  ^^^^^^  ^^^^^
[INFO] [stdout] 7 |     File, Range, Color, Date, Hidden,
[INFO] [stdout]   |     ^^^^  ^^^^^  ^^^^^  ^^^^  ^^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `FormElementType` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `value`, `label`, and `selected` are never read
[INFO] [stdout]   --> src/engine/forms.rs:11:9
[INFO] [stdout]    |
[INFO] [stdout] 10 | pub struct SelectOption {
[INFO] [stdout]    |            ------------ fields in this struct
[INFO] [stdout] 11 |     pub value: String,
[INFO] [stdout]    |         ^^^^^
[INFO] [stdout] 12 |     pub label: String,
[INFO] [stdout]    |         ^^^^^
[INFO] [stdout] 13 |     pub selected: bool,
[INFO] [stdout]    |         ^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `SelectOption` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple fields are never read
[INFO] [stdout]   --> src/engine/forms.rs:17:9
[INFO] [stdout]    |
[INFO] [stdout] 16 | pub struct FormElement {
[INFO] [stdout]    |            ----------- fields in this struct
[INFO] [stdout] 17 |     pub id: String,
[INFO] [stdout]    |         ^^
[INFO] [stdout] 18 |     pub element_type: FormElementType,
[INFO] [stdout]    |         ^^^^^^^^^^^^
[INFO] [stdout] 19 |     pub name: String,
[INFO] [stdout]    |         ^^^^
[INFO] [stdout] 20 |     pub value: String,
[INFO] [stdout]    |         ^^^^^
[INFO] [stdout] 21 |     pub placeholder: String,
[INFO] [stdout]    |         ^^^^^^^^^^^
[INFO] [stdout] 22 |     pub checked: bool,
[INFO] [stdout]    |         ^^^^^^^
[INFO] [stdout] 23 |     pub disabled: bool,
[INFO] [stdout]    |         ^^^^^^^^
[INFO] [stdout] 24 |     pub readonly: bool,
[INFO] [stdout]    |         ^^^^^^^^
[INFO] [stdout] 25 |     pub min: f32,
[INFO] [stdout]    |         ^^^
[INFO] [stdout] 26 |     pub max: f32,
[INFO] [stdout]    |         ^^^
[INFO] [stdout] 27 |     pub step: f32,
[INFO] [stdout]    |         ^^^^
[INFO] [stdout] 28 |     pub options: Vec<SelectOption>,
[INFO] [stdout]    |         ^^^^^^^
[INFO] [stdout] 29 |     pub selected_index: usize,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^
[INFO] [stdout] 30 |     pub focus: bool,
[INFO] [stdout]    |         ^^^^^
[INFO] [stdout] 31 |     pub cursor_pos: usize,
[INFO] [stdout]    |         ^^^^^^^^^^
[INFO] [stdout] 32 |     pub selection_start: usize,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^
[INFO] [stdout] 33 |     pub selection_end: usize,
[INFO] [stdout]    |         ^^^^^^^^^^^^^
[INFO] [stdout] 34 |     pub form_id: String,
[INFO] [stdout]    |         ^^^^^^^
[INFO] [stdout] 35 |     pub scroll_offset: f32,
[INFO] [stdout]    |         ^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `FormElement` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `new` is never used
[INFO] [stdout]   --> src/engine/forms.rs:38:12
[INFO] [stdout]    |
[INFO] [stdout] 37 | impl FormElement {
[INFO] [stdout]    | ---------------- associated function in this implementation
[INFO] [stdout] 38 |     pub fn new(id: &str, element_type: FormElementType) -> Self {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ValidationResult` is never constructed
[INFO] [stdout]   --> src/engine/forms.rs:49:12
[INFO] [stdout]    |
[INFO] [stdout] 49 | pub struct ValidationResult {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `elements`, `active_form_id`, and `focused_element_id` are never read
[INFO] [stdout]   --> src/engine/forms.rs:54:9
[INFO] [stdout]    |
[INFO] [stdout] 53 | pub struct FormState {
[INFO] [stdout]    |            --------- fields in this struct
[INFO] [stdout] 54 |     pub elements: HashMap<String, FormElement>,
[INFO] [stdout]    |         ^^^^^^^^
[INFO] [stdout] 55 |     pub active_form_id: Option<String>,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^
[INFO] [stdout] 56 |     pub focused_element_id: Option<String>,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple methods are never used
[INFO] [stdout]    --> src/engine/forms.rs:62:12
[INFO] [stdout]     |
[INFO] [stdout]  58 | impl FormState {
[INFO] [stdout]     | -------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout]  62 |     pub fn add_element(&mut self, elem: FormElement) {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  65 |     pub fn handle_key_input(&mut self, element_id: &str, key: &str, shift: bool, ctrl: bool) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 199 |     pub fn handle_click(&mut self, element_id: &str, _x: f32, _y: f32) {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 213 |     pub fn handle_mouse_down(&mut self, element_id: &str, x: f32, _y: f32) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 222 |     pub fn handle_mouse_up(&mut self, _element_id: &str, _x: f32, _y: f32) {}
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] 223 |     pub fn submit_form(&self, form_id: &str) -> HashMap<String, String> {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 247 |     pub fn validate_element(&self, id: &str) -> ValidationResult {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_text_input` is never used
[INFO] [stdout]    --> src/engine/forms.rs:283:8
[INFO] [stdout]     |
[INFO] [stdout] 283 | pub fn render_text_input(elem: &FormElement, x: f32, y: f32, w: f32, h: f32) -> Vec<PaintCommand> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_button` is never used
[INFO] [stdout]    --> src/engine/forms.rs:317:8
[INFO] [stdout]     |
[INFO] [stdout] 317 | pub fn render_button(elem: &FormElement, x: f32, y: f32, w: f32, h: f32) -> Vec<PaintCommand> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_checkbox` is never used
[INFO] [stdout]    --> src/engine/forms.rs:341:8
[INFO] [stdout]     |
[INFO] [stdout] 341 | pub fn render_checkbox(elem: &FormElement, x: f32, y: f32, size: f32) -> Vec<PaintCommand> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_radio` is never used
[INFO] [stdout]    --> src/engine/forms.rs:362:8
[INFO] [stdout]     |
[INFO] [stdout] 362 | pub fn render_radio(elem: &FormElement, x: f32, y: f32, size: f32) -> Vec<PaintCommand> {
[INFO] [stdout]     |        ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_select` is never used
[INFO] [stdout]    --> src/engine/forms.rs:380:8
[INFO] [stdout]     |
[INFO] [stdout] 380 | pub fn render_select(elem: &FormElement, x: f32, y: f32, w: f32, h: f32) -> Vec<PaintCommand> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_textarea` is never used
[INFO] [stdout]    --> src/engine/forms.rs:402:8
[INFO] [stdout]     |
[INFO] [stdout] 402 | pub fn render_textarea(elem: &FormElement, x: f32, y: f32, w: f32, h: f32) -> Vec<PaintCommand> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_range` is never used
[INFO] [stdout]    --> src/engine/forms.rs:448:8
[INFO] [stdout]     |
[INFO] [stdout] 448 | pub fn render_range(elem: &FormElement, x: f32, y: f32, w: f32, h: f32) -> Vec<PaintCommand> {
[INFO] [stdout]     |        ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_progress` is never used
[INFO] [stdout]    --> src/engine/forms.rs:465:8
[INFO] [stdout]     |
[INFO] [stdout] 465 | pub fn render_progress(value: f32, max: f32, x: f32, y: f32, w: f32, h: f32) -> Vec<PaintCommand> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variants `None`, `Capture`, `AtTarget`, and `Bubble` are never constructed
[INFO] [stdout]  --> src/engine/events.rs:4:23
[INFO] [stdout]   |
[INFO] [stdout] 4 | pub enum EventPhase { None, Capture, AtTarget, Bubble }
[INFO] [stdout]   |          ----------   ^^^^  ^^^^^^^  ^^^^^^^^  ^^^^^^
[INFO] [stdout]   |          |
[INFO] [stdout]   |          variants in this enum
[INFO] [stdout]   |
[INFO] [stdout]   = note: `EventPhase` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple variants are never constructed
[INFO] [stdout]   --> src/engine/events.rs:7:5
[INFO] [stdout]    |
[INFO] [stdout]  6 | pub enum EventType {
[INFO] [stdout]    |          --------- variants in this enum
[INFO] [stdout]  7 |     Click, DblClick, MouseDown, MouseUp, MouseMove, MouseEnter, MouseLeave,
[INFO] [stdout]    |     ^^^^^  ^^^^^^^^  ^^^^^^^^^  ^^^^^^^  ^^^^^^^^^  ^^^^^^^^^^  ^^^^^^^^^^
[INFO] [stdout]  8 |     MouseOver, MouseOut, KeyDown, KeyUp, KeyPress, Focus, Blur, FocusIn, FocusOut,
[INFO] [stdout]    |     ^^^^^^^^^  ^^^^^^^^  ^^^^^^^  ^^^^^  ^^^^^^^^  ^^^^^  ^^^^  ^^^^^^^  ^^^^^^^^
[INFO] [stdout]  9 |     Input, Change, Submit, Reset, Scroll, Resize, Load, Unload, Error,
[INFO] [stdout]    |     ^^^^^  ^^^^^^  ^^^^^^  ^^^^^  ^^^^^^  ^^^^^^  ^^^^  ^^^^^^  ^^^^^
[INFO] [stdout] 10 |     DOMContentLoaded, Wheel, ContextMenu, TouchStart, TouchEnd, TouchMove,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^  ^^^^^  ^^^^^^^^^^^  ^^^^^^^^^^  ^^^^^^^^  ^^^^^^^^^
[INFO] [stdout] 11 |     DragStart, Drag, DragEnd, Drop, Paste, Copy, Cut,
[INFO] [stdout]    |     ^^^^^^^^^  ^^^^  ^^^^^^^  ^^^^  ^^^^^  ^^^^  ^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `EventType` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `bubbles` and `cancelable` are never used
[INFO] [stdout]   --> src/engine/events.rs:14:12
[INFO] [stdout]    |
[INFO] [stdout] 13 | impl EventType {
[INFO] [stdout]    | -------------- methods in this implementation
[INFO] [stdout] 14 |     pub fn bubbles(&self) -> bool {
[INFO] [stdout]    |            ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 19 |     pub fn cancelable(&self) -> bool {
[INFO] [stdout]    |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `DomEvent` is never constructed
[INFO] [stdout]   --> src/engine/events.rs:28:12
[INFO] [stdout]    |
[INFO] [stdout] 28 | pub struct DomEvent {
[INFO] [stdout]    |            ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new`, `mouse`, `keyboard`, `prevent_default`, `stop_propagation`, and `stop_immediate_propagation` are never used
[INFO] [stdout]   --> src/engine/events.rs:53:12
[INFO] [stdout]    |
[INFO] [stdout] 52 | impl DomEvent {
[INFO] [stdout]    | ------------- associated items in this implementation
[INFO] [stdout] 53 |     pub fn new(event_type: EventType, target: usize) -> Self {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 64 |     pub fn mouse(event_type: EventType, target: usize, x: f32, y: f32, button: u8) -> Self {
[INFO] [stdout]    |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 69 |     pub fn keyboard(event_type: EventType, target: usize, key: &str, code: u32, shift: bool, ctrl: bool, alt: bool, meta: bool) -> S...
[INFO] [stdout]    |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 75 |     pub fn prevent_default(&mut self) { if self.cancelable { self.default_prevented = true; } }
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^
[INFO] [stdout] 76 |     pub fn stop_propagation(&mut self) { self.propagation_stopped = true; }
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] 77 |     pub fn stop_immediate_propagation(&mut self) {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `callback_id`, `phase`, and `once` are never read
[INFO] [stdout]   --> src/engine/events.rs:84:9
[INFO] [stdout]    |
[INFO] [stdout] 83 | pub struct EventHandler {
[INFO] [stdout]    |            ------------ fields in this struct
[INFO] [stdout] 84 |     pub callback_id: u32,
[INFO] [stdout]    |         ^^^^^^^^^^^
[INFO] [stdout] 85 |     pub phase: EventPhase,
[INFO] [stdout]    |         ^^^^^
[INFO] [stdout] 86 |     pub once: bool,
[INFO] [stdout]    |         ^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `EventHandler` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `handlers`, `node_ancestors`, and `next_callback_id` are never read
[INFO] [stdout]   --> src/engine/events.rs:89:5
[INFO] [stdout]    |
[INFO] [stdout] 88 | pub struct EventDispatcher {
[INFO] [stdout]    |            --------------- fields in this struct
[INFO] [stdout] 89 |     handlers: HashMap<(usize, EventType), Vec<EventHandler>>,
[INFO] [stdout]    |     ^^^^^^^^
[INFO] [stdout] 90 |     node_ancestors: HashMap<usize, Vec<usize>>,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^
[INFO] [stdout] 91 |     next_callback_id: u32,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple methods are never used
[INFO] [stdout]    --> src/engine/events.rs:97:12
[INFO] [stdout]     |
[INFO] [stdout]  93 | impl EventDispatcher {
[INFO] [stdout]     | -------------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout]  97 |     pub fn add_listener(&mut self, node_id: usize, event_type: EventType, use_capture: bool, once: bool) -> u32 {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 105 |     pub fn remove_listener(&mut self, node_id: usize, event_type: EventType, callback_id: u32) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 110 |     pub fn dispatch(&mut self, event: &mut DomEvent) -> Vec<u32> {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 141 |     fn fire_handlers(&self, node_id: usize, event: &mut DomEvent, phase: EventPhase, fired: &mut Vec<u32>, once_removals: &mut Vec<...
[INFO] [stdout]     |        ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 152 |     fn build_path(&self, target: usize) -> Vec<usize> {
[INFO] [stdout]     |        ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 161 |     pub fn set_ancestors(&mut self, node_id: usize, ancestors: Vec<usize>) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 164 |     pub fn clear_node(&mut self, node_id: usize) {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `current_focus` and `tab_order` are never read
[INFO] [stdout]    --> src/engine/events.rs:172:9
[INFO] [stdout]     |
[INFO] [stdout] 171 | pub struct FocusManager {
[INFO] [stdout]     |            ------------ fields in this struct
[INFO] [stdout] 172 |     pub current_focus: Option<usize>,
[INFO] [stdout]     |         ^^^^^^^^^^^^^
[INFO] [stdout] 173 |     pub tab_order: Vec<usize>,
[INFO] [stdout]     |         ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `focus`, `blur`, `tab_next`, `tab_prev`, and `set_tab_order` are never used
[INFO] [stdout]    --> src/engine/events.rs:177:12
[INFO] [stdout]     |
[INFO] [stdout] 175 | impl FocusManager {
[INFO] [stdout]     | ----------------- methods in this implementation
[INFO] [stdout] 176 |     pub fn new() -> Self { Self { current_focus: None, tab_order: Vec::new() } }
[INFO] [stdout] 177 |     pub fn focus(&mut self, node_id: usize, dispatcher: &mut EventDispatcher) -> Vec<DomEvent> {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 197 |     pub fn blur(&mut self, dispatcher: &mut EventDispatcher) -> Vec<DomEvent> {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 209 |     pub fn tab_next(&mut self, dispatcher: &mut EventDispatcher) -> Vec<DomEvent> {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 215 |     pub fn tab_prev(&mut self, dispatcher: &mut EventDispatcher) -> Vec<DomEvent> {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 221 |     pub fn set_tab_order(&mut self, ids: Vec<usize>) { self.tab_order = ids; }
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `HitTester` is never constructed
[INFO] [stdout]    --> src/engine/events.rs:223:12
[INFO] [stdout]     |
[INFO] [stdout] 223 | pub struct HitTester;
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `hit_test` is never used
[INFO] [stdout]    --> src/engine/events.rs:225:12
[INFO] [stdout]     |
[INFO] [stdout] 224 | impl HitTester {
[INFO] [stdout]     | -------------- associated function in this implementation
[INFO] [stdout] 225 |     pub fn hit_test(x: f32, y: f32, layout_rects: &HashMap<usize, LayoutRect>) -> Option<usize> {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variants `Center` and `Right` are never constructed
[INFO] [stdout]  --> src/engine/canvas.rs:3:28
[INFO] [stdout]   |
[INFO] [stdout] 3 | pub enum TextAlign { Left, Center, Right }
[INFO] [stdout]   |          ---------         ^^^^^^  ^^^^^
[INFO] [stdout]   |          |
[INFO] [stdout]   |          variants in this enum
[INFO] [stdout]   |
[INFO] [stdout]   = note: `TextAlign` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variants `Top`, `Middle`, and `Bottom` are never constructed
[INFO] [stdout]  --> src/engine/canvas.rs:5:25
[INFO] [stdout]   |
[INFO] [stdout] 5 | pub enum TextBaseline { Top, Middle, Alphabetic, Bottom }
[INFO] [stdout]   |          ------------   ^^^  ^^^^^^              ^^^^^^
[INFO] [stdout]   |          |
[INFO] [stdout]   |          variants in this enum
[INFO] [stdout]   |
[INFO] [stdout]   = note: `TextBaseline` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple fields are never read
[INFO] [stdout]   --> src/engine/canvas.rs:8:9
[INFO] [stdout]    |
[INFO] [stdout]  7 | pub struct CanvasState {
[INFO] [stdout]    |            ----------- fields in this struct
[INFO] [stdout]  8 |     pub fill_color: [u8; 4],
[INFO] [stdout]    |         ^^^^^^^^^^
[INFO] [stdout]  9 |     pub stroke_color: [u8; 4],
[INFO] [stdout]    |         ^^^^^^^^^^^^
[INFO] [stdout] 10 |     pub line_width: f32,
[INFO] [stdout]    |         ^^^^^^^^^^
[INFO] [stdout] 11 |     pub global_alpha: f32,
[INFO] [stdout]    |         ^^^^^^^^^^^^
[INFO] [stdout] 12 |     pub transform: [f32; 6],
[INFO] [stdout]    |         ^^^^^^^^^
[INFO] [stdout] 13 |     pub clip_rect: Option<(f32, f32, f32, f32)>,
[INFO] [stdout]    |         ^^^^^^^^^
[INFO] [stdout] 14 |     pub font_size: f32,
[INFO] [stdout]    |         ^^^^^^^^^
[INFO] [stdout] 15 |     pub text_align: TextAlign,
[INFO] [stdout]    |         ^^^^^^^^^^
[INFO] [stdout] 16 |     pub text_baseline: TextBaseline,
[INFO] [stdout]    |         ^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `CanvasState` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variants `MoveTo`, `LineTo`, `Arc`, `QuadraticCurveTo`, `BezierCurveTo`, and `ClosePath` are never constructed
[INFO] [stdout]   --> src/engine/canvas.rs:35:5
[INFO] [stdout]    |
[INFO] [stdout] 34 | pub enum PathCommand {
[INFO] [stdout]    |          ----------- variants in this enum
[INFO] [stdout] 35 |     MoveTo(f32, f32),
[INFO] [stdout]    |     ^^^^^^
[INFO] [stdout] 36 |     LineTo(f32, f32),
[INFO] [stdout]    |     ^^^^^^
[INFO] [stdout] 37 |     Arc(f32, f32, f32, f32, f32, bool),
[INFO] [stdout]    |     ^^^
[INFO] [stdout] 38 |     QuadraticCurveTo(f32, f32, f32, f32),
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^
[INFO] [stdout] 39 |     BezierCurveTo(f32, f32, f32, f32, f32, f32),
[INFO] [stdout]    |     ^^^^^^^^^^^^^
[INFO] [stdout] 40 |     ClosePath,
[INFO] [stdout]    |     ^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `PathCommand` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `commands` is never read
[INFO] [stdout]   --> src/engine/canvas.rs:44:9
[INFO] [stdout]    |
[INFO] [stdout] 43 | pub struct Path {
[INFO] [stdout]    |            ---- field in this struct
[INFO] [stdout] 44 |     pub commands: Vec<PathCommand>,
[INFO] [stdout]    |         ^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `Path` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new` and `flatten` are never used
[INFO] [stdout]   --> src/engine/canvas.rs:47:12
[INFO] [stdout]    |
[INFO] [stdout] 46 | impl Path {
[INFO] [stdout]    | --------- associated items in this implementation
[INFO] [stdout] 47 |     pub fn new() -> Self { Self { commands: Vec::new() } }
[INFO] [stdout]    |            ^^^
[INFO] [stdout] 48 |     pub fn flatten(&self, tolerance: f32) -> Vec<(f32, f32)> {
[INFO] [stdout]    |            ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `width`, `height`, `pixels`, `state`, `state_stack`, and `current_path` are never read
[INFO] [stdout]    --> src/engine/canvas.rs:113:9
[INFO] [stdout]     |
[INFO] [stdout] 112 | pub struct Canvas2D {
[INFO] [stdout]     |            -------- fields in this struct
[INFO] [stdout] 113 |     pub width: u32,
[INFO] [stdout]     |         ^^^^^
[INFO] [stdout] 114 |     pub height: u32,
[INFO] [stdout]     |         ^^^^^^
[INFO] [stdout] 115 |     pub pixels: Vec<u8>,
[INFO] [stdout]     |         ^^^^^^
[INFO] [stdout] 116 |     state: CanvasState,
[INFO] [stdout]     |     ^^^^^
[INFO] [stdout] 117 |     state_stack: Vec<CanvasState>,
[INFO] [stdout]     |     ^^^^^^^^^^^
[INFO] [stdout] 118 |     current_path: Path,
[INFO] [stdout]     |     ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/engine/canvas.rs:121:12
[INFO] [stdout]     |
[INFO] [stdout] 120 | impl Canvas2D {
[INFO] [stdout]     | ------------- associated items in this implementation
[INFO] [stdout] 121 |     pub fn new(w: u32, h: u32) -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 125 |     pub fn save(&mut self) { self.state_stack.push(self.state.clone()); }
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] 126 |     pub fn restore(&mut self) { if let Some(s) = self.state_stack.pop() { self.state = s; } }
[INFO] [stdout]     |            ^^^^^^^
[INFO] [stdout] 127 |     pub fn fill_rect(&mut self, x: f32, y: f32, w: f32, h: f32) {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 137 |     pub fn stroke_rect(&mut self, x: f32, y: f32, w: f32, h: f32) {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 145 |     pub fn clear_rect(&mut self, x: f32, y: f32, w: f32, h: f32) {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 155 |     pub fn begin_path(&mut self) { self.current_path = Path::new(); }
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] 156 |     pub fn move_to(&mut self, x: f32, y: f32) { self.current_path.commands.push(PathCommand::MoveTo(x, y)); }
[INFO] [stdout]     |            ^^^^^^^
[INFO] [stdout] 157 |     pub fn line_to(&mut self, x: f32, y: f32) { self.current_path.commands.push(PathCommand::LineTo(x, y)); }
[INFO] [stdout]     |            ^^^^^^^
[INFO] [stdout] 158 |     pub fn arc(&mut self, cx: f32, cy: f32, r: f32, start_angle: f32, end_angle: f32, ccw: bool) {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 161 |     pub fn quadratic_curve_to(&mut self, cpx: f32, cpy: f32, x: f32, y: f32) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 164 |     pub fn bezier_curve_to(&mut self, cp1x: f32, cp1y: f32, cp2x: f32, cp2y: f32, x: f32, y: f32) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 167 |     pub fn close_path(&mut self) { self.current_path.commands.push(PathCommand::ClosePath); }
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] 168 |     pub fn fill(&mut self) {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 197 |     pub fn stroke(&mut self) {
[INFO] [stdout]     |            ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 208 |     pub fn fill_text(&mut self, text: &str, x: f32, y: f32) {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 236 |     pub fn draw_image(&mut self, src_pixels: &[u8], src_w: u32, src_h: u32, dx: f32, dy: f32, dw: f32, dh: f32) {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 264 |     pub fn translate(&mut self, tx: f32, ty: f32) {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 268 |     pub fn rotate(&mut self, angle: f32) {
[INFO] [stdout]     |            ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 278 |     pub fn scale(&mut self, sx: f32, sy: f32) {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 282 |     pub fn set_transform(&mut self, a: f32, b: f32, c: f32, d: f32, e: f32, f: f32) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 285 |     pub fn set_fill_style(&mut self, color: [u8; 4]) { self.state.fill_color = color; }
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] 286 |     pub fn set_stroke_style(&mut self, color: [u8; 4]) { self.state.stroke_color = color; }
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] 287 |     pub fn set_line_width(&mut self, w: f32) { self.state.line_width = w.max(0.0); }
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] 288 |     pub fn set_global_alpha(&mut self, a: f32) { self.state.global_alpha = a.clamp(0.0, 1.0); }
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] 289 |     pub fn set_font_size(&mut self, size: f32) { self.state.font_size = size.max(1.0); }
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] 290 |     pub fn set_text_align(&mut self, align: TextAlign) { self.state.text_align = align; }
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] 291 |     pub fn set_text_baseline(&mut self, baseline: TextBaseline) { self.state.text_baseline = baseline; }
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 292 |     pub fn set_clip_rect(&mut self, x: f32, y: f32, w: f32, h: f32) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 295 |     pub fn get_image_data(&self, x: u32, y: u32, w: u32, h: u32) -> Vec<u8> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 307 |     pub fn put_image_data(&mut self, data: &[u8], x: u32, y: u32) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 325 |     pub fn to_png_bytes(&self) -> Vec<u8> {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 332 |     fn set_pixel(&mut self, x: i32, y: i32, color: &[u8; 4]) {
[INFO] [stdout]     |        ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 351 |     fn set_pixel_direct(&mut self, x: i32, y: i32, color: &[u8; 4]) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 356 |     fn apply_alpha(&self, mut color: [u8; 4]) -> [u8; 4] {
[INFO] [stdout]     |        ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 360 |     fn transform_point(&self, x: f32, y: f32) -> (f32, f32) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 364 |     fn draw_line_internal(&mut self, x0: f32, y0: f32, x1: f32, y1: f32, color: &[u8; 4], width: f32) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 369 |     fn draw_line_raw(&mut self, x0: f32, y0: f32, x1: f32, y1: f32, color: &[u8; 4], width: f32) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `SvgElement` is never used
[INFO] [stdout]  --> src/engine/svg.rs:4:10
[INFO] [stdout]   |
[INFO] [stdout] 4 | pub enum SvgElement {
[INFO] [stdout]   |          ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `SvgNode` is never constructed
[INFO] [stdout]  --> src/engine/svg.rs:9:12
[INFO] [stdout]   |
[INFO] [stdout] 9 | pub struct SvgNode {
[INFO] [stdout]   |            ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new`, `attr_f32`, and `attr_str` are never used
[INFO] [stdout]   --> src/engine/svg.rs:17:12
[INFO] [stdout]    |
[INFO] [stdout] 16 | impl SvgNode {
[INFO] [stdout]    | ------------ associated items in this implementation
[INFO] [stdout] 17 |     pub fn new(element: SvgElement) -> Self {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 20 |     fn attr_f32(&self, name: &str, default: f32) -> f32 {
[INFO] [stdout]    |        ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 23 |     fn attr_str(&self, name: &str) -> &str {
[INFO] [stdout]    |        ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `SvgDocument` is never constructed
[INFO] [stdout]   --> src/engine/svg.rs:28:12
[INFO] [stdout]    |
[INFO] [stdout] 28 | pub struct SvgDocument {
[INFO] [stdout]    |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `PathSegment` is never used
[INFO] [stdout]   --> src/engine/svg.rs:36:10
[INFO] [stdout]    |
[INFO] [stdout] 36 | pub enum PathSegment {
[INFO] [stdout]    |          ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `tag_to_element` is never used
[INFO] [stdout]   --> src/engine/svg.rs:48:4
[INFO] [stdout]    |
[INFO] [stdout] 48 | fn tag_to_element(tag: &str) -> Option<SvgElement> {
[INFO] [stdout]    |    ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `XmlToken` is never constructed
[INFO] [stdout]   --> src/engine/svg.rs:69:8
[INFO] [stdout]    |
[INFO] [stdout] 69 | struct XmlToken {
[INFO] [stdout]    |        ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `tokenize_xml` is never used
[INFO] [stdout]   --> src/engine/svg.rs:76:4
[INFO] [stdout]    |
[INFO] [stdout] 76 | fn tokenize_xml(xml: &str) -> Vec<XmlToken> {
[INFO] [stdout]    |    ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `parse_svg` is never used
[INFO] [stdout]    --> src/engine/svg.rs:147:8
[INFO] [stdout]     |
[INFO] [stdout] 147 | pub fn parse_svg(xml: &str) -> Result<SvgDocument, String> {
[INFO] [stdout]     |        ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `parse_dimension` is never used
[INFO] [stdout]    --> src/engine/svg.rs:199:4
[INFO] [stdout]     |
[INFO] [stdout] 199 | fn parse_dimension(s: &str) -> f32 {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `collect_defs` is never used
[INFO] [stdout]    --> src/engine/svg.rs:203:4
[INFO] [stdout]     |
[INFO] [stdout] 203 | fn collect_defs(node: &SvgNode, defs: &mut HashMap<String, SvgNode>) {
[INFO] [stdout]     |    ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_to_commands` is never used
[INFO] [stdout]    --> src/engine/svg.rs:207:8
[INFO] [stdout]     |
[INFO] [stdout] 207 | pub fn render_to_commands(doc: &SvgDocument) -> Vec<PaintCommand> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `RenderCtx` is never constructed
[INFO] [stdout]    --> src/engine/svg.rs:215:8
[INFO] [stdout]     |
[INFO] [stdout] 215 | struct RenderCtx<'a> {
[INFO] [stdout]     |        ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `tx`, `ty`, `tw`, and `th` are never used
[INFO] [stdout]    --> src/engine/svg.rs:223:8
[INFO] [stdout]     |
[INFO] [stdout] 222 | impl<'a> RenderCtx<'a> {
[INFO] [stdout]     | ---------------------- methods in this implementation
[INFO] [stdout] 223 |     fn tx(&self, x: f32) -> f32 { x * self.scale_x + self.offset_x }
[INFO] [stdout]     |        ^^
[INFO] [stdout] 224 |     fn ty(&self, y: f32) -> f32 { y * self.scale_y + self.offset_y }
[INFO] [stdout]     |        ^^
[INFO] [stdout] 225 |     fn tw(&self, w: f32) -> f32 { w * self.scale_x }
[INFO] [stdout]     |        ^^
[INFO] [stdout] 226 |     fn th(&self, h: f32) -> f32 { h * self.scale_y }
[INFO] [stdout]     |        ^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_node` is never used
[INFO] [stdout]    --> src/engine/svg.rs:228:4
[INFO] [stdout]     |
[INFO] [stdout] 228 | fn render_node(node: &SvgNode, ctx: &RenderCtx, commands: &mut Vec<PaintCommand>) {
[INFO] [stdout]     |    ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_ellipse_fill` is never used
[INFO] [stdout]    --> src/engine/svg.rs:354:4
[INFO] [stdout]     |
[INFO] [stdout] 354 | fn render_ellipse_fill(cx: f32, cy: f32, rx: f32, ry: f32, color: [u8; 4], commands: &mut Vec<PaintCommand>) {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_line` is never used
[INFO] [stdout]    --> src/engine/svg.rs:372:4
[INFO] [stdout]     |
[INFO] [stdout] 372 | fn render_line(x0: f32, y0: f32, x1: f32, y1: f32, width: f32, color: [u8; 4], commands: &mut Vec<PaintCommand>) {
[INFO] [stdout]     |    ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `parse_point_list` is never used
[INFO] [stdout]    --> src/engine/svg.rs:407:4
[INFO] [stdout]     |
[INFO] [stdout] 407 | fn parse_point_list(s: &str) -> Vec<(f32, f32)> {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_polygon_fill` is never used
[INFO] [stdout]    --> src/engine/svg.rs:412:4
[INFO] [stdout]     |
[INFO] [stdout] 412 | fn render_polygon_fill(pts: &[(f32, f32)], ctx: &RenderCtx, color: [u8; 4], commands: &mut Vec<PaintCommand>) {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `parse_path_data` is never used
[INFO] [stdout]    --> src/engine/svg.rs:444:8
[INFO] [stdout]     |
[INFO] [stdout] 444 | pub fn parse_path_data(d: &str) -> Vec<PathSegment> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_path_segments` is never used
[INFO] [stdout]    --> src/engine/svg.rs:518:4
[INFO] [stdout]     |
[INFO] [stdout] 518 | fn render_path_segments(segments: &[PathSegment], ctx: &RenderCtx, fill: Option<[u8; 4]>, stroke: Option<[u8; 4]>, stroke_width: f3...
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `parse_svg_color` is never used
[INFO] [stdout]    --> src/engine/svg.rs:633:8
[INFO] [stdout]     |
[INFO] [stdout] 633 | pub fn parse_svg_color(s: &str) -> [u8; 4] {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `parse_svg_transform` is never used
[INFO] [stdout]    --> src/engine/svg.rs:698:8
[INFO] [stdout]     |
[INFO] [stdout] 698 | pub fn parse_svg_transform(s: &str) -> [f32; 6] {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `multiply_matrices` is never used
[INFO] [stdout]    --> src/engine/svg.rs:748:4
[INFO] [stdout]     |
[INFO] [stdout] 748 | fn multiply_matrices(a: [f32; 6], b: [f32; 6]) -> [f32; 6] {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `device_pixel_ratio` is never read
[INFO] [stdout]  --> src/engine/viewport.rs:9:9
[INFO] [stdout]   |
[INFO] [stdout] 2 | pub struct Viewport {
[INFO] [stdout]   |            -------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 9 |     pub device_pixel_ratio: f32,
[INFO] [stdout]   |         ^^^^^^^^^^^^^^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `Viewport` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variants `Letter`, `Legal`, and `Custom` are never constructed
[INFO] [stdout]  --> src/engine/print.rs:6:5
[INFO] [stdout]   |
[INFO] [stdout] 4 | pub enum PageSize {
[INFO] [stdout]   |          -------- variants in this enum
[INFO] [stdout] 5 |     A4,
[INFO] [stdout] 6 |     Letter,
[INFO] [stdout]   |     ^^^^^^
[INFO] [stdout] 7 |     Legal,
[INFO] [stdout]   |     ^^^^^
[INFO] [stdout] 8 |     Custom(f32, f32),
[INFO] [stdout]   |     ^^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `PageSize` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variant `Landscape` is never constructed
[INFO] [stdout]   --> src/engine/print.rs:21:34
[INFO] [stdout]    |
[INFO] [stdout] 21 | pub enum Orientation { Portrait, Landscape }
[INFO] [stdout]    |          -----------             ^^^^^^^^^
[INFO] [stdout]    |          |
[INFO] [stdout]    |          variant in this enum
[INFO] [stdout]    |
[INFO] [stdout]    = note: `Orientation` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `title` and `url` are never read
[INFO] [stdout]   --> src/engine/print.rs:34:9
[INFO] [stdout]    |
[INFO] [stdout] 33 | pub struct PrintJob {
[INFO] [stdout]    |            -------- fields in this struct
[INFO] [stdout] 34 |     pub title: String,
[INFO] [stdout]    |         ^^^^^
[INFO] [stdout] 35 |     pub url: String,
[INFO] [stdout]    |         ^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `PrintJob` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_page_to_image` is never used
[INFO] [stdout]   --> src/engine/print.rs:54:8
[INFO] [stdout]    |
[INFO] [stdout] 54 | pub fn render_page_to_image(html: &str, css: &[&str], width: f32, height: f32) -> Vec<u8> {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variant `Dialog` is never constructed
[INFO] [stdout]  --> src/engine/window_mgmt.rs:9:5
[INFO] [stdout]   |
[INFO] [stdout] 6 | pub enum WindowType {
[INFO] [stdout]   |          ---------- variant in this enum
[INFO] [stdout] ...
[INFO] [stdout] 9 |     Dialog,
[INFO] [stdout]   |     ^^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `WindowType` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `resizable` is never read
[INFO] [stdout]   --> src/engine/window_mgmt.rs:26:9
[INFO] [stdout]    |
[INFO] [stdout] 21 | pub struct WindowRequest {
[INFO] [stdout]    |            ------------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 26 |     pub resizable: bool,
[INFO] [stdout]    |         ^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `WindowRequest` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `0` is never read
[INFO] [stdout]   --> src/engine/window_mgmt.rs:49:11
[INFO] [stdout]    |
[INFO] [stdout] 49 |     Alert(String),
[INFO] [stdout]    |     ----- ^^^^^^
[INFO] [stdout]    |     |
[INFO] [stdout]    |     field in this variant
[INFO] [stdout]    |
[INFO] [stdout]    = note: `DialogType` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] help: consider changing the field to be of unit type to suppress this warning while preserving the field numbering, or remove the field
[INFO] [stdout]    |
[INFO] [stdout] 49 -     Alert(String),
[INFO] [stdout] 49 +     Alert(()),
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `0` is never read
[INFO] [stdout]   --> src/engine/window_mgmt.rs:51:13
[INFO] [stdout]    |
[INFO] [stdout] 51 |     Confirm(String),
[INFO] [stdout]    |     ------- ^^^^^^
[INFO] [stdout]    |     |
[INFO] [stdout]    |     field in this variant
[INFO] [stdout]    |
[INFO] [stdout]    = note: `DialogType` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] help: consider changing the field to be of unit type to suppress this warning while preserving the field numbering, or remove the field
[INFO] [stdout]    |
[INFO] [stdout] 51 -     Confirm(String),
[INFO] [stdout] 51 +     Confirm(()),
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `0` and `1` are never read
[INFO] [stdout]   --> src/engine/window_mgmt.rs:53:12
[INFO] [stdout]    |
[INFO] [stdout] 53 |     Prompt(String, String),
[INFO] [stdout]    |     ------ ^^^^^^  ^^^^^^
[INFO] [stdout]    |     |
[INFO] [stdout]    |     fields in this variant
[INFO] [stdout]    |
[INFO] [stdout]    = note: `DialogType` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] help: consider changing the fields to be of unit type to suppress this warning while preserving the field numbering, or remove the fields
[INFO] [stdout]    |
[INFO] [stdout] 53 -     Prompt(String, String),
[INFO] [stdout] 53 +     Prompt((), ()),
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variant `BeforeUnload` is never constructed
[INFO] [stdout]   --> src/engine/window_mgmt.rs:55:5
[INFO] [stdout]    |
[INFO] [stdout] 47 | pub enum DialogType {
[INFO] [stdout]    |          ---------- variant in this enum
[INFO] [stdout] ...
[INFO] [stdout] 55 |     BeforeUnload(String),
[INFO] [stdout]    |     ^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `DialogType` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `id`, `title`, `opener_id`, and `created_at` are never read
[INFO] [stdout]   --> src/engine/window_mgmt.rs:69:9
[INFO] [stdout]    |
[INFO] [stdout] 68 | pub struct WindowInfo {
[INFO] [stdout]    |            ---------- fields in this struct
[INFO] [stdout] 69 |     pub id: u32,
[INFO] [stdout]    |         ^^
[INFO] [stdout] 70 |     pub url: String,
[INFO] [stdout] 71 |     pub title: String,
[INFO] [stdout]    |         ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 76 |     pub opener_id: Option<u32>,
[INFO] [stdout]    |         ^^^^^^^^^
[INFO] [stdout] 77 |     pub created_at: Instant,
[INFO] [stdout]    |         ^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `WindowInfo` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variant `None` is never constructed
[INFO] [stdout]    --> src/engine/drm_fallback.rs:158:5
[INFO] [stdout]     |
[INFO] [stdout] 152 | pub enum FallbackMethod {
[INFO] [stdout]     |          -------------- variant in this enum
[INFO] [stdout] ...
[INFO] [stdout] 158 |     None,
[INFO] [stdout]     |     ^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `FallbackMethod` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `remove_override` is never used
[INFO] [stdout]    --> src/engine/drm_fallback.rs:251:12
[INFO] [stdout]     |
[INFO] [stdout] 187 | impl DrmFallbackManager {
[INFO] [stdout]     | ----------------------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 251 |     pub fn remove_override(&mut self, domain: &str) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `HistoryState` is never constructed
[INFO] [stdout]  --> src/engine/history_api.rs:1:12
[INFO] [stdout]   |
[INFO] [stdout] 1 | pub struct HistoryState {
[INFO] [stdout]   |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `HistoryEntry` is never constructed
[INFO] [stdout]  --> src/engine/history_api.rs:5:12
[INFO] [stdout]   |
[INFO] [stdout] 5 | pub struct HistoryEntry {
[INFO] [stdout]   |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]   --> src/engine/history_api.rs:11:12
[INFO] [stdout]    |
[INFO] [stdout] 10 | impl HistoryState {
[INFO] [stdout]    | ----------------- associated items in this implementation
[INFO] [stdout] 11 |     pub fn new(initial_url: &str) -> Self {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 17 |     pub fn push_state(&mut self, state: &str, title: &str, url: &str) {
[INFO] [stdout]    |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 22 |     pub fn replace_state(&mut self, state: &str, title: &str, url: &str) {
[INFO] [stdout]    |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 29 |     pub fn go_back(&mut self) -> Option<&HistoryEntry> {
[INFO] [stdout]    |            ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 32 |     pub fn go_forward(&mut self) -> Option<&HistoryEntry> {
[INFO] [stdout]    |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 35 |     pub fn go(&mut self, delta: i32) -> Option<&HistoryEntry> {
[INFO] [stdout]    |            ^^
[INFO] [stdout] ...
[INFO] [stdout] 44 |     pub fn length(&self) -> usize { self.entries.len() }
[INFO] [stdout]    |            ^^^^^^
[INFO] [stdout] 45 |     pub fn current(&self) -> Option<&HistoryEntry> { self.entries.get(self.current_index) }
[INFO] [stdout]    |            ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `id` and `script_url` are never read
[INFO] [stdout]  --> src/engine/web_workers.rs:4:9
[INFO] [stdout]   |
[INFO] [stdout] 3 | pub struct WorkerHandle {
[INFO] [stdout]   |            ------------ fields in this struct
[INFO] [stdout] 4 |     pub id: u32,
[INFO] [stdout]   |         ^^
[INFO] [stdout] 5 |     pub script_url: String,
[INFO] [stdout]   |         ^^^^^^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `WorkerHandle` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `latitude` and `longitude` are never read
[INFO] [stdout]  --> src/engine/web_apis.rs:6:9
[INFO] [stdout]   |
[INFO] [stdout] 4 | pub struct GeolocationResult {
[INFO] [stdout]   |            ----------------- fields in this struct
[INFO] [stdout] 5 |     pub success: bool,
[INFO] [stdout] 6 |     pub latitude: f64,
[INFO] [stdout]   |         ^^^^^^^^
[INFO] [stdout] 7 |     pub longitude: f64,
[INFO] [stdout]   |         ^^^^^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `GeolocationResult` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `entries` is never read
[INFO] [stdout]   --> src/engine/web_apis.rs:53:9
[INFO] [stdout]    |
[INFO] [stdout] 52 | pub struct IntersectionObserverStub {
[INFO] [stdout]    |            ------------------------ field in this struct
[INFO] [stdout] 53 |     pub entries: Vec<IntersectionEntry>,
[INFO] [stdout]    |         ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variants `Installed`, `Activating`, `Activated`, and `Redundant` are never constructed
[INFO] [stdout]  --> src/engine/service_workers.rs:6:5
[INFO] [stdout]   |
[INFO] [stdout] 4 | pub enum ServiceWorkerState {
[INFO] [stdout]   |          ------------------ variants in this enum
[INFO] [stdout] 5 |     Installing,
[INFO] [stdout] 6 |     Installed,
[INFO] [stdout]   |     ^^^^^^^^^
[INFO] [stdout] 7 |     Activating,
[INFO] [stdout]   |     ^^^^^^^^^^
[INFO] [stdout] 8 |     Activated,
[INFO] [stdout]   |     ^^^^^^^^^
[INFO] [stdout] 9 |     Redundant,
[INFO] [stdout]   |     ^^^^^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `ServiceWorkerState` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `registered_at` is never read
[INFO] [stdout]   --> src/engine/service_workers.rs:17:9
[INFO] [stdout]    |
[INFO] [stdout] 13 | pub struct ServiceWorkerRegistration {
[INFO] [stdout]    |            ------------------------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 17 |     pub registered_at: u64,
[INFO] [stdout]    |         ^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `ServiceWorkerRegistration` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `status`, `headers`, and `body` are never read
[INFO] [stdout]   --> src/engine/service_workers.rs:22:9
[INFO] [stdout]    |
[INFO] [stdout] 21 | pub struct ServiceWorkerResponse {
[INFO] [stdout]    |            --------------------- fields in this struct
[INFO] [stdout] 22 |     pub status: u16,
[INFO] [stdout]    |         ^^^^^^
[INFO] [stdout] 23 |     pub headers: HashMap<String, String>,
[INFO] [stdout]    |         ^^^^^^^
[INFO] [stdout] 24 |     pub body: String,
[INFO] [stdout]    |         ^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `ServiceWorkerResponse` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `name` is never read
[INFO] [stdout]  --> src/engine/indexeddb.rs:6:9
[INFO] [stdout]   |
[INFO] [stdout] 5 | pub struct IdbIndex {
[INFO] [stdout]   |            -------- field in this struct
[INFO] [stdout] 6 |     pub name: String,
[INFO] [stdout]   |         ^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `IdbIndex` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `name`, `key_path`, and `auto_increment` are never read
[INFO] [stdout]   --> src/engine/indexeddb.rs:13:9
[INFO] [stdout]    |
[INFO] [stdout] 12 | pub struct IdbObjectStore {
[INFO] [stdout]    |            -------------- fields in this struct
[INFO] [stdout] 13 |     pub name: String,
[INFO] [stdout]    |         ^^^^
[INFO] [stdout] 14 |     pub key_path: Option<String>,
[INFO] [stdout]    |         ^^^^^^^^
[INFO] [stdout] 15 |     pub auto_increment: bool,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^
[WARN] too many lines in the log, truncating it
