[INFO] fetching crate glowbarn 2.0.0...
[INFO] checking glowbarn-2.0.0 against try#f4690f24e7d9bcb0b168a02b06dd61391e8bd55a for pr-157814-crater-rollup
[INFO] extracting crate glowbarn 2.0.0 into /workspace/builds/worker-0-tc2/source
[INFO] started tweaking crates.io crate glowbarn 2.0.0
[INFO] finished tweaking crates.io crate glowbarn 2.0.0
[INFO] tweaked toml for crates.io crate glowbarn 2.0.0 written to /workspace/builds/worker-0-tc2/source/Cargo.toml
[INFO] validating manifest of crates.io crate glowbarn 2.0.0 on toolchain f4690f24e7d9bcb0b168a02b06dd61391e8bd55a
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+f4690f24e7d9bcb0b168a02b06dd61391e8bd55a" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }`
[INFO] crate crates.io crate glowbarn 2.0.0 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" "+f4690f24e7d9bcb0b168a02b06dd61391e8bd55a" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-0-tc2/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-0-tc2/target:/opt/rustwide/target:rw,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" "-m" "1610612736" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:3e793bdf10248eb2ddbd6b0faebed8155c11b4589982e2893733958d93e8d540" "sleep" "infinity", kill_on_drop: false }`
[INFO] [stdout] 4689c4e2c1b20c9fda38b6003b4e7e97899945136da286064dee8c2eaf9eac82
[INFO] running `Command { std: "docker" "start" "4689c4e2c1b20c9fda38b6003b4e7e97899945136da286064dee8c2eaf9eac82", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "exec" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-w" "/opt/rustwide/workdir" "--user" "0:0" "4689c4e2c1b20c9fda38b6003b4e7e97899945136da286064dee8c2eaf9eac82" "/opt/rustwide/cargo-home/bin/cargo" "+f4690f24e7d9bcb0b168a02b06dd61391e8bd55a" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "4689c4e2c1b20c9fda38b6003b4e7e97899945136da286064dee8c2eaf9eac82", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "exec" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-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" "-w" "/opt/rustwide/workdir" "--user" "0:0" "4689c4e2c1b20c9fda38b6003b4e7e97899945136da286064dee8c2eaf9eac82" "/opt/rustwide/cargo-home/bin/cargo" "+f4690f24e7d9bcb0b168a02b06dd61391e8bd55a" "check" "--frozen" "--all" "--all-targets" "--message-format=json", kill_on_drop: false }`
[INFO] [stderr]     Checking cfg-if v1.0.4
[INFO] [stderr]    Compiling serde_core v1.0.228
[INFO] [stderr]     Checking once_cell v1.21.3
[INFO] [stderr]     Checking log v0.4.29
[INFO] [stderr]    Compiling libc v0.2.180
[INFO] [stderr]     Checking smallvec v1.15.1
[INFO] [stderr]    Compiling syn v2.0.114
[INFO] [stderr]    Compiling cc v1.2.54
[INFO] [stderr]    Compiling serde v1.0.228
[INFO] [stderr]     Checking libloading v0.8.9
[INFO] [stderr]    Compiling rustix v1.1.3
[INFO] [stderr]     Checking scopeguard v1.2.0
[INFO] [stderr]    Compiling typenum v1.19.0
[INFO] [stderr]     Checking linux-raw-sys v0.11.0
[INFO] [stderr]     Checking lock_api v0.4.14
[INFO] [stderr]    Compiling zerocopy v0.8.33
[INFO] [stderr]    Compiling libm v0.2.16
[INFO] [stderr]    Compiling parking_lot_core v0.9.12
[INFO] [stderr]    Compiling num-traits v0.2.19
[INFO] [stderr]     Checking pin-project-lite v0.2.16
[INFO] [stderr]    Compiling generic-array v0.14.7
[INFO] [stderr]     Checking dlib v0.5.2
[INFO] [stderr]    Compiling wayland-sys v0.31.8
[INFO] [stderr]     Checking getrandom v0.2.17
[INFO] [stderr]     Checking rand_core v0.6.4
[INFO] [stderr]     Checking parking_lot v0.12.5
[INFO] [stderr]    Compiling wayland-backend v0.3.12
[INFO] [stderr]     Checking slab v0.4.11
[INFO] [stderr]     Checking downcast-rs v1.2.1
[INFO] [stderr]     Checking scoped-tls v1.0.1
[INFO] [stderr]    Compiling memchr v2.7.6
[INFO] [stderr]    Compiling getrandom v0.3.4
[INFO] [stderr]    Compiling wayland-client v0.31.12
[INFO] [stderr]     Checking stable_deref_trait v1.2.1
[INFO] [stderr]    Compiling ahash v0.8.12
[INFO] [stderr]     Checking crypto-common v0.1.7
[INFO] [stderr]     Checking subtle v2.6.1
[INFO] [stderr]    Compiling ring v0.17.14
[INFO] [stderr]     Checking bytes v1.11.0
[INFO] [stderr]    Compiling thiserror v1.0.69
[INFO] [stderr]     Checking tracing-core v0.1.36
[INFO] [stderr]     Checking errno v0.3.14
[INFO] [stderr]     Checking futures-sink v0.3.31
[INFO] [stderr]    Compiling quick-xml v0.38.4
[INFO] [stderr]     Checking untrusted v0.9.0
[INFO] [stderr]     Checking litemap v0.8.1
[INFO] [stderr]     Checking bitflags v2.10.0
[INFO] [stderr]     Checking writeable v0.6.2
[INFO] [stderr]     Checking futures-core v0.3.31
[INFO] [stderr]     Checking signal-hook-registry v1.4.8
[INFO] [stderr]     Checking mio v1.1.1
[INFO] [stderr]     Checking socket2 v0.6.2
[INFO] [stderr]    Compiling khronos_api v3.1.0
[INFO] [stderr]     Checking itoa v1.0.17
[INFO] [stderr]     Checking cpufeatures v0.2.17
[INFO] [stderr]     Checking equivalent v1.0.2
[INFO] [stderr]     Checking percent-encoding v2.3.2
[INFO] [stderr]     Checking hashbrown v0.16.1
[INFO] [stderr]    Compiling crossbeam-utils v0.8.21
[INFO] [stderr]    Compiling icu_properties_data v2.1.2
[INFO] [stderr]    Compiling icu_normalizer_data v2.1.1
[INFO] [stderr]    Compiling wayland-scanner v0.31.8
[INFO] [stderr]     Checking futures-channel v0.3.31
[INFO] [stderr]     Checking base64 v0.21.7
[INFO] [stderr]     Checking pin-utils v0.1.0
[INFO] [stderr]     Checking indexmap v2.13.0
[INFO] [stderr]     Checking futures-task v0.3.31
[INFO] [stderr]     Checking futures-io v0.3.31
[INFO] [stderr]    Compiling xml-rs v0.8.28
[INFO] [stderr]     Checking num-integer v0.1.46
[INFO] [stderr]    Compiling openssl-sys v0.9.111
[INFO] [stderr]    Compiling rustix v0.38.44
[INFO] [stderr]     Checking form_urlencoded v1.2.2
[INFO] [stderr]     Checking num-complex v0.4.6
[INFO] [stderr]     Checking block-buffer v0.10.4
[INFO] [stderr]     Checking cursor-icon v1.2.0
[INFO] [stderr]     Checking ttf-parser v0.25.1
[INFO] [stderr]     Checking xkeysym v0.2.1
[INFO] [stderr]    Compiling synstructure v0.13.2
[INFO] [stderr]    Compiling gl_generator v0.14.0
[INFO] [stderr]     Checking xcursor v0.3.10
[INFO] [stderr]     Checking linux-raw-sys v0.4.15
[INFO] [stderr]     Checking utf8_iter v1.0.4
[INFO] [stderr]    Compiling httparse v1.10.1
[INFO] [stderr]     Checking digest v0.10.7
[INFO] [stderr]    Compiling x11-dl v2.21.0
[INFO] [stderr]     Checking crossbeam-epoch v0.9.18
[INFO] [stderr]     Checking ppv-lite86 v0.2.21
[INFO] [stderr]     Checking memmap2 v0.9.9
[INFO] [stderr]     Checking fnv v1.0.7
[INFO] [stderr]     Checking allocator-api2 v0.2.21
[INFO] [stderr]     Checking ab_glyph_rasterizer v0.1.10
[INFO] [stderr]     Checking rand_chacha v0.3.1
[INFO] [stderr]    Compiling crc32fast v1.5.0
[INFO] [stderr]     Checking http v0.2.12
[INFO] [stderr]     Checking inout v0.1.4
[INFO] [stderr]    Compiling matrixmultiply v0.3.10
[INFO] [stderr]    Compiling serde_derive v1.0.228
[INFO] [stderr]    Compiling zerofrom-derive v0.1.6
[INFO] [stderr]    Compiling yoke-derive v0.8.1
[INFO] [stderr]    Compiling bytemuck_derive v1.10.2
[INFO] [stderr]    Compiling zerovec-derive v0.11.2
[INFO] [stderr]    Compiling displaydoc v0.2.5
[INFO] [stderr]     Checking zerofrom v0.1.6
[INFO] [stderr]     Checking yoke v0.8.1
[INFO] [stderr]     Checking bytemuck v1.24.0
[INFO] [stderr]    Compiling zeroize_derive v1.4.3
[INFO] [stderr]    Compiling thiserror-impl v1.0.69
[INFO] [stderr]    Compiling tracing-attributes v0.1.31
[INFO] [stderr]     Checking zerovec v0.11.5
[INFO] [stderr]     Checking zeroize v1.8.2
[INFO] [stderr]     Checking zerotrie v0.2.3
[INFO] [stderr]     Checking tinystr v0.8.2
[INFO] [stderr]     Checking icu_locale_core v2.1.1
[INFO] [stderr]     Checking potential_utf v0.1.4
[INFO] [stderr]    Compiling tokio-macros v2.6.0
[INFO] [stderr]     Checking icu_collections v2.1.1
[INFO] [stderr]     Checking polling v3.11.0
[INFO] [stderr]    Compiling futures-macro v0.3.31
[INFO] [stderr]     Checking wayland-protocols v0.31.2
[INFO] [stderr]     Checking wayland-protocols v0.32.10
[INFO] [stderr]     Checking tracing v0.1.44
[INFO] [stderr]     Checking icu_provider v2.1.1
[INFO] [stderr]     Checking wayland-cursor v0.31.12
[INFO] [stderr]     Checking rustls-pki-types v1.14.0
[INFO] [stderr]     Checking wayland-csd-frame v0.3.0
[INFO] [stderr]     Checking icu_properties v2.1.2
[INFO] [stderr]     Checking tokio v1.49.0
[INFO] [stderr]     Checking futures-util v0.3.31
[INFO] [stderr]     Checking icu_normalizer v2.1.1
[INFO] [stderr]     Checking owned_ttf_parser v0.25.1
[INFO] [stderr]     Checking calloop v0.12.4
[INFO] [stderr]     Checking ab_glyph v0.2.32
[INFO] [stderr]     Checking safe_arch v0.7.4
[INFO] [stderr]     Checking gethostname v1.1.0
[INFO] [stderr]     Checking x11rb-protocol v0.13.2
[INFO] [stderr]     Checking ecolor v0.25.0
[INFO] [stderr]     Checking idna_adapter v1.2.1
[INFO] [stderr]     Checking hashbrown v0.14.5
[INFO] [stderr]     Checking idna v1.1.0
[INFO] [stderr]     Checking emath v0.25.0
[INFO] [stderr]     Checking url v2.5.8
[INFO] [stderr]     Checking foreign-types-shared v0.1.1
[INFO] [stderr]     Checking nohash-hasher v0.2.0
[INFO] [stderr]     Checking openssl-probe v0.1.6
[INFO] [stderr]     Checking as-raw-xcb-connection v1.0.1
[INFO] [stderr]     Checking simd-adler32 v0.3.8
[INFO] [stderr]    Compiling rustls v0.21.12
[INFO] [stderr]     Checking byteorder v1.5.0
[INFO] [stderr]    Compiling smithay-client-toolkit v0.18.1
[INFO] [stderr]    Compiling openssl v0.10.75
[INFO] [stderr]    Compiling thiserror v2.0.18
[INFO] [stderr]     Checking epaint v0.25.0
[INFO] [stderr]     Checking foreign-types v0.3.2
[INFO] [stderr]     Checking wide v0.7.33
[INFO] [stderr]     Checking ron v0.8.1
[INFO] [stderr]     Checking calloop-wayland-source v0.2.0
[INFO] [stderr]     Checking calloop v0.14.3
[INFO] [stderr]     Checking cipher v0.4.4
[INFO] [stderr]     Checking sct v0.7.1
[INFO] [stderr]     Checking wayland-protocols-wlr v0.2.0
[INFO] [stderr]     Checking rustls-webpki v0.101.7
[INFO] [stderr]    Compiling openssl-macros v0.1.1
[INFO] [stderr]    Compiling thiserror-impl v2.0.18
[INFO] [stderr]     Checking rand v0.8.5
[INFO] [stderr]     Checking crossbeam-deque v0.8.6
[INFO] [stderr]    Compiling glutin_egl_sys v0.6.0
[INFO] [stderr]    Compiling glutin_glx_sys v0.5.0
[INFO] [stderr]     Checking tokio-util v0.7.18
[INFO] [stderr]     Checking approx v0.5.1
[INFO] [stderr]     Checking universal-hash v0.5.1
[INFO] [stderr]    Compiling winit v0.29.15
[INFO] [stderr]     Checking glow v0.13.1
[INFO] [stderr]     Checking unicode-width v0.1.14
[INFO] [stderr]     Checking rawpointer v0.2.1
[INFO] [stderr]     Checking raw-window-handle v0.5.2
[INFO] [stderr]    Compiling rustls v0.22.4
[INFO] [stderr]     Checking try-lock v0.2.5
[INFO] [stderr]     Checking termcolor v1.4.1
[INFO] [stderr]     Checking opaque-debug v0.3.1
[INFO] [stderr]     Checking adler2 v2.0.1
[INFO] [stderr]    Compiling smithay-client-toolkit v0.20.0
[INFO] [stderr]     Checking bit-vec v0.6.3
[INFO] [stderr]    Compiling ash v0.37.3+1.3.251
[INFO] [stderr]    Compiling rayon-core v1.13.0
[INFO] [stderr]    Compiling khronos-egl v6.0.0
[INFO] [stderr]    Compiling native-tls v0.2.14
[INFO] [stderr]     Checking miniz_oxide v0.8.9
[INFO] [stderr]     Checking codespan-reporting v0.11.1
[INFO] [stderr]     Checking want v0.3.1
[INFO] [stderr]     Checking bit-set v0.5.3
[INFO] [stderr]     Checking h2 v0.3.27
[INFO] [stderr]     Checking egui v0.25.0
[INFO] [stderr]     Checking wayland-protocols-experimental v20250721.0.1
[INFO] [stderr]     Checking wayland-protocols-wlr v0.3.10
[INFO] [stderr]     Checking wayland-protocols-misc v0.3.10
[INFO] [stderr]     Checking calloop-wayland-source v0.4.1
[INFO] [stderr]     Checking wayland-protocols-plasma v0.2.0
[INFO] [stderr]     Checking rustls-webpki v0.102.8
[INFO] [stderr]     Checking http-body v0.4.6
[INFO] [stderr]     Checking xkbcommon-dl v0.4.2
[INFO] [stderr]     Checking gpu-alloc-types v0.3.0
[INFO] [stderr]     Checking spirv v0.3.0+sdk-1.3.268.0
[INFO] [stderr]     Checking gpu-descriptor-types v0.1.2
[INFO] [stderr]    Compiling wgpu-hal v0.19.5
[INFO] [stderr]    Compiling glutin v0.31.3
[INFO] [stderr]     Checking socket2 v0.5.10
[INFO] [stderr]     Checking libloading v0.7.4
[INFO] [stderr]    Compiling memoffset v0.7.1
[INFO] [stderr]     Checking rustc-hash v1.1.0
[INFO] [stderr]     Checking hexf-parse v0.2.1
[INFO] [stderr]     Checking unicode-xid v0.2.6
[INFO] [stderr]     Checking tower-service v0.3.3
[INFO] [stderr]     Checking httpdate v1.0.3
[INFO] [stderr]     Checking utf8parse v0.2.2
[INFO] [stderr]     Checking smol_str v0.2.2
[INFO] [stderr]     Checking anstyle-parse v0.2.7
[INFO] [stderr]     Checking naga v0.19.2
[INFO] [stderr]    Compiling zmij v1.0.16
[INFO] [stderr]    Compiling parking_lot_core v0.8.6
[INFO] [stderr]     Checking gpu-descriptor v0.2.4
[INFO] [stderr]     Checking tokio-rustls v0.24.1
[INFO] [stderr]     Checking gpu-alloc v0.6.0
[INFO] [stderr]     Checking flate2 v1.1.8
[INFO] [stderr]     Checking hyper v0.14.32
[INFO] [stderr]    Compiling syn v1.0.109
[INFO] [stderr]     Checking fdeflate v0.3.7
[INFO] [stderr]     Checking num-rational v0.4.2
[INFO] [stderr]     Checking rustls-pemfile v1.0.4
[INFO] [stderr]     Checking wgpu-types v0.19.2
[INFO] [stderr]    Compiling libsqlite3-sys v0.27.0
[INFO] [stderr]    Compiling wgpu-core v0.19.4
[INFO] [stderr]    Compiling glutin-winit v0.4.2
[INFO] [stderr]     Checking instant v0.1.13
[INFO] [stderr]     Checking anstyle v1.0.13
[INFO] [stderr]     Checking home v0.5.12
[INFO] [stderr]     Checking lazy_static v1.5.0
[INFO] [stderr]     Checking regex-syntax v0.8.8
[INFO] [stderr]     Checking either v1.15.0
[INFO] [stderr]     Checking anstyle-query v1.1.5
[INFO] [stderr]     Checking is_terminal_polyfill v1.70.2
[INFO] [stderr]     Checking renderdoc-sys v1.1.0
[INFO] [stderr]     Checking strength_reduce v0.2.4
[INFO] [stderr]     Checking profiling v1.0.17
[INFO] [stderr]     Checking bitflags v1.3.2
[INFO] [stderr]     Checking raw-window-handle v0.6.2
[INFO] [stderr]     Checking colorchoice v1.0.4
[INFO] [stderr]     Checking x11rb v0.13.2
[INFO] [stderr]     Checking arrayvec v0.7.6
[INFO] [stderr]     Checking anstream v0.6.21
[INFO] [stderr]     Checking png v0.17.16
[INFO] [stderr]     Checking transpose v0.2.3
[INFO] [stderr]     Checking regex-automata v0.4.13
[INFO] [stderr]    Compiling serde_json v1.0.149
[INFO] [stderr]     Checking rayon v1.11.0
[INFO] [stderr]     Checking webbrowser v0.8.15
[INFO] [stderr]     Checking smithay-clipboard v0.7.3
[INFO] [stderr]     Checking arboard v3.6.1
[INFO] [stderr]     Checking tokio-native-tls v0.3.1
[INFO] [stderr]     Checking polyval v0.6.2
[INFO] [stderr]     Checking simba v0.6.0
[INFO] [stderr]     Checking rand_distr v0.4.3
[INFO] [stderr]    Compiling nalgebra-macros v0.1.0
[INFO] [stderr]     Checking serde_spanned v0.6.9
[INFO] [stderr]     Checking toml_datetime v0.6.11
[INFO] [stderr]     Checking webpki-roots v1.0.5
[INFO] [stderr]     Checking sha1 v0.10.6
[INFO] [stderr]     Checking primal-check v0.3.4
[INFO] [stderr]     Checking http v1.4.0
[INFO] [stderr]     Checking aead v0.5.2
[INFO] [stderr]    Compiling wgpu v0.19.4
[INFO] [stderr]     Checking dirs-sys-next v0.1.2
[INFO] [stderr]     Checking spin v0.9.8
[INFO] [stderr]     Checking static_assertions v1.1.0
[INFO] [stderr]     Checking base64ct v1.8.3
[INFO] [stderr]     Checking utf-8 v0.7.6
[INFO] [stderr]     Checking data-encoding v2.10.0
[INFO] [stderr]     Checking web-time v0.2.4
[INFO] [stderr]     Checking strsim v0.11.1
[INFO] [stderr]     Checking color_quant v1.1.0
[INFO] [stderr]     Checking ryu v1.0.22
[INFO] [stderr]     Checking option-ext v0.2.0
[INFO] [stderr]     Checking winnow v0.7.14
[INFO] [stderr]     Checking toml_write v0.1.2
[INFO] [stderr]     Checking clap_lex v0.7.7
[INFO] [stderr]     Checking tungstenite v0.21.0
[INFO] [stderr]     Checking clap_builder v4.5.54
[INFO] [stderr]    Compiling clap_derive v4.5.49
[INFO] [stderr]     Checking dirs-sys v0.4.1
[INFO] [stderr]     Checking egui-winit v0.25.0
[INFO] [stderr]     Checking serde_urlencoded v0.7.1
[INFO] [stderr]     Checking image v0.24.9
[INFO] [stderr]    Compiling anyhow v1.0.100
[INFO] [stderr]     Checking password-hash v0.5.0
[INFO] [stderr]     Checking flume v0.11.1
[INFO] [stderr]     Checking toml_edit v0.22.27
[INFO] [stderr]     Checking directories-next v2.0.0
[INFO] [stderr]     Checking rustfft v6.4.1
[INFO] [stderr]     Checking webpki-roots v0.26.11
[INFO] [stderr]     Checking ghash v0.5.1
[INFO] [stderr]     Checking matchers v0.2.0
[INFO] [stderr]     Checking egui_glow v0.25.0
[INFO] [stderr]     Checking hyper-tls v0.5.0
[INFO] [stderr]     Checking parking_lot v0.11.2
[INFO] [stderr]     Checking hyper-rustls v0.24.2
[INFO] [stderr]     Checking sharded-slab v0.1.7
[INFO] [stderr]     Checking tokio-rustls v0.25.0
[INFO] [stderr]     Checking rustls-native-certs v0.6.3
[INFO] [stderr]     Checking poly1305 v0.8.0
[INFO] [stderr]     Checking simba v0.8.1
[INFO] [stderr]     Checking chacha20 v0.9.1
[INFO] [stderr]     Checking aes v0.8.4
[INFO] [stderr]     Checking ctr v0.9.2
[INFO] [stderr]     Checking futures-executor v0.3.31
[INFO] [stderr]     Checking nalgebra v0.29.0
[INFO] [stderr]     Checking fxhash v0.2.1
[INFO] [stderr]     Checking hashlink v0.8.4
[INFO] [stderr]    Compiling nalgebra-macros v0.2.2
[INFO] [stderr]     Checking blake2 v0.10.6
[INFO] [stderr]     Checking crossbeam-channel v0.5.15
[INFO] [stderr]     Checking crossbeam-queue v0.3.12
[INFO] [stderr]     Checking tracing-log v0.2.0
[INFO] [stderr]     Checking fs2 v0.4.3
[INFO] [stderr]     Checking encoding_rs v0.8.35
[INFO] [stderr]     Checking thread_local v1.1.9
[INFO] [stderr]     Checking fallible-streaming-iterator v0.1.9
[INFO] [stderr]     Checking iana-time-zone v0.1.64
[INFO] [stderr]     Checking nu-ansi-term v0.50.3
[INFO] [stderr]     Checking sync_wrapper v0.1.2
[INFO] [stderr]     Checking ipnet v2.11.0
[INFO] [stderr]     Checking mime v0.3.17
[INFO] [stderr]     Checking webpki-roots v0.25.4
[INFO] [stderr]     Checking fallible-iterator v0.3.0
[INFO] [stderr]     Checking tracing-subscriber v0.3.22
[INFO] [stderr]     Checking chrono v0.4.43
[INFO] [stderr]     Checking reqwest v0.11.27
[INFO] [stderr]     Checking crossbeam v0.8.4
[INFO] [stderr]     Checking sled v0.34.7
[INFO] [stderr]     Checking argon2 v0.5.3
[INFO] [stderr]     Checking futures v0.3.31
[INFO] [stderr]     Checking aes-gcm v0.10.3
[INFO] [stderr]     Checking toml v0.8.23
[INFO] [stderr]     Checking chacha20poly1305 v0.10.1
[INFO] [stderr]     Checking rumqttc v0.23.0
[INFO] [stderr]     Checking realfft v3.5.0
[INFO] [stderr]     Checking tokio-tungstenite v0.21.0
[INFO] [stderr]     Checking eframe v0.25.0
[INFO] [stderr]     Checking clap v4.5.54
[INFO] [stderr]     Checking dirs v5.0.1
[INFO] [stderr]     Checking sysinfo v0.30.13
[INFO] [stderr]     Checking nalgebra v0.32.6
[INFO] [stderr]     Checking ndarray v0.15.6
[INFO] [stderr]     Checking egui_plot v0.25.0
[INFO] [stderr]     Checking bincode v1.3.3
[INFO] [stderr]     Checking secrecy v0.8.0
[INFO] [stderr]    Compiling async-trait v0.1.89
[INFO] [stderr]     Checking sha2 v0.10.9
[INFO] [stderr]     Checking hmac v0.12.1
[INFO] [stderr]     Checking uuid v1.19.0
[INFO] [stderr]     Checking statrs v0.16.1
[INFO] [stderr]     Checking rusqlite v0.30.0
[INFO] [stderr]     Checking glowbarn v2.0.0 (/opt/rustwide/workdir)
[INFO] [stdout] warning: unused import: `tokio::time::Interval`
[INFO] [stdout]   --> src/core/scheduler.rs:11:5
[INFO] [stdout]    |
[INFO] [stdout] 11 | use tokio::time::Interval;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `warn`
[INFO] [stdout]   --> src/core/scheduler.rs:12:22
[INFO] [stdout]    |
[INFO] [stdout] 12 | use tracing::{debug, warn};
[INFO] [stdout]    |                      ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::sync::Arc`
[INFO] [stdout]  --> src/core/event_bus.rs:7:5
[INFO] [stdout]   |
[INFO] [stdout] 7 | use std::sync::Arc;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `mpsc`
[INFO] [stdout]  --> src/core/event_bus.rs:8:30
[INFO] [stdout]   |
[INFO] [stdout] 8 | use tokio::sync::{broadcast, mpsc};
[INFO] [stdout]   |                              ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::sensors::SensorReading`
[INFO] [stdout]   --> src/core/mod.rs:15:5
[INFO] [stdout]    |
[INFO] [stdout] 15 | use crate::sensors::SensorReading;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::detection::Detection`
[INFO] [stdout]   --> src/core/mod.rs:16:5
[INFO] [stdout]    |
[INFO] [stdout] 16 | use crate::detection::Detection;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `SensorReading`
[INFO] [stdout]   --> src/sensors/manager.rs:14:21
[INFO] [stdout]    |
[INFO] [stdout] 14 | use super::{Sensor, SensorReading, SensorType, SensorStatus, SensorHealth};
[INFO] [stdout]    |                     ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::time::Duration`
[INFO] [stdout]  --> src/sensors/traits.rs:7:5
[INFO] [stdout]   |
[INFO] [stdout] 7 | use std::time::Duration;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `rand::prelude::*`
[INFO] [stdout]   --> src/sensors/quantum.rs:10:5
[INFO] [stdout]    |
[INFO] [stdout] 10 | use rand::prelude::*;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Uniform`
[INFO] [stdout]   --> src/sensors/simulator.rs:10:26
[INFO] [stdout]    |
[INFO] [stdout] 10 | use rand_distr::{Normal, Uniform};
[INFO] [stdout]    |                          ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `E` and `PI`
[INFO] [stdout]  --> src/analysis/entropy.rs:8:24
[INFO] [stdout]   |
[INFO] [stdout] 8 | use std::f64::consts::{E, PI};
[INFO] [stdout]   |                        ^  ^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `DMatrix` and `DVector`
[INFO] [stdout]  --> src/analysis/anomaly.rs:8:16
[INFO] [stdout]   |
[INFO] [stdout] 8 | use nalgebra::{DMatrix, DVector};
[INFO] [stdout]   |                ^^^^^^^  ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::collections::HashMap`
[INFO] [stdout]  --> src/analysis/patterns.rs:7:5
[INFO] [stdout]   |
[INFO] [stdout] 7 | use std::collections::HashMap;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary parentheses around assigned value
[INFO] [stdout]    --> src/analysis/statistics.rs:116:17
[INFO] [stdout]     |
[INFO] [stdout] 116 |         let k = (p / 100.0 * (sorted.len() - 1) as f64);
[INFO] [stdout]     |                 ^                                     ^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_parens)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] help: remove these parentheses
[INFO] [stdout]     |
[INFO] [stdout] 116 -         let k = (p / 100.0 * (sorted.len() - 1) as f64);
[INFO] [stdout] 116 +         let k = p / 100.0 * (sorted.len() - 1) as f64;
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `RwLock`
[INFO] [stdout]   --> src/analysis/mod.rs:22:30
[INFO] [stdout]    |
[INFO] [stdout] 22 | use tokio::sync::{broadcast, RwLock};
[INFO] [stdout]    |                              ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `DMatrix` and `DVector`
[INFO] [stdout]  --> src/detection/fusion.rs:8:16
[INFO] [stdout]   |
[INFO] [stdout] 8 | use nalgebra::{DMatrix, DVector};
[INFO] [stdout]   |                ^^^^^^^  ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Deserialize` and `Serialize`
[INFO] [stdout]  --> src/detection/fusion.rs:9:13
[INFO] [stdout]   |
[INFO] [stdout] 9 | use serde::{Deserialize, Serialize};
[INFO] [stdout]   |             ^^^^^^^^^^^  ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `SensorContribution`
[INFO] [stdout]   --> src/detection/classification.rs:10:39
[INFO] [stdout]    |
[INFO] [stdout] 10 | use super::{Detection, DetectionType, SensorContribution};
[INFO] [stdout]    |                                       ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::analysis::EntropyResult`
[INFO] [stdout]   --> src/detection/classification.rs:11:5
[INFO] [stdout]    |
[INFO] [stdout] 11 | use crate::analysis::EntropyResult;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Deserialize` and `Serialize`
[INFO] [stdout]  --> src/detection/correlation.rs:9:13
[INFO] [stdout]   |
[INFO] [stdout] 9 | use serde::{Deserialize, Serialize};
[INFO] [stdout]   |             ^^^^^^^^^^^  ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `debug` and `warn`
[INFO] [stdout]   --> src/detection/mod.rs:20:21
[INFO] [stdout]    |
[INFO] [stdout] 20 | use tracing::{info, warn, debug};
[INFO] [stdout]    |                     ^^^^  ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `AnomalyType`, `Anomaly`, and `EntropyResult`
[INFO] [stdout]   --> src/detection/mod.rs:23:23
[INFO] [stdout]    |
[INFO] [stdout] 23 | use crate::analysis::{EntropyResult, Anomaly, AnomalyType};
[INFO] [stdout]    |                       ^^^^^^^^^^^^^  ^^^^^^^  ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `error`
[INFO] [stdout]   --> src/streaming/mqtt.rs:12:27
[INFO] [stdout]    |
[INFO] [stdout] 12 | use tracing::{info, warn, error, debug};
[INFO] [stdout]    |                           ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `anyhow`
[INFO] [stdout]  --> src/streaming/websocket.rs:7:14
[INFO] [stdout]   |
[INFO] [stdout] 7 | use anyhow::{anyhow, Result};
[INFO] [stdout]   |              ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::sensors::SensorReading`
[INFO] [stdout]   --> src/streaming/websocket.rs:18:5
[INFO] [stdout]    |
[INFO] [stdout] 18 | use crate::sensors::SensorReading;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `DateTime`
[INFO] [stdout]  --> src/streaming/export.rs:8:14
[INFO] [stdout]   |
[INFO] [stdout] 8 | use chrono::{DateTime, Utc};
[INFO] [stdout]   |              ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `serde::Serialize`
[INFO] [stdout]  --> src/streaming/export.rs:9:5
[INFO] [stdout]   |
[INFO] [stdout] 9 | use serde::Serialize;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `warn`
[INFO] [stdout]   --> src/streaming/export.rs:14:21
[INFO] [stdout]    |
[INFO] [stdout] 14 | use tracing::{info, warn};
[INFO] [stdout]    |                     ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::sync::Arc`
[INFO] [stdout]   --> src/streaming/mod.rs:15:5
[INFO] [stdout]    |
[INFO] [stdout] 15 | use std::sync::Arc;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::config::Config`
[INFO] [stdout]   --> src/streaming/mod.rs:20:5
[INFO] [stdout]    |
[INFO] [stdout] 20 | use crate::config::Config;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Sha256`
[INFO] [stdout]  --> src/security/keystore.rs:9:12
[INFO] [stdout]   |
[INFO] [stdout] 9 | use sha2::{Sha256, Digest};
[INFO] [stdout]   |            ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Zeroize`
[INFO] [stdout]   --> src/security/keystore.rs:10:15
[INFO] [stdout]    |
[INFO] [stdout] 10 | use zeroize::{Zeroize, Zeroizing};
[INFO] [stdout]    |               ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `zeroize::Zeroize`
[INFO] [stdout]   --> src/security/auth.rs:15:5
[INFO] [stdout]    |
[INFO] [stdout] 15 | use zeroize::Zeroize;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `warn`
[INFO] [stdout]   --> src/security/mod.rs:19:21
[INFO] [stdout]    |
[INFO] [stdout] 19 | use tracing::{info, warn};
[INFO] [stdout]    |                     ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `anyhow`
[INFO] [stdout]  --> src/config/mod.rs:7:14
[INFO] [stdout]   |
[INFO] [stdout] 7 | use anyhow::{anyhow, Result};
[INFO] [stdout]   |              ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `anyhow`
[INFO] [stdout]  --> src/db/mod.rs:7:14
[INFO] [stdout]   |
[INFO] [stdout] 7 | use anyhow::{anyhow, Result};
[INFO] [stdout]   |              ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Deserialize` and `Serialize`
[INFO] [stdout]  --> src/db/mod.rs:9:13
[INFO] [stdout]   |
[INFO] [stdout] 9 | use serde::{Deserialize, Serialize};
[INFO] [stdout]   |             ^^^^^^^^^^^  ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::path::Path`
[INFO] [stdout]   --> src/db/mod.rs:10:5
[INFO] [stdout]    |
[INFO] [stdout] 10 | use std::path::Path;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `debug` and `warn`
[INFO] [stdout]   --> src/db/mod.rs:13:21
[INFO] [stdout]    |
[INFO] [stdout] 13 | use tracing::{info, warn, debug};
[INFO] [stdout]    |                     ^^^^  ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `anyhow::Result`
[INFO] [stdout]  --> src/gpu/buffers.rs:7:5
[INFO] [stdout]   |
[INFO] [stdout] 7 | use anyhow::Result;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::sync::Arc`
[INFO] [stdout]   --> src/gpu/mod.rs:16:5
[INFO] [stdout]    |
[INFO] [stdout] 16 | use std::sync::Arc;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `debug` and `warn`
[INFO] [stdout]   --> src/gpu/mod.rs:17:21
[INFO] [stdout]    |
[INFO] [stdout] 17 | use tracing::{info, warn, debug};
[INFO] [stdout]    |                     ^^^^  ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::sync::Arc`
[INFO] [stdout]  --> src/ui/app.rs:8:5
[INFO] [stdout]   |
[INFO] [stdout] 8 | use std::sync::Arc;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `RwLock` and `broadcast`
[INFO] [stdout]  --> src/ui/app.rs:9:19
[INFO] [stdout]   |
[INFO] [stdout] 9 | use tokio::sync::{broadcast, RwLock};
[INFO] [stdout]   |                   ^^^^^^^^^  ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `SensorManager`, `SensorReading`, and `SensorType`
[INFO] [stdout]   --> src/ui/app.rs:13:22
[INFO] [stdout]    |
[INFO] [stdout] 13 | use crate::sensors::{SensorManager, SensorReading, SensorType};
[INFO] [stdout]    |                      ^^^^^^^^^^^^^  ^^^^^^^^^^^^^  ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `super::theme::*`
[INFO] [stdout]   --> src/ui/app.rs:18:5
[INFO] [stdout]    |
[INFO] [stdout] 18 | use super::theme::*;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary parentheses around block return value
[INFO] [stdout]    --> src/ui/app.rs:375:5
[INFO] [stdout]     |
[INFO] [stdout] 375 |     (nanos as f64 / u32::MAX as f64)
[INFO] [stdout]     |     ^                              ^
[INFO] [stdout]     |
[INFO] [stdout] help: remove these parentheses
[INFO] [stdout]     |
[INFO] [stdout] 375 -     (nanos as f64 / u32::MAX as f64)
[INFO] [stdout] 375 +     nanos as f64 / u32::MAX as f64
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `DetectionType`
[INFO] [stdout]  --> src/ui/panels.rs:9:24
[INFO] [stdout]   |
[INFO] [stdout] 9 | use crate::detection::{DetectionType, Severity};
[INFO] [stdout]   |                        ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `SpectrumData` and `ThermalData`
[INFO] [stdout]   --> src/ui/panels.rs:10:23
[INFO] [stdout]    |
[INFO] [stdout] 10 | use super::{GuiState, ThermalData, SpectrumData};
[INFO] [stdout]    |                       ^^^^^^^^^^^  ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `super::plots::*`
[INFO] [stdout]   --> src/ui/panels.rs:11:5
[INFO] [stdout]    |
[INFO] [stdout] 11 | use super::plots::*;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `super::widgets::*`
[INFO] [stdout]   --> src/ui/panels.rs:12:5
[INFO] [stdout]    |
[INFO] [stdout] 12 | use super::widgets::*;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::sync::Arc`
[INFO] [stdout]   --> src/ui/mod.rs:21:5
[INFO] [stdout]    |
[INFO] [stdout] 21 | use std::sync::Arc;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `tokio::sync::RwLock`
[INFO] [stdout]   --> src/ui/mod.rs:22:5
[INFO] [stdout]    |
[INFO] [stdout] 22 | use tokio::sync::RwLock;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::core::EventBus`
[INFO] [stdout]   --> src/ui/mod.rs:27:5
[INFO] [stdout]    |
[INFO] [stdout] 27 | use crate::core::EventBus;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `tokio::time::Interval`
[INFO] [stdout]   --> src/core/scheduler.rs:11:5
[INFO] [stdout]    |
[INFO] [stdout] 11 | use tokio::time::Interval;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `warn`
[INFO] [stdout]   --> src/core/scheduler.rs:12:22
[INFO] [stdout]    |
[INFO] [stdout] 12 | use tracing::{debug, warn};
[INFO] [stdout]    |                      ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::sync::Arc`
[INFO] [stdout]  --> src/core/event_bus.rs:7:5
[INFO] [stdout]   |
[INFO] [stdout] 7 | use std::sync::Arc;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `mpsc`
[INFO] [stdout]  --> src/core/event_bus.rs:8:30
[INFO] [stdout]   |
[INFO] [stdout] 8 | use tokio::sync::{broadcast, mpsc};
[INFO] [stdout]   |                              ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::sensors::SensorReading`
[INFO] [stdout]   --> src/core/mod.rs:15:5
[INFO] [stdout]    |
[INFO] [stdout] 15 | use crate::sensors::SensorReading;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::detection::Detection`
[INFO] [stdout]   --> src/core/mod.rs:16:5
[INFO] [stdout]    |
[INFO] [stdout] 16 | use crate::detection::Detection;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `SensorReading`
[INFO] [stdout]   --> src/sensors/manager.rs:14:21
[INFO] [stdout]    |
[INFO] [stdout] 14 | use super::{Sensor, SensorReading, SensorType, SensorStatus, SensorHealth};
[INFO] [stdout]    |                     ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::time::Duration`
[INFO] [stdout]  --> src/sensors/traits.rs:7:5
[INFO] [stdout]   |
[INFO] [stdout] 7 | use std::time::Duration;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `rand::prelude::*`
[INFO] [stdout]   --> src/sensors/quantum.rs:10:5
[INFO] [stdout]    |
[INFO] [stdout] 10 | use rand::prelude::*;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Uniform`
[INFO] [stdout]   --> src/sensors/simulator.rs:10:26
[INFO] [stdout]    |
[INFO] [stdout] 10 | use rand_distr::{Normal, Uniform};
[INFO] [stdout]    |                          ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `E` and `PI`
[INFO] [stdout]  --> src/analysis/entropy.rs:8:24
[INFO] [stdout]   |
[INFO] [stdout] 8 | use std::f64::consts::{E, PI};
[INFO] [stdout]   |                        ^  ^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `DMatrix` and `DVector`
[INFO] [stdout]  --> src/analysis/anomaly.rs:8:16
[INFO] [stdout]   |
[INFO] [stdout] 8 | use nalgebra::{DMatrix, DVector};
[INFO] [stdout]   |                ^^^^^^^  ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::collections::HashMap`
[INFO] [stdout]  --> src/analysis/patterns.rs:7:5
[INFO] [stdout]   |
[INFO] [stdout] 7 | use std::collections::HashMap;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary parentheses around assigned value
[INFO] [stdout]    --> src/analysis/statistics.rs:116:17
[INFO] [stdout]     |
[INFO] [stdout] 116 |         let k = (p / 100.0 * (sorted.len() - 1) as f64);
[INFO] [stdout]     |                 ^                                     ^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_parens)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] help: remove these parentheses
[INFO] [stdout]     |
[INFO] [stdout] 116 -         let k = (p / 100.0 * (sorted.len() - 1) as f64);
[INFO] [stdout] 116 +         let k = p / 100.0 * (sorted.len() - 1) as f64;
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `RwLock`
[INFO] [stdout]   --> src/analysis/mod.rs:22:30
[INFO] [stdout]    |
[INFO] [stdout] 22 | use tokio::sync::{broadcast, RwLock};
[INFO] [stdout]    |                              ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `DMatrix` and `DVector`
[INFO] [stdout]  --> src/detection/fusion.rs:8:16
[INFO] [stdout]   |
[INFO] [stdout] 8 | use nalgebra::{DMatrix, DVector};
[INFO] [stdout]   |                ^^^^^^^  ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Deserialize` and `Serialize`
[INFO] [stdout]  --> src/detection/fusion.rs:9:13
[INFO] [stdout]   |
[INFO] [stdout] 9 | use serde::{Deserialize, Serialize};
[INFO] [stdout]   |             ^^^^^^^^^^^  ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `SensorContribution`
[INFO] [stdout]   --> src/detection/classification.rs:10:39
[INFO] [stdout]    |
[INFO] [stdout] 10 | use super::{Detection, DetectionType, SensorContribution};
[INFO] [stdout]    |                                       ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::analysis::EntropyResult`
[INFO] [stdout]   --> src/detection/classification.rs:11:5
[INFO] [stdout]    |
[INFO] [stdout] 11 | use crate::analysis::EntropyResult;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Deserialize` and `Serialize`
[INFO] [stdout]  --> src/detection/correlation.rs:9:13
[INFO] [stdout]   |
[INFO] [stdout] 9 | use serde::{Deserialize, Serialize};
[INFO] [stdout]   |             ^^^^^^^^^^^  ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `debug` and `warn`
[INFO] [stdout]   --> src/detection/mod.rs:20:21
[INFO] [stdout]    |
[INFO] [stdout] 20 | use tracing::{info, warn, debug};
[INFO] [stdout]    |                     ^^^^  ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `AnomalyType`, `Anomaly`, and `EntropyResult`
[INFO] [stdout]   --> src/detection/mod.rs:23:23
[INFO] [stdout]    |
[INFO] [stdout] 23 | use crate::analysis::{EntropyResult, Anomaly, AnomalyType};
[INFO] [stdout]    |                       ^^^^^^^^^^^^^  ^^^^^^^  ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `error`
[INFO] [stdout]   --> src/streaming/mqtt.rs:12:27
[INFO] [stdout]    |
[INFO] [stdout] 12 | use tracing::{info, warn, error, debug};
[INFO] [stdout]    |                           ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `anyhow`
[INFO] [stdout]  --> src/streaming/websocket.rs:7:14
[INFO] [stdout]   |
[INFO] [stdout] 7 | use anyhow::{anyhow, Result};
[INFO] [stdout]   |              ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::sensors::SensorReading`
[INFO] [stdout]   --> src/streaming/websocket.rs:18:5
[INFO] [stdout]    |
[INFO] [stdout] 18 | use crate::sensors::SensorReading;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `DateTime`
[INFO] [stdout]  --> src/streaming/export.rs:8:14
[INFO] [stdout]   |
[INFO] [stdout] 8 | use chrono::{DateTime, Utc};
[INFO] [stdout]   |              ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `serde::Serialize`
[INFO] [stdout]  --> src/streaming/export.rs:9:5
[INFO] [stdout]   |
[INFO] [stdout] 9 | use serde::Serialize;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `warn`
[INFO] [stdout]   --> src/streaming/export.rs:14:21
[INFO] [stdout]    |
[INFO] [stdout] 14 | use tracing::{info, warn};
[INFO] [stdout]    |                     ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::sync::Arc`
[INFO] [stdout]   --> src/streaming/mod.rs:15:5
[INFO] [stdout]    |
[INFO] [stdout] 15 | use std::sync::Arc;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::config::Config`
[INFO] [stdout]   --> src/streaming/mod.rs:20:5
[INFO] [stdout]    |
[INFO] [stdout] 20 | use crate::config::Config;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Sha256`
[INFO] [stdout]  --> src/security/keystore.rs:9:12
[INFO] [stdout]   |
[INFO] [stdout] 9 | use sha2::{Sha256, Digest};
[INFO] [stdout]   |            ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Zeroize`
[INFO] [stdout]   --> src/security/keystore.rs:10:15
[INFO] [stdout]    |
[INFO] [stdout] 10 | use zeroize::{Zeroize, Zeroizing};
[INFO] [stdout]    |               ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `zeroize::Zeroize`
[INFO] [stdout]   --> src/security/auth.rs:15:5
[INFO] [stdout]    |
[INFO] [stdout] 15 | use zeroize::Zeroize;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `warn`
[INFO] [stdout]   --> src/security/mod.rs:19:21
[INFO] [stdout]    |
[INFO] [stdout] 19 | use tracing::{info, warn};
[INFO] [stdout]    |                     ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `anyhow`
[INFO] [stdout]  --> src/config/mod.rs:7:14
[INFO] [stdout]   |
[INFO] [stdout] 7 | use anyhow::{anyhow, Result};
[INFO] [stdout]   |              ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `anyhow`
[INFO] [stdout]  --> src/db/mod.rs:7:14
[INFO] [stdout]   |
[INFO] [stdout] 7 | use anyhow::{anyhow, Result};
[INFO] [stdout]   |              ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Deserialize` and `Serialize`
[INFO] [stdout]  --> src/db/mod.rs:9:13
[INFO] [stdout]   |
[INFO] [stdout] 9 | use serde::{Deserialize, Serialize};
[INFO] [stdout]   |             ^^^^^^^^^^^  ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::path::Path`
[INFO] [stdout]   --> src/db/mod.rs:10:5
[INFO] [stdout]    |
[INFO] [stdout] 10 | use std::path::Path;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `debug` and `warn`
[INFO] [stdout]   --> src/db/mod.rs:13:21
[INFO] [stdout]    |
[INFO] [stdout] 13 | use tracing::{info, warn, debug};
[INFO] [stdout]    |                     ^^^^  ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `anyhow::Result`
[INFO] [stdout]  --> src/gpu/buffers.rs:7:5
[INFO] [stdout]   |
[INFO] [stdout] 7 | use anyhow::Result;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::sync::Arc`
[INFO] [stdout]   --> src/gpu/mod.rs:16:5
[INFO] [stdout]    |
[INFO] [stdout] 16 | use std::sync::Arc;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `debug` and `warn`
[INFO] [stdout]   --> src/gpu/mod.rs:17:21
[INFO] [stdout]    |
[INFO] [stdout] 17 | use tracing::{info, warn, debug};
[INFO] [stdout]    |                     ^^^^  ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::sync::Arc`
[INFO] [stdout]  --> src/ui/app.rs:8:5
[INFO] [stdout]   |
[INFO] [stdout] 8 | use std::sync::Arc;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `RwLock` and `broadcast`
[INFO] [stdout]  --> src/ui/app.rs:9:19
[INFO] [stdout]   |
[INFO] [stdout] 9 | use tokio::sync::{broadcast, RwLock};
[INFO] [stdout]   |                   ^^^^^^^^^  ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `SensorManager`, `SensorReading`, and `SensorType`
[INFO] [stdout]   --> src/ui/app.rs:13:22
[INFO] [stdout]    |
[INFO] [stdout] 13 | use crate::sensors::{SensorManager, SensorReading, SensorType};
[INFO] [stdout]    |                      ^^^^^^^^^^^^^  ^^^^^^^^^^^^^  ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `super::theme::*`
[INFO] [stdout]   --> src/ui/app.rs:18:5
[INFO] [stdout]    |
[INFO] [stdout] 18 | use super::theme::*;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary parentheses around block return value
[INFO] [stdout]    --> src/ui/app.rs:375:5
[INFO] [stdout]     |
[INFO] [stdout] 375 |     (nanos as f64 / u32::MAX as f64)
[INFO] [stdout]     |     ^                              ^
[INFO] [stdout]     |
[INFO] [stdout] help: remove these parentheses
[INFO] [stdout]     |
[INFO] [stdout] 375 -     (nanos as f64 / u32::MAX as f64)
[INFO] [stdout] 375 +     nanos as f64 / u32::MAX as f64
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `DetectionType`
[INFO] [stdout]  --> src/ui/panels.rs:9:24
[INFO] [stdout]   |
[INFO] [stdout] 9 | use crate::detection::{DetectionType, Severity};
[INFO] [stdout]   |                        ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `SpectrumData` and `ThermalData`
[INFO] [stdout]   --> src/ui/panels.rs:10:23
[INFO] [stdout]    |
[INFO] [stdout] 10 | use super::{GuiState, ThermalData, SpectrumData};
[INFO] [stdout]    |                       ^^^^^^^^^^^  ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `super::plots::*`
[INFO] [stdout]   --> src/ui/panels.rs:11:5
[INFO] [stdout]    |
[INFO] [stdout] 11 | use super::plots::*;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `super::widgets::*`
[INFO] [stdout]   --> src/ui/panels.rs:12:5
[INFO] [stdout]    |
[INFO] [stdout] 12 | use super::widgets::*;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::sync::Arc`
[INFO] [stdout]   --> src/ui/mod.rs:21:5
[INFO] [stdout]    |
[INFO] [stdout] 21 | use std::sync::Arc;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `tokio::sync::RwLock`
[INFO] [stdout]   --> src/ui/mod.rs:22:5
[INFO] [stdout]    |
[INFO] [stdout] 22 | use tokio::sync::RwLock;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::core::EventBus`
[INFO] [stdout]   --> src/ui/mod.rs:27:5
[INFO] [stdout]    |
[INFO] [stdout] 27 | use crate::core::EventBus;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: falling back to `f32` as the trait bound `f32: From<f64>` is not satisfied
[INFO] [stdout]    --> src/ui/panels.rs:152:36
[INFO] [stdout]     |
[INFO] [stdout] 152 | ...                   .width(1.5);
[INFO] [stdout]     |                              ^^^ help: explicitly specify the type as `f32`: `1.5_f32`
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
[INFO] [stdout]     = note: for more information, see issue #154024 <https://github.com/rust-lang/rust/issues/154024>
[INFO] [stdout]     = note: `#[warn(float_literal_f32_fallback)]` (part of `#[warn(future_incompatible)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: falling back to `f32` as the trait bound `f32: From<f64>` is not satisfied
[INFO] [stdout]    --> src/ui/panels.rs:270:27
[INFO] [stdout]     |
[INFO] [stdout] 270 |                     .fill(0.0);
[INFO] [stdout]     |                           ^^^ help: explicitly specify the type as `f32`: `0.0_f32`
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
[INFO] [stdout]     = note: for more information, see issue #154024 <https://github.com/rust-lang/rust/issues/154024>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: falling back to `f32` as the trait bound `f32: From<f64>` is not satisfied
[INFO] [stdout]   --> src/ui/widgets.rs:83:31
[INFO] [stdout]    |
[INFO] [stdout] 83 |             egui::Stroke::new(8.0, egui::Color32::from_gray(60)),
[INFO] [stdout]    |                               ^^^ help: explicitly specify the type as `f32`: `8.0_f32`
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
[INFO] [stdout]    = note: for more information, see issue #154024 <https://github.com/rust-lang/rust/issues/154024>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: falling back to `f32` as the trait bound `f32: From<f64>` is not satisfied
[INFO] [stdout]    --> src/ui/widgets.rs:105:62
[INFO] [stdout]     |
[INFO] [stdout] 105 |             painter.line_segment([p1, p2], egui::Stroke::new(8.0, color));
[INFO] [stdout]     |                                                              ^^^ help: explicitly specify the type as `f32`: `8.0_f32`
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
[INFO] [stdout]     = note: for more information, see issue #154024 <https://github.com/rust-lang/rust/issues/154024>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: falling back to `f32` as the trait bound `f32: From<f64>` is not satisfied
[INFO] [stdout]    --> src/ui/widgets.rs:184:54
[INFO] [stdout]     |
[INFO] [stdout] 184 |     painter.rect_stroke(rect, 2.0, egui::Stroke::new(1.0, egui::Color32::from_gray(100)));
[INFO] [stdout]     |                                                      ^^^ help: explicitly specify the type as `f32`: `1.0_f32`
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
[INFO] [stdout]     = note: for more information, see issue #154024 <https://github.com/rust-lang/rust/issues/154024>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: falling back to `f32` as the trait bound `f32: From<f64>` is not satisfied
[INFO] [stdout]    --> src/ui/widgets.rs:213:27
[INFO] [stdout]     |
[INFO] [stdout] 213 |         egui::Stroke::new(1.0, egui::Color32::LIGHT_BLUE),
[INFO] [stdout]     |                           ^^^ help: explicitly specify the type as `f32`: `1.0_f32`
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
[INFO] [stdout]     = note: for more information, see issue #154024 <https://github.com/rust-lang/rust/issues/154024>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: falling back to `f32` as the trait bound `f32: From<f64>` is not satisfied
[INFO] [stdout]    --> src/ui/widgets.rs:235:35
[INFO] [stdout]     |
[INFO] [stdout] 235 |         .stroke(egui::Stroke::new(1.0, egui::Color32::from_gray(100)))
[INFO] [stdout]     |                                   ^^^ help: explicitly specify the type as `f32`: `1.0_f32`
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
[INFO] [stdout]     = note: for more information, see issue #154024 <https://github.com/rust-lang/rust/issues/154024>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: falling back to `f32` as the trait bound `f32: From<f64>` is not satisfied
[INFO] [stdout]   --> src/ui/plots.rs:33:57
[INFO] [stdout]    |
[INFO] [stdout] 33 |         let line = Line::new(points).color(color).width(1.5);
[INFO] [stdout]    |                                                         ^^^ help: explicitly specify the type as `f32`: `1.5_f32`
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
[INFO] [stdout]    = note: for more information, see issue #154024 <https://github.com/rust-lang/rust/issues/154024>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: falling back to `f32` as the trait bound `f32: From<f64>` is not satisfied
[INFO] [stdout]   --> src/ui/plots.rs:61:19
[INFO] [stdout]    |
[INFO] [stdout] 61 |             .fill(0.0);
[INFO] [stdout]    |                   ^^^ help: explicitly specify the type as `f32`: `0.0_f32`
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
[INFO] [stdout]    = note: for more information, see issue #154024 <https://github.com/rust-lang/rust/issues/154024>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: falling back to `f32` as the trait bound `f32: From<f64>` is not satisfied
[INFO] [stdout]    --> src/ui/plots.rs:125:31
[INFO] [stdout]     |
[INFO] [stdout] 125 |             egui::Stroke::new(1.0, egui::Color32::from_gray(60)),
[INFO] [stdout]     |                               ^^^ help: explicitly specify the type as `f32`: `1.0_f32`
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
[INFO] [stdout]     = note: for more information, see issue #154024 <https://github.com/rust-lang/rust/issues/154024>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: falling back to `f32` as the trait bound `f32: From<f64>` is not satisfied
[INFO] [stdout]    --> src/ui/plots.rs:133:63
[INFO] [stdout]     |
[INFO] [stdout] 133 |         painter.line_segment([center, end], egui::Stroke::new(1.0, egui::Color32::from_gray(60)));
[INFO] [stdout]     |                                                               ^^^ help: explicitly specify the type as `f32`: `1.0_f32`
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
[INFO] [stdout]     = note: for more information, see issue #154024 <https://github.com/rust-lang/rust/issues/154024>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: falling back to `f32` as the trait bound `f32: From<f64>` is not satisfied
[INFO] [stdout]    --> src/ui/plots.rs:154:31
[INFO] [stdout]     |
[INFO] [stdout] 154 |             egui::Stroke::new(2.0, egui::Color32::from_rgb(100, 200, 255)),
[INFO] [stdout]     |                               ^^^ help: explicitly specify the type as `f32`: `2.0_f32`
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
[INFO] [stdout]     = note: for more information, see issue #154024 <https://github.com/rust-lang/rust/issues/154024>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: falling back to `f32` as the trait bound `f32: From<f64>` is not satisfied
[INFO] [stdout]    --> src/ui/plots.rs:249:24
[INFO] [stdout]     |
[INFO] [stdout] 249 |                 .width(1.5);
[INFO] [stdout]     |                        ^^^ help: explicitly specify the type as `f32`: `1.5_f32`
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
[INFO] [stdout]     = note: for more information, see issue #154024 <https://github.com/rust-lang/rust/issues/154024>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Digest`
[INFO] [stdout]  --> src/security/keystore.rs:9:20
[INFO] [stdout]   |
[INFO] [stdout] 9 | use sha2::{Sha256, Digest};
[INFO] [stdout]   |                    ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `port_name`
[INFO] [stdout]   --> src/sensors/thermal.rs:24:26
[INFO] [stdout]    |
[INFO] [stdout] 24 |     pub fn new(id: &str, port_name: &str) -> Self {
[INFO] [stdout]    |                          ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_port_name`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable `match_m1` is assigned to, but never used
[INFO] [stdout]    --> src/analysis/entropy.rs:196:21
[INFO] [stdout]     |
[INFO] [stdout] 196 |                 let mut match_m1 = true;
[INFO] [stdout]     |                     ^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: consider using `_match_m1` instead
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: value assigned to `match_m1` is never read
[INFO] [stdout]    --> src/analysis/entropy.rs:202:25
[INFO] [stdout]     |
[INFO] [stdout] 202 |                         match_m1 = false;
[INFO] [stdout]     |                         ^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = help: maybe it is overwritten before being read?
[INFO] [stdout]     = note: `#[warn(unused_assignments)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `sample_rate`
[INFO] [stdout]    --> src/analysis/signal.rs:296:45
[INFO] [stdout]     |
[INFO] [stdout] 296 |     pub fn spectrogram(&self, data: &[f64], sample_rate: f64, window_size: usize, hop_size: usize) -> Vec<Vec<f64>> {
[INFO] [stdout]     |                                             ^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_sample_rate`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/analysis/statistics.rs:245:13
[INFO] [stdout]     |
[INFO] [stdout] 245 |         let mut result = x.powf(a) * (1.0 - x).powf(b) / (a * self.beta(a, b));
[INFO] [stdout]     |             ----^^^^^^
[INFO] [stdout]     |             |
[INFO] [stdout]     |             help: remove this `mut`
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_mut)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/analysis/complexity.rs:298:13
[INFO] [stdout]     |
[INFO] [stdout] 298 |         let mut vertical_lines: Vec<usize> = Vec::new();
[INFO] [stdout]     |             ----^^^^^^^^^^^^^^
[INFO] [stdout]     |             |
[INFO] [stdout]     |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/analysis/complexity.rs:303:17
[INFO] [stdout]     |
[INFO] [stdout] 303 |             let mut vert_length = 0;
[INFO] [stdout]     |                 ----^^^^^^^^^^^
[INFO] [stdout]     |                 |
[INFO] [stdout]     |                 help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `vertical_lines`
[INFO] [stdout]    --> src/analysis/complexity.rs:298:13
[INFO] [stdout]     |
[INFO] [stdout] 298 |         let mut vertical_lines: Vec<usize> = Vec::new();
[INFO] [stdout]     |             ^^^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_vertical_lines`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `vert_length`
[INFO] [stdout]    --> src/analysis/complexity.rs:303:17
[INFO] [stdout]     |
[INFO] [stdout] 303 |             let mut vert_length = 0;
[INFO] [stdout]     |                 ^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_vert_length`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `signal_features`
[INFO] [stdout]    --> src/analysis/mod.rs:110:13
[INFO] [stdout]     |
[INFO] [stdout] 110 |         let signal_features = self.signal_processor.extract_features(&reading.data, reading.sample_rate);
[INFO] [stdout]     |             ^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_signal_features`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `patterns`
[INFO] [stdout]    --> src/analysis/mod.rs:113:13
[INFO] [stdout]     |
[INFO] [stdout] 113 |         let patterns = self.pattern_detector.find_patterns(&reading.data);
[INFO] [stdout]     |             ^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_patterns`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `client_id`
[INFO] [stdout]    --> src/streaming/websocket.rs:108:40
[INFO] [stdout]     |
[INFO] [stdout] 108 |     pub async fn send_to_client(&self, client_id: &str, message: &str) -> Result<()> {
[INFO] [stdout]     |                                        ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_client_id`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: falling back to `f32` as the trait bound `f32: From<f64>` is not satisfied
[INFO] [stdout]    --> src/ui/panels.rs:152:36
[INFO] [stdout]     |
[INFO] [stdout] 152 | ...                   .width(1.5);
[INFO] [stdout]     |                              ^^^ help: explicitly specify the type as `f32`: `1.5_f32`
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
[INFO] [stdout]     = note: for more information, see issue #154024 <https://github.com/rust-lang/rust/issues/154024>
[INFO] [stdout]     = note: `#[warn(float_literal_f32_fallback)]` (part of `#[warn(future_incompatible)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: falling back to `f32` as the trait bound `f32: From<f64>` is not satisfied
[INFO] [stdout]    --> src/ui/panels.rs:270:27
[INFO] [stdout]     |
[INFO] [stdout] 270 |                     .fill(0.0);
[INFO] [stdout]     |                           ^^^ help: explicitly specify the type as `f32`: `0.0_f32`
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
[INFO] [stdout]     = note: for more information, see issue #154024 <https://github.com/rust-lang/rust/issues/154024>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: falling back to `f32` as the trait bound `f32: From<f64>` is not satisfied
[INFO] [stdout]   --> src/ui/widgets.rs:83:31
[INFO] [stdout]    |
[INFO] [stdout] 83 |             egui::Stroke::new(8.0, egui::Color32::from_gray(60)),
[INFO] [stdout]    |                               ^^^ help: explicitly specify the type as `f32`: `8.0_f32`
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
[INFO] [stdout]    = note: for more information, see issue #154024 <https://github.com/rust-lang/rust/issues/154024>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: falling back to `f32` as the trait bound `f32: From<f64>` is not satisfied
[INFO] [stdout]    --> src/ui/widgets.rs:105:62
[INFO] [stdout]     |
[INFO] [stdout] 105 |             painter.line_segment([p1, p2], egui::Stroke::new(8.0, color));
[INFO] [stdout]     |                                                              ^^^ help: explicitly specify the type as `f32`: `8.0_f32`
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
[INFO] [stdout]     = note: for more information, see issue #154024 <https://github.com/rust-lang/rust/issues/154024>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: falling back to `f32` as the trait bound `f32: From<f64>` is not satisfied
[INFO] [stdout]    --> src/ui/widgets.rs:184:54
[INFO] [stdout]     |
[INFO] [stdout] 184 |     painter.rect_stroke(rect, 2.0, egui::Stroke::new(1.0, egui::Color32::from_gray(100)));
[INFO] [stdout]     |                                                      ^^^ help: explicitly specify the type as `f32`: `1.0_f32`
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
[INFO] [stdout]     = note: for more information, see issue #154024 <https://github.com/rust-lang/rust/issues/154024>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: falling back to `f32` as the trait bound `f32: From<f64>` is not satisfied
[INFO] [stdout]    --> src/ui/widgets.rs:213:27
[INFO] [stdout]     |
[INFO] [stdout] 213 |         egui::Stroke::new(1.0, egui::Color32::LIGHT_BLUE),
[INFO] [stdout]     |                           ^^^ help: explicitly specify the type as `f32`: `1.0_f32`
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
[INFO] [stdout]     = note: for more information, see issue #154024 <https://github.com/rust-lang/rust/issues/154024>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: falling back to `f32` as the trait bound `f32: From<f64>` is not satisfied
[INFO] [stdout]    --> src/ui/widgets.rs:235:35
[INFO] [stdout]     |
[INFO] [stdout] 235 |         .stroke(egui::Stroke::new(1.0, egui::Color32::from_gray(100)))
[INFO] [stdout]     |                                   ^^^ help: explicitly specify the type as `f32`: `1.0_f32`
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
[INFO] [stdout]     = note: for more information, see issue #154024 <https://github.com/rust-lang/rust/issues/154024>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: falling back to `f32` as the trait bound `f32: From<f64>` is not satisfied
[INFO] [stdout]   --> src/ui/plots.rs:33:57
[INFO] [stdout]    |
[INFO] [stdout] 33 |         let line = Line::new(points).color(color).width(1.5);
[INFO] [stdout]    |                                                         ^^^ help: explicitly specify the type as `f32`: `1.5_f32`
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
[INFO] [stdout]    = note: for more information, see issue #154024 <https://github.com/rust-lang/rust/issues/154024>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: falling back to `f32` as the trait bound `f32: From<f64>` is not satisfied
[INFO] [stdout]   --> src/ui/plots.rs:61:19
[INFO] [stdout]    |
[INFO] [stdout] 61 |             .fill(0.0);
[INFO] [stdout]    |                   ^^^ help: explicitly specify the type as `f32`: `0.0_f32`
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
[INFO] [stdout]    = note: for more information, see issue #154024 <https://github.com/rust-lang/rust/issues/154024>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: falling back to `f32` as the trait bound `f32: From<f64>` is not satisfied
[INFO] [stdout]    --> src/ui/plots.rs:125:31
[INFO] [stdout]     |
[INFO] [stdout] 125 |             egui::Stroke::new(1.0, egui::Color32::from_gray(60)),
[INFO] [stdout]     |                               ^^^ help: explicitly specify the type as `f32`: `1.0_f32`
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
[INFO] [stdout]     = note: for more information, see issue #154024 <https://github.com/rust-lang/rust/issues/154024>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: falling back to `f32` as the trait bound `f32: From<f64>` is not satisfied
[INFO] [stdout]    --> src/ui/plots.rs:133:63
[INFO] [stdout]     |
[INFO] [stdout] 133 |         painter.line_segment([center, end], egui::Stroke::new(1.0, egui::Color32::from_gray(60)));
[INFO] [stdout]     |                                                               ^^^ help: explicitly specify the type as `f32`: `1.0_f32`
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
[INFO] [stdout]     = note: for more information, see issue #154024 <https://github.com/rust-lang/rust/issues/154024>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: falling back to `f32` as the trait bound `f32: From<f64>` is not satisfied
[INFO] [stdout]    --> src/ui/plots.rs:154:31
[INFO] [stdout]     |
[INFO] [stdout] 154 |             egui::Stroke::new(2.0, egui::Color32::from_rgb(100, 200, 255)),
[INFO] [stdout]     |                               ^^^ help: explicitly specify the type as `f32`: `2.0_f32`
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
[INFO] [stdout]     = note: for more information, see issue #154024 <https://github.com/rust-lang/rust/issues/154024>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: falling back to `f32` as the trait bound `f32: From<f64>` is not satisfied
[INFO] [stdout]    --> src/ui/plots.rs:249:24
[INFO] [stdout]     |
[INFO] [stdout] 249 |                 .width(1.5);
[INFO] [stdout]     |                        ^^^ help: explicitly specify the type as `f32`: `1.5_f32`
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
[INFO] [stdout]     = note: for more information, see issue #154024 <https://github.com/rust-lang/rust/issues/154024>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Digest`
[INFO] [stdout]  --> src/security/keystore.rs:9:20
[INFO] [stdout]   |
[INFO] [stdout] 9 | use sha2::{Sha256, Digest};
[INFO] [stdout]   |                    ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `port_name`
[INFO] [stdout]   --> src/sensors/thermal.rs:24:26
[INFO] [stdout]    |
[INFO] [stdout] 24 |     pub fn new(id: &str, port_name: &str) -> Self {
[INFO] [stdout]    |                          ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_port_name`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `sid`
[INFO] [stdout]    --> src/db/mod.rs:212:31
[INFO] [stdout]     |
[INFO] [stdout] 212 |         let sql = if let Some(sid) = sensor_id {
[INFO] [stdout]     |                               ^^^ help: if this is intentional, prefix it with an underscore: `_sid`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `cc`
[INFO] [stdout]   --> src/ui/app.rs:42:16
[INFO] [stdout]    |
[INFO] [stdout] 42 |     pub fn new(cc: &eframe::CreationContext<'_>, config: Config) -> Self {
[INFO] [stdout]    |                ^^ help: if this is intentional, prefix it with an underscore: `_cc`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `elapsed`
[INFO] [stdout]    --> src/ui/app.rs:185:13
[INFO] [stdout]     |
[INFO] [stdout] 185 |         let elapsed = self.last_update.elapsed().as_secs_f64();
[INFO] [stdout]     |             ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_elapsed`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `id`
[INFO] [stdout]    --> src/ui/plots.rs:110:5
[INFO] [stdout]     |
[INFO] [stdout] 110 |     id: &str,
[INFO] [stdout]     |     ^^ help: if this is intentional, prefix it with an underscore: `_id`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unreachable pattern
[INFO] [stdout]    --> src/ui/theme.rs:131:60
[INFO] [stdout]     |
[INFO] [stdout] 131 |         SensorType::Accelerometer | SensorType::Geophone | SensorType::Accelerometer => GlowBarnColors::SEISMIC,
[INFO] [stdout]     |         -------------------------                          ^^^^^^^^^^^^^^^^^^^^^^^^^ no value can reach this
[INFO] [stdout]     |         |
[INFO] [stdout]     |         matches all the relevant values
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unreachable_patterns)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/ui/mod.rs:150:9
[INFO] [stdout]     |
[INFO] [stdout] 150 |     let mut fonts = egui::FontDefinitions::default();
[INFO] [stdout]     |         ----^^^^^
[INFO] [stdout]     |         |
[INFO] [stdout]     |         help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: useless conversion to the same type: `std::string::String`
[INFO] [stdout]    --> src/streaming/websocket.rs:162:50
[INFO] [stdout]     |
[INFO] [stdout] 162 |     if let Err(e) = ws_sender.send(Message::Text(welcome.to_string().into())).await {
[INFO] [stdout]     |                                                  ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: you can instead use the fully-qualified path `<std::string::String as Into<std::string::String>::into(val) to avoid triggering this lint
[INFO] [stdout]     = note: `#[warn(self_type_conversion)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: useless conversion to the same type: `std::string::String`
[INFO] [stdout]    --> src/streaming/websocket.rs:181:78
[INFO] [stdout]     |
[INFO] [stdout] 181 | ...                   let _ = ws_sender.send(Message::Text(pong.to_string().into())).await;
[INFO] [stdout]     |                                                            ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: you can instead use the fully-qualified path `<std::string::String as Into<std::string::String>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: useless conversion to the same type: `std::string::String`
[INFO] [stdout]    --> src/streaming/websocket.rs:228:70
[INFO] [stdout]     |
[INFO] [stdout] 228 |                         if let Err(e) = ws_sender.send(Message::Text(wrapper.to_string().into())).await {
[INFO] [stdout]     |                                                                      ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: you can instead use the fully-qualified path `<std::string::String as Into<std::string::String>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: useless conversion to the same type: `std::string::String`
[INFO] [stdout]    --> src/streaming/websocket.rs:238:70
[INFO] [stdout]     |
[INFO] [stdout] 238 |                         if let Err(e) = ws_sender.send(Message::Text(wrapper.to_string().into())).await {
[INFO] [stdout]     |                                                                      ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: you can instead use the fully-qualified path `<std::string::String as Into<std::string::String>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: useless conversion to the same type: `std::string::String`
[INFO] [stdout]    --> src/streaming/websocket.rs:248:62
[INFO] [stdout]     |
[INFO] [stdout] 248 |                         let _ = ws_sender.send(Message::Text(wrapper.to_string().into())).await;
[INFO] [stdout]     |                                                              ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: you can instead use the fully-qualified path `<std::string::String as Into<std::string::String>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/core/mod.rs:23:5
[INFO] [stdout]    |
[INFO] [stdout] 23 |     pub running: bool,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout] note: the lint level is defined here
[INFO] [stdout]   --> src/lib.rs:37:9
[INFO] [stdout]    |
[INFO] [stdout] 37 | #![warn(missing_docs)]
[INFO] [stdout]    |         ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/core/mod.rs:24:5
[INFO] [stdout]    |
[INFO] [stdout] 24 |     pub sensors_active: usize,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/core/mod.rs:25:5
[INFO] [stdout]    |
[INFO] [stdout] 25 |     pub total_readings: u64,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/core/mod.rs:26:5
[INFO] [stdout]    |
[INFO] [stdout] 26 |     pub total_detections: u64,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/core/mod.rs:27:5
[INFO] [stdout]    |
[INFO] [stdout] 27 |     pub uptime_seconds: u64,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/core/mod.rs:28:5
[INFO] [stdout]    |
[INFO] [stdout] 28 |     pub cpu_usage: f32,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/core/mod.rs:29:5
[INFO] [stdout]    |
[INFO] [stdout] 29 |     pub memory_usage: f32,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/core/mod.rs:30:5
[INFO] [stdout]    |
[INFO] [stdout] 30 |     pub last_detection: Option<DateTime<Utc>>,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/core/engine.rs:18:5
[INFO] [stdout]    |
[INFO] [stdout] 18 |     pub config: Arc<Config>,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for an associated function
[INFO] [stdout]   --> src/core/engine.rs:24:5
[INFO] [stdout]    |
[INFO] [stdout] 24 |     pub async fn new(config: Config) -> Result<Self> {
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a method
[INFO] [stdout]   --> src/core/engine.rs:34:5
[INFO] [stdout]    |
[INFO] [stdout] 34 |     pub async fn start(&mut self) -> Result<()> {
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a method
[INFO] [stdout]   --> src/core/engine.rs:47:5
[INFO] [stdout]    |
[INFO] [stdout] 47 |     pub async fn stop(&mut self) -> Result<()> {
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a method
[INFO] [stdout]   --> src/core/engine.rs:59:5
[INFO] [stdout]    |
[INFO] [stdout] 59 |     pub async fn state(&self) -> SystemState {
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a method
[INFO] [stdout]   --> src/core/engine.rs:63:5
[INFO] [stdout]    |
[INFO] [stdout] 63 |     pub fn uptime(&self) -> u64 {
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct
[INFO] [stdout]   --> src/core/scheduler.rs:23:1
[INFO] [stdout]    |
[INFO] [stdout] 23 | pub struct Scheduler {
[INFO] [stdout]    | ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for an associated function
[INFO] [stdout]   --> src/core/scheduler.rs:28:5
[INFO] [stdout]    |
[INFO] [stdout] 28 |     pub fn new() -> Self {
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a method
[INFO] [stdout]   --> src/core/scheduler.rs:34:5
[INFO] [stdout]    |
[INFO] [stdout] 34 | /     pub async fn add_task<F>(&self, name: &str, interval: Duration, task: F)
[INFO] [stdout] 35 | |     where
[INFO] [stdout] 36 | |         F: Fn() + Send + Sync + 'static,
[INFO] [stdout]    | |________________________________________^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a method
[INFO] [stdout]   --> src/core/scheduler.rs:51:5
[INFO] [stdout]    |
[INFO] [stdout] 51 |     pub async fn remove_task(&self, name: &str) {
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a method
[INFO] [stdout]   --> src/core/scheduler.rs:56:5
[INFO] [stdout]    |
[INFO] [stdout] 56 |     pub async fn enable_task(&self, name: &str, enabled: bool) {
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]   --> src/core/event_bus.rs:18:5
[INFO] [stdout]    |
[INFO] [stdout] 18 |     SensorReading,
[INFO] [stdout]    |     ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]   --> src/core/event_bus.rs:19:5
[INFO] [stdout]    |
[INFO] [stdout] 19 |     Detection,
[INFO] [stdout]    |     ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]   --> src/core/event_bus.rs:20:5
[INFO] [stdout]    |
[INFO] [stdout] 20 |     Alert,
[INFO] [stdout]    |     ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]   --> src/core/event_bus.rs:21:5
[INFO] [stdout]    |
[INFO] [stdout] 21 |     SystemStatus,
[INFO] [stdout]    |     ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]   --> src/core/event_bus.rs:22:5
[INFO] [stdout]    |
[INFO] [stdout] 22 |     Error,
[INFO] [stdout]    |     ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/core/event_bus.rs:28:5
[INFO] [stdout]    |
[INFO] [stdout] 28 |     pub id: u64,
[INFO] [stdout]    |     ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/core/event_bus.rs:29:5
[INFO] [stdout]    |
[INFO] [stdout] 29 |     pub event_type: EventType,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/core/event_bus.rs:30:5
[INFO] [stdout]    |
[INFO] [stdout] 30 |     pub timestamp: DateTime<Utc>,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/core/event_bus.rs:31:5
[INFO] [stdout]    |
[INFO] [stdout] 31 |     pub payload: EventPayload,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for an associated function
[INFO] [stdout]   --> src/core/event_bus.rs:52:5
[INFO] [stdout]    |
[INFO] [stdout] 52 |     pub fn new(capacity: usize) -> Self {
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a method
[INFO] [stdout]   --> src/core/event_bus.rs:65:5
[INFO] [stdout]    |
[INFO] [stdout] 65 |     pub fn publish_reading(&self, reading: SensorReading) {
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a method
[INFO] [stdout]   --> src/core/event_bus.rs:70:5
[INFO] [stdout]    |
[INFO] [stdout] 70 |     pub fn publish_detection(&self, detection: Detection) {
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a method
[INFO] [stdout]   --> src/core/event_bus.rs:75:5
[INFO] [stdout]    |
[INFO] [stdout] 75 |     pub fn publish_alert(&self, level: &str, message: &str) {
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a method
[INFO] [stdout]   --> src/core/event_bus.rs:85:5
[INFO] [stdout]    |
[INFO] [stdout] 85 |     pub fn publish_error(&self, code: u32, message: &str) {
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a method
[INFO] [stdout]    --> src/core/event_bus.rs:106:5
[INFO] [stdout]     |
[INFO] [stdout] 106 |     pub fn subscribe_readings(&self) -> broadcast::Receiver<SensorReading> {
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a method
[INFO] [stdout]    --> src/core/event_bus.rs:110:5
[INFO] [stdout]     |
[INFO] [stdout] 110 |     pub fn subscribe_detections(&self) -> broadcast::Receiver<Detection> {
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a method
[INFO] [stdout]    --> src/core/event_bus.rs:114:5
[INFO] [stdout]     |
[INFO] [stdout] 114 |     pub fn subscribe_events(&self) -> broadcast::Receiver<Event> {
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for an associated function
[INFO] [stdout]   --> src/sensors/manager.rs:29:5
[INFO] [stdout]    |
[INFO] [stdout] 29 |     pub async fn new(config: Arc<Config>, event_bus: Arc<EventBus>, demo_mode: bool) -> Result<Self> {
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a method
[INFO] [stdout]   --> src/sensors/manager.rs:73:5
[INFO] [stdout]    |
[INFO] [stdout] 73 |     pub async fn add_sensor(&self, sensor: Box<dyn Sensor>) -> Result<()> {
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a method
[INFO] [stdout]   --> src/sensors/manager.rs:98:5
[INFO] [stdout]    |
[INFO] [stdout] 98 |     pub async fn remove_sensor(&self, id: &str) -> Result<()> {
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a method
[INFO] [stdout]    --> src/sensors/manager.rs:111:5
[INFO] [stdout]     |
[INFO] [stdout] 111 |     pub async fn active_count(&self) -> usize {
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a method
[INFO] [stdout]    --> src/sensors/manager.rs:116:5
[INFO] [stdout]     |
[INFO] [stdout] 116 |     pub async fn get_health(&self, id: &str) -> Option<SensorHealth> {
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a method
[INFO] [stdout]    --> src/sensors/manager.rs:121:5
[INFO] [stdout]     |
[INFO] [stdout] 121 |     pub async fn get_all_health(&self) -> Vec<SensorHealth> {
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a method
[INFO] [stdout]    --> src/sensors/manager.rs:126:5
[INFO] [stdout]     |
[INFO] [stdout] 126 |     pub async fn run(&self, mut shutdown: broadcast::Receiver<()>) -> Result<()> {
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]   --> src/sensors/traits.rs:18:5
[INFO] [stdout]    |
[INFO] [stdout] 18 |     ThermalImager,      // FLIR, SEEK, MLX90640
[INFO] [stdout]    |     ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]   --> src/sensors/traits.rs:19:5
[INFO] [stdout]    |
[INFO] [stdout] 19 |     ThermalArray,       // AMG8833
[INFO] [stdout]    |     ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]   --> src/sensors/traits.rs:20:5
[INFO] [stdout]    |
[INFO] [stdout] 20 |     Thermistor,         // Point temperature
[INFO] [stdout]    |     ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]   --> src/sensors/traits.rs:21:5
[INFO] [stdout]    |
[INFO] [stdout] 21 |     Pyrometer,          // Non-contact IR
[INFO] [stdout]    |     ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]   --> src/sensors/traits.rs:24:5
[INFO] [stdout]    |
[INFO] [stdout] 24 |     Geophone,           // Velocity sensor
[INFO] [stdout]    |     ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]   --> src/sensors/traits.rs:25:5
[INFO] [stdout]    |
[INFO] [stdout] 25 |     Accelerometer,      // MEMS (ADXL, MPU, LIS)
[INFO] [stdout]    |     ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]   --> src/sensors/traits.rs:26:5
[INFO] [stdout]    |
[INFO] [stdout] 26 |     Seismograph,        // Raspberry Shake
[INFO] [stdout]    |     ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]   --> src/sensors/traits.rs:27:5
[INFO] [stdout]    |
[INFO] [stdout] 27 |     Piezoelectric,      // Contact vibration
[INFO] [stdout]    |     ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]   --> src/sensors/traits.rs:30:5
[INFO] [stdout]    |
[INFO] [stdout] 30 |     EMFProbe,           // Magnetic field
[INFO] [stdout]    |     ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]   --> src/sensors/traits.rs:31:5
[INFO] [stdout]    |
[INFO] [stdout] 31 |     TriField,           // Multi-axis EMF
[INFO] [stdout]    |     ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]   --> src/sensors/traits.rs:32:5
[INFO] [stdout]    |
[INFO] [stdout] 32 |     GaussMeter,         // Precision magnetic
[INFO] [stdout]    |     ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]   --> src/sensors/traits.rs:33:5
[INFO] [stdout]    |
[INFO] [stdout] 33 |     FluxGate,           // Vector magnetometer
[INFO] [stdout]    |     ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]   --> src/sensors/traits.rs:34:5
[INFO] [stdout]    |
[INFO] [stdout] 34 |     SQUIDMagnetometer,  // Ultra-sensitive
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]   --> src/sensors/traits.rs:37:5
[INFO] [stdout]    |
[INFO] [stdout] 37 |     Ultrasonic,         // >20kHz
[INFO] [stdout]    |     ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]   --> src/sensors/traits.rs:38:5
[INFO] [stdout]    |
[INFO] [stdout] 38 |     Infrasound,         // <20Hz
[INFO] [stdout]    |     ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]   --> src/sensors/traits.rs:39:5
[INFO] [stdout]    |
[INFO] [stdout] 39 |     FullSpectrum,       // 0.1Hz - 100kHz
[INFO] [stdout]    |     ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]   --> src/sensors/traits.rs:40:5
[INFO] [stdout]    |
[INFO] [stdout] 40 |     ParabolicMic,       // Directional
[INFO] [stdout]    |     ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]   --> src/sensors/traits.rs:41:5
[INFO] [stdout]    |
[INFO] [stdout] 41 |     ContactMic,         // Structure-borne
[INFO] [stdout]    |     ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]   --> src/sensors/traits.rs:42:5
[INFO] [stdout]    |
[INFO] [stdout] 42 |     MicArray,           // Beamforming array
[INFO] [stdout]    |     ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]   --> src/sensors/traits.rs:45:5
[INFO] [stdout]    |
[INFO] [stdout] 45 |     Barometer,          // Pressure
[INFO] [stdout]    |     ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]   --> src/sensors/traits.rs:46:5
[INFO] [stdout]    |
[INFO] [stdout] 46 |     Hygrometer,         // Humidity
[INFO] [stdout]    |     ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]   --> src/sensors/traits.rs:47:5
[INFO] [stdout]    |
[INFO] [stdout] 47 |     Anemometer,         // Air flow
[INFO] [stdout]    |     ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]   --> src/sensors/traits.rs:48:5
[INFO] [stdout]    |
[INFO] [stdout] 48 |     IonCounter,         // Air ionization
[INFO] [stdout]    |     ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]   --> src/sensors/traits.rs:49:5
[INFO] [stdout]    |
[INFO] [stdout] 49 |     VOCSensor,          // Volatile organics
[INFO] [stdout]    |     ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]   --> src/sensors/traits.rs:50:5
[INFO] [stdout]    |
[INFO] [stdout] 50 |     ParticulateSensor,  // PM2.5/PM10
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]   --> src/sensors/traits.rs:53:5
[INFO] [stdout]    |
[INFO] [stdout] 53 |     GeigerCounter,      // Alpha/Beta/Gamma
[INFO] [stdout]    |     ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]   --> src/sensors/traits.rs:54:5
[INFO] [stdout]    |
[INFO] [stdout] 54 |     Scintillator,       // Gamma spectroscopy
[INFO] [stdout]    |     ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]   --> src/sensors/traits.rs:55:5
[INFO] [stdout]    |
[INFO] [stdout] 55 |     NeutronDetector,    // Neutron flux
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]   --> src/sensors/traits.rs:56:5
[INFO] [stdout]    |
[INFO] [stdout] 56 |     DosimeterArray,     // Spatial radiation
[INFO] [stdout]    |     ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]   --> src/sensors/traits.rs:59:5
[INFO] [stdout]    |
[INFO] [stdout] 59 |     LightMeter,         // Luminosity
[INFO] [stdout]    |     ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]   --> src/sensors/traits.rs:60:5
[INFO] [stdout]    |
[INFO] [stdout] 60 |     UVSensor,           // UV A/B/C
[INFO] [stdout]    |     ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]   --> src/sensors/traits.rs:61:5
[INFO] [stdout]    |
[INFO] [stdout] 61 |     IRDetector,         // Passive IR
[INFO] [stdout]    |     ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]   --> src/sensors/traits.rs:62:5
[INFO] [stdout]    |
[INFO] [stdout] 62 |     Spectrometer,       // Full spectrum
[INFO] [stdout]    |     ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]   --> src/sensors/traits.rs:63:5
[INFO] [stdout]    |
[INFO] [stdout] 63 |     LiDAR,              // Distance/mapping
[INFO] [stdout]    |     ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]   --> src/sensors/traits.rs:64:5
[INFO] [stdout]    |
[INFO] [stdout] 64 |     LaserGrid,          // Interruption detection
[INFO] [stdout]    |     ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]   --> src/sensors/traits.rs:65:5
[INFO] [stdout]    |
[INFO] [stdout] 65 |     NightVision,        // Enhanced imaging
[INFO] [stdout]    |     ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]   --> src/sensors/traits.rs:68:5
[INFO] [stdout]    |
[INFO] [stdout] 68 |     SDRReceiver,        // Software-defined radio
[INFO] [stdout]    |     ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]   --> src/sensors/traits.rs:69:5
[INFO] [stdout]    |
[INFO] [stdout] 69 |     SpectrumAnalyzer,   // RF spectrum
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]   --> src/sensors/traits.rs:70:5
[INFO] [stdout]    |
[INFO] [stdout] 70 |     WiFiScanner,        // 2.4/5GHz
[INFO] [stdout]    |     ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]   --> src/sensors/traits.rs:71:5
[INFO] [stdout]    |
[INFO] [stdout] 71 |     EMIDetector,        // Interference
[INFO] [stdout]    |     ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]   --> src/sensors/traits.rs:74:5
[INFO] [stdout]    |
[INFO] [stdout] 74 |     CapacitiveSensor,   // Proximity
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]   --> src/sensors/traits.rs:75:5
[INFO] [stdout]    |
[INFO] [stdout] 75 |     StaticMeter,        // Electrostatic
[INFO] [stdout]    |     ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]   --> src/sensors/traits.rs:76:5
[INFO] [stdout]    |
[INFO] [stdout] 76 |     FieldMill,          // Atmospheric electric
[INFO] [stdout]    |     ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]   --> src/sensors/traits.rs:77:5
[INFO] [stdout]    |
[INFO] [stdout] 77 |     CurrentClamp,       // AC/DC current
[INFO] [stdout]    |     ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]   --> src/sensors/traits.rs:80:5
[INFO] [stdout]    |
[INFO] [stdout] 80 |     IonChamber,         // Air ionization
[INFO] [stdout]    |     ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]   --> src/sensors/traits.rs:81:5
[INFO] [stdout]    |
[INFO] [stdout] 81 |     CoronaDetector,     // Electric discharge
[INFO] [stdout]    |     ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]   --> src/sensors/traits.rs:82:5
[INFO] [stdout]    |
[INFO] [stdout] 82 |     PlasmaProbe,        // Plasma detection
[INFO] [stdout]    |     ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]   --> src/sensors/traits.rs:85:5
[INFO] [stdout]    |
[INFO] [stdout] 85 |     QRNG,               // Quantum RNG
[INFO] [stdout]    |     ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]   --> src/sensors/traits.rs:86:5
[INFO] [stdout]    |
[INFO] [stdout] 86 |     ThermalNoise,       // Johnson noise
[INFO] [stdout]    |     ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]   --> src/sensors/traits.rs:87:5
[INFO] [stdout]    |
[INFO] [stdout] 87 |     ShotNoise,          // Electron shot noise
[INFO] [stdout]    |     ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]   --> src/sensors/traits.rs:88:5
[INFO] [stdout]    |
[INFO] [stdout] 88 |     ZenerDiode,         // Avalanche noise
[INFO] [stdout]    |     ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]   --> src/sensors/traits.rs:91:5
[INFO] [stdout]    |
[INFO] [stdout] 91 |     Custom(u32),        // User-defined
[INFO] [stdout]    |     ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]   --> src/sensors/traits.rs:97:5
[INFO] [stdout]    |
[INFO] [stdout] 97 |     Disconnected,
[INFO] [stdout]    |     ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]   --> src/sensors/traits.rs:98:5
[INFO] [stdout]    |
[INFO] [stdout] 98 |     Connecting,
[INFO] [stdout]    |     ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]   --> src/sensors/traits.rs:99:5
[INFO] [stdout]    |
[INFO] [stdout] 99 |     Connected,
[INFO] [stdout]    |     ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]    --> src/sensors/traits.rs:100:5
[INFO] [stdout]     |
[INFO] [stdout] 100 |     Calibrating,
[INFO] [stdout]     |     ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]    --> src/sensors/traits.rs:101:5
[INFO] [stdout]     |
[INFO] [stdout] 101 |     Active,
[INFO] [stdout]     |     ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]    --> src/sensors/traits.rs:102:5
[INFO] [stdout]     |
[INFO] [stdout] 102 |     Error,
[INFO] [stdout]     |     ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]    --> src/sensors/traits.rs:103:5
[INFO] [stdout]     |
[INFO] [stdout] 103 |     Maintenance,
[INFO] [stdout]     |     ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/sensors/traits.rs:109:5
[INFO] [stdout]     |
[INFO] [stdout] 109 |     pub offset: Vec<f64>,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/sensors/traits.rs:110:5
[INFO] [stdout]     |
[INFO] [stdout] 110 |     pub scale: Vec<f64>,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/sensors/traits.rs:111:5
[INFO] [stdout]     |
[INFO] [stdout] 111 |     pub noise_floor: f64,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/sensors/traits.rs:112:5
[INFO] [stdout]     |
[INFO] [stdout] 112 |     pub timestamp: DateTime<Utc>,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/sensors/traits.rs:113:5
[INFO] [stdout]     |
[INFO] [stdout] 113 |     pub temperature: Option<f64>,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/sensors/traits.rs:114:5
[INFO] [stdout]     |
[INFO] [stdout] 114 |     pub notes: String,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/sensors/traits.rs:115:5
[INFO] [stdout]     |
[INFO] [stdout] 115 |     pub signature: Vec<u8>,  // Cryptographic signature
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/sensors/traits.rs:121:5
[INFO] [stdout]     |
[INFO] [stdout] 121 |     pub sensor_id: String,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/sensors/traits.rs:122:5
[INFO] [stdout]     |
[INFO] [stdout] 122 |     pub sensor_type: SensorType,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/sensors/traits.rs:123:5
[INFO] [stdout]     |
[INFO] [stdout] 123 |     pub timestamp: DateTime<Utc>,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/sensors/traits.rs:124:5
[INFO] [stdout]     |
[INFO] [stdout] 124 |     pub sequence: u64,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/sensors/traits.rs:127:5
[INFO] [stdout]     |
[INFO] [stdout] 127 |     pub data: Vec<f64>,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/sensors/traits.rs:128:5
[INFO] [stdout]     |
[INFO] [stdout] 128 |     pub dimensions: Vec<usize>,  // Shape for multi-dimensional data
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/sensors/traits.rs:131:5
[INFO] [stdout]     |
[INFO] [stdout] 131 |     pub unit: String,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/sensors/traits.rs:132:5
[INFO] [stdout]     |
[INFO] [stdout] 132 |     pub sample_rate: f64,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/sensors/traits.rs:133:5
[INFO] [stdout]     |
[INFO] [stdout] 133 |     pub quality: f32,  // 0-1 signal quality
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/sensors/traits.rs:136:5
[INFO] [stdout]     |
[INFO] [stdout] 136 |     pub position: Option<[f64; 3]>,  // x, y, z in meters
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/sensors/traits.rs:137:5
[INFO] [stdout]     |
[INFO] [stdout] 137 |     pub orientation: Option<[f64; 3]>,  // roll, pitch, yaw in radians
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for an associated function
[INFO] [stdout]    --> src/sensors/traits.rs:141:5
[INFO] [stdout]     |
[INFO] [stdout] 141 |     pub fn new(sensor_id: &str, sensor_type: SensorType, data: Vec<f64>) -> Self {
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a method
[INFO] [stdout]    --> src/sensors/traits.rs:157:5
[INFO] [stdout]     |
[INFO] [stdout] 157 |     pub fn as_vector(&self) -> DVector<f64> {
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a method
[INFO] [stdout]    --> src/sensors/traits.rs:161:5
[INFO] [stdout]     |
[INFO] [stdout] 161 |     pub fn len(&self) -> usize {
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a method
[INFO] [stdout]    --> src/sensors/traits.rs:165:5
[INFO] [stdout]     |
[INFO] [stdout] 165 |     pub fn is_empty(&self) -> bool {
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/sensors/traits.rs:210:5
[INFO] [stdout]     |
[INFO] [stdout] 210 |     pub sensor_id: String,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/sensors/traits.rs:211:5
[INFO] [stdout]     |
[INFO] [stdout] 211 |     pub status: SensorStatus,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/sensors/traits.rs:212:5
[INFO] [stdout]     |
[INFO] [stdout] 212 |     pub uptime_seconds: u64,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/sensors/traits.rs:213:5
[INFO] [stdout]     |
[INFO] [stdout] 213 |     pub readings_count: u64,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/sensors/traits.rs:214:5
[INFO] [stdout]     |
[INFO] [stdout] 214 |     pub error_count: u64,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/sensors/traits.rs:215:5
[INFO] [stdout]     |
[INFO] [stdout] 215 |     pub last_error: Option<String>,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/sensors/traits.rs:216:5
[INFO] [stdout]     |
[INFO] [stdout] 216 |     pub signal_quality: f32,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/sensors/traits.rs:217:5
[INFO] [stdout]     |
[INFO] [stdout] 217 |     pub noise_level: f64,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/sensors/traits.rs:218:5
[INFO] [stdout]     |
[INFO] [stdout] 218 |     pub temperature: Option<f64>,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/sensors/traits.rs:219:5
[INFO] [stdout]     |
[INFO] [stdout] 219 |     pub battery_level: Option<f32>,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for an associated function
[INFO] [stdout]   --> src/sensors/thermal.rs:24:5
[INFO] [stdout]    |
[INFO] [stdout] 24 |     pub fn new(id: &str, port_name: &str) -> Self {
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for an associated function
[INFO] [stdout]   --> src/sensors/thermal.rs:98:5
[INFO] [stdout]    |
[INFO] [stdout] 98 |     pub fn new(id: &str) -> Self {
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for an associated function
[INFO] [stdout]   --> src/sensors/seismic.rs:23:5
[INFO] [stdout]    |
[INFO] [stdout] 23 |     pub fn new(id: &str) -> Self {
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for an associated function
[INFO] [stdout]   --> src/sensors/seismic.rs:94:5
[INFO] [stdout]    |
[INFO] [stdout] 94 |     pub fn new(id: &str) -> Self {
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for an associated function
[INFO] [stdout]    --> src/sensors/seismic.rs:141:5
[INFO] [stdout]     |
[INFO] [stdout] 141 |     pub fn new(id: &str, sensitivity: f64) -> Self {
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for an associated function
[INFO] [stdout]   --> src/sensors/emf.rs:23:5
[INFO] [stdout]    |
[INFO] [stdout] 23 |     pub fn new(id: &str) -> Self {
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for an associated function
[INFO] [stdout]   --> src/sensors/emf.rs:76:5
[INFO] [stdout]    |
[INFO] [stdout] 76 |     pub fn new(id: &str) -> Self {
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for an enum
[INFO] [stdout]    --> src/sensors/emf.rs:129:1
[INFO] [stdout]     |
[INFO] [stdout] 129 | pub enum TriFieldMode {
[INFO] [stdout]     | ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]    --> src/sensors/emf.rs:130:5
[INFO] [stdout]     |
[INFO] [stdout] 130 |     Magnetic,
[INFO] [stdout]     |     ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]    --> src/sensors/emf.rs:131:5
[INFO] [stdout]     |
[INFO] [stdout] 131 |     Electric,
[INFO] [stdout]     |     ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]    --> src/sensors/emf.rs:132:5
[INFO] [stdout]     |
[INFO] [stdout] 132 |     Radio,
[INFO] [stdout]     |     ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for an associated function
[INFO] [stdout]    --> src/sensors/emf.rs:136:5
[INFO] [stdout]     |
[INFO] [stdout] 136 |     pub fn new(id: &str) -> Self {
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for an associated function
[INFO] [stdout]   --> src/sensors/audio.rs:22:5
[INFO] [stdout]    |
[INFO] [stdout] 22 |     pub fn new(id: &str) -> Self {
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for an associated function
[INFO] [stdout]   --> src/sensors/audio.rs:69:5
[INFO] [stdout]    |
[INFO] [stdout] 69 |     pub fn new(id: &str) -> Self {
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for an associated function
[INFO] [stdout]    --> src/sensors/audio.rs:120:5
[INFO] [stdout]     |
[INFO] [stdout] 120 |     pub fn new(id: &str) -> Self {
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for an associated function
[INFO] [stdout]    --> src/sensors/audio.rs:168:5
[INFO] [stdout]     |
[INFO] [stdout] 168 |     pub fn new(id: &str) -> Self {
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for an associated function
[INFO] [stdout]    --> src/sensors/audio.rs:227:5
[INFO] [stdout]     |
[INFO] [stdout] 227 |     pub fn new(id: &str, num_mics: usize) -> Self {
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for an associated function
[INFO] [stdout]   --> src/sensors/environmental.rs:23:5
[INFO] [stdout]    |
[INFO] [stdout] 23 |     pub fn new(id: &str) -> Self {
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for an associated function
[INFO] [stdout]   --> src/sensors/environmental.rs:75:5
[INFO] [stdout]    |
[INFO] [stdout] 75 |     pub fn new(id: &str) -> Self {
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for an associated function
[INFO] [stdout]    --> src/sensors/environmental.rs:121:5
[INFO] [stdout]     |
[INFO] [stdout] 121 |     pub fn new(id: &str) -> Self {
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for an associated function
[INFO] [stdout]    --> src/sensors/environmental.rs:167:5
[INFO] [stdout]     |
[INFO] [stdout] 167 |     pub fn new(id: &str) -> Self {
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for an associated function
[INFO] [stdout]    --> src/sensors/environmental.rs:213:5
[INFO] [stdout]     |
[INFO] [stdout] 213 |     pub fn new(id: &str) -> Self {
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for an enum
[INFO] [stdout]   --> src/sensors/radiation.rs:24:1
[INFO] [stdout]    |
[INFO] [stdout] 24 | pub enum GeigerTubeType {
[INFO] [stdout]    | ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]   --> src/sensors/radiation.rs:25:5
[INFO] [stdout]    |
[INFO] [stdout] 25 |     SBM20,      // Russian pancake
[INFO] [stdout]    |     ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]   --> src/sensors/radiation.rs:26:5
[INFO] [stdout]    |
[INFO] [stdout] 26 |     SI29BG,     // End-window
[INFO] [stdout]    |     ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]   --> src/sensors/radiation.rs:27:5
[INFO] [stdout]    |
[INFO] [stdout] 27 |     LND712,     // Halogen-quenched
[INFO] [stdout]    |     ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]   --> src/sensors/radiation.rs:28:5
[INFO] [stdout]    |
[INFO] [stdout] 28 |     J408Gamma,  // High-sensitivity gamma
[INFO] [stdout]    |     ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]   --> src/sensors/radiation.rs:29:5
[INFO] [stdout]    |
[INFO] [stdout] 29 |     Custom,
[INFO] [stdout]    |     ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for an associated function
[INFO] [stdout]   --> src/sensors/radiation.rs:33:5
[INFO] [stdout]    |
[INFO] [stdout] 33 |     pub fn new(id: &str, tube_type: GeigerTubeType) -> Self {
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for an enum
[INFO] [stdout]   --> src/sensors/radiation.rs:96:1
[INFO] [stdout]    |
[INFO] [stdout] 96 | pub enum ScintillatorType {
[INFO] [stdout]    | ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]   --> src/sensors/radiation.rs:97:5
[INFO] [stdout]    |
[INFO] [stdout] 97 |     NaI,      // Sodium Iodide
[INFO] [stdout]    |     ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]   --> src/sensors/radiation.rs:98:5
[INFO] [stdout]    |
[INFO] [stdout] 98 |     CsI,      // Cesium Iodide
[INFO] [stdout]    |     ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]   --> src/sensors/radiation.rs:99:5
[INFO] [stdout]    |
[INFO] [stdout] 99 |     BGO,      // Bismuth Germanate
[INFO] [stdout]    |     ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]    --> src/sensors/radiation.rs:100:5
[INFO] [stdout]     |
[INFO] [stdout] 100 |     LaBr3,    // Lanthanum Bromide
[INFO] [stdout]     |     ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]    --> src/sensors/radiation.rs:101:5
[INFO] [stdout]     |
[INFO] [stdout] 101 |     Plastic,  // Plastic scintillator
[INFO] [stdout]     |     ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for an associated function
[INFO] [stdout]    --> src/sensors/radiation.rs:105:5
[INFO] [stdout]     |
[INFO] [stdout] 105 |     pub fn new(id: &str, crystal_type: ScintillatorType) -> Self {
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for an associated function
[INFO] [stdout]    --> src/sensors/radiation.rs:166:5
[INFO] [stdout]     |
[INFO] [stdout] 166 |     pub fn new(id: &str) -> Self {
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for an associated function
[INFO] [stdout]    --> src/sensors/radiation.rs:213:5
[INFO] [stdout]     |
[INFO] [stdout] 213 |     pub fn new(id: &str, num_dosimeters: usize) -> Self {
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for an associated function
[INFO] [stdout]   --> src/sensors/optical.rs:22:5
[INFO] [stdout]    |
[INFO] [stdout] 22 |     pub fn new(id: &str) -> Self {
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for an associated function
[INFO] [stdout]   --> src/sensors/optical.rs:68:5
[INFO] [stdout]    |
[INFO] [stdout] 68 |     pub fn new(id: &str) -> Self {
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for an associated function
[INFO] [stdout]    --> src/sensors/optical.rs:116:5
[INFO] [stdout]     |
[INFO] [stdout] 116 |     pub fn new(id: &str) -> Self {
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for an associated function
[INFO] [stdout]    --> src/sensors/optical.rs:172:5
[INFO] [stdout]     |
[INFO] [stdout] 172 |     pub fn new(id: &str) -> Self {
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for an associated function
[INFO] [stdout]    --> src/sensors/optical.rs:227:5
[INFO] [stdout]     |
[INFO] [stdout] 227 |     pub fn new(id: &str, rows: usize, cols: usize) -> Self {
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for an associated function
[INFO] [stdout]   --> src/sensors/rf.rs:25:5
[INFO] [stdout]    |
[INFO] [stdout] 25 |     pub fn new(id: &str) -> Self {
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for an associated function
[INFO] [stdout]   --> src/sensors/rf.rs:95:5
[INFO] [stdout]    |
[INFO] [stdout] 95 |     pub fn new(id: &str) -> Self {
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct
[INFO] [stdout]    --> src/sensors/rf.rs:165:1
[INFO] [stdout]     |
[INFO] [stdout] 165 | pub struct WiFiBands {
[INFO] [stdout]     | ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/sensors/rf.rs:166:5
[INFO] [stdout]     |
[INFO] [stdout] 166 |     pub ghz_2_4: bool,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/sensors/rf.rs:167:5
[INFO] [stdout]     |
[INFO] [stdout] 167 |     pub ghz_5: bool,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/sensors/rf.rs:168:5
[INFO] [stdout]     |
[INFO] [stdout] 168 |     pub ghz_6: bool,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for an associated function
[INFO] [stdout]    --> src/sensors/rf.rs:178:5
[INFO] [stdout]     |
[INFO] [stdout] 178 |     pub fn new(id: &str) -> Self {
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for an associated function
[INFO] [stdout]    --> src/sensors/rf.rs:242:5
[INFO] [stdout]     |
[INFO] [stdout] 242 |     pub fn new(id: &str) -> Self {
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for an associated function
[INFO] [stdout]   --> src/sensors/capacitive.rs:24:5
[INFO] [stdout]    |
[INFO] [stdout] 24 |     pub fn new(id: &str) -> Self {
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for an associated function
[INFO] [stdout]   --> src/sensors/capacitive.rs:86:5
[INFO] [stdout]    |
[INFO] [stdout] 86 |     pub fn new(id: &str) -> Self {
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for an associated function
[INFO] [stdout]    --> src/sensors/capacitive.rs:138:5
[INFO] [stdout]     |
[INFO] [stdout] 138 |     pub fn new(id: &str) -> Self {
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for an associated function
[INFO] [stdout]    --> src/sensors/capacitive.rs:185:5
[INFO] [stdout]     |
[INFO] [stdout] 185 |     pub fn new(id: &str, max_current: f64) -> Self {
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for an associated function
[INFO] [stdout]   --> src/sensors/magnetic.rs:23:5
[INFO] [stdout]    |
[INFO] [stdout] 23 |     pub fn new(id: &str) -> Self {
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for an associated function
[INFO] [stdout]   --> src/sensors/magnetic.rs:75:5
[INFO] [stdout]    |
[INFO] [stdout] 75 |     pub fn new(id: &str) -> Self {
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for an associated function
[INFO] [stdout]    --> src/sensors/magnetic.rs:122:5
[INFO] [stdout]     |
[INFO] [stdout] 122 |     pub fn new(id: &str, baseline: f64) -> Self {
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for an associated function
[INFO] [stdout]   --> src/sensors/ionization.rs:22:5
[INFO] [stdout]    |
[INFO] [stdout] 22 |     pub fn new(id: &str) -> Self {
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for an associated function
[INFO] [stdout]   --> src/sensors/ionization.rs:69:5
[INFO] [stdout]    |
[INFO] [stdout] 69 |     pub fn new(id: &str, chamber_volume: f64) -> Self {
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for an associated function
[INFO] [stdout]    --> src/sensors/ionization.rs:121:5
[INFO] [stdout]     |
[INFO] [stdout] 121 |     pub fn new(id: &str) -> Self {
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for an associated function
[INFO] [stdout]    --> src/sensors/ionization.rs:167:5
[INFO] [stdout]     |
[INFO] [stdout] 167 |     pub fn new(id: &str) -> Self {
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for an enum
[INFO] [stdout]   --> src/sensors/quantum.rs:24:1
[INFO] [stdout]    |
[INFO] [stdout] 24 | pub enum QRNGSourceType {
[INFO] [stdout]    | ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]   --> src/sensors/quantum.rs:25:5
[INFO] [stdout]    |
[INFO] [stdout] 25 |     PhotonArrival,    // Photon timing
[INFO] [stdout]    |     ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]   --> src/sensors/quantum.rs:26:5
[INFO] [stdout]    |
[INFO] [stdout] 26 |     BeamSplitter,     // Quantum beam splitter
[INFO] [stdout]    |     ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]   --> src/sensors/quantum.rs:27:5
[INFO] [stdout]    |
[INFO] [stdout] 27 |     Vacuum,           // Vacuum fluctuations
[INFO] [stdout]    |     ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]   --> src/sensors/quantum.rs:28:5
[INFO] [stdout]    |
[INFO] [stdout] 28 |     RadioactiveDecay, // True random from decay
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for an associated function
[INFO] [stdout]   --> src/sensors/quantum.rs:32:5
[INFO] [stdout]    |
[INFO] [stdout] 32 |     pub fn new(id: &str, source_type: QRNGSourceType) -> Self {
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for an associated function
[INFO] [stdout]   --> src/sensors/quantum.rs:86:5
[INFO] [stdout]    |
[INFO] [stdout] 86 |     pub fn new(id: &str) -> Self {
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for an associated function
[INFO] [stdout]    --> src/sensors/quantum.rs:156:5
[INFO] [stdout]     |
[INFO] [stdout] 156 |     pub fn new(id: &str) -> Self {
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for an associated function
[INFO] [stdout]    --> src/sensors/quantum.rs:217:5
[INFO] [stdout]     |
[INFO] [stdout] 217 |     pub fn new(id: &str) -> Self {
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for an associated function
[INFO] [stdout]   --> src/sensors/simulator.rs:33:5
[INFO] [stdout]    |
[INFO] [stdout] 33 |     pub fn new(id: &str, sensor_type: SensorType, sample_rate: f64) -> Self {
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/analysis/mod.rs:33:5
[INFO] [stdout]    |
[INFO] [stdout] 33 |     pub entropy_window: usize,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/analysis/mod.rs:34:5
[INFO] [stdout]    |
[INFO] [stdout] 34 |     pub anomaly_threshold: f64,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/analysis/mod.rs:35:5
[INFO] [stdout]    |
[INFO] [stdout] 35 |     pub pattern_min_length: usize,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/analysis/mod.rs:36:5
[INFO] [stdout]    |
[INFO] [stdout] 36 |     pub fft_size: usize,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/analysis/mod.rs:37:5
[INFO] [stdout]    |
[INFO] [stdout] 37 |     pub enable_gpu: bool,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for an associated function
[INFO] [stdout]   --> src/analysis/mod.rs:64:5
[INFO] [stdout]    |
[INFO] [stdout] 64 |     pub async fn new(config: Arc<Config>, event_bus: Arc<EventBus>) -> Result<Self> {
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a method
[INFO] [stdout]   --> src/analysis/mod.rs:78:5
[INFO] [stdout]    |
[INFO] [stdout] 78 |     pub async fn run(&self, mut shutdown: broadcast::Receiver<()>) -> Result<()> {
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/analysis/entropy.rs:18:5
[INFO] [stdout]    |
[INFO] [stdout] 18 |     pub shannon: f64,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/analysis/entropy.rs:19:5
[INFO] [stdout]    |
[INFO] [stdout] 19 |     pub renyi: f64,        // Rényi entropy (alpha=2)
[INFO] [stdout]    |     ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/analysis/entropy.rs:20:5
[INFO] [stdout]    |
[INFO] [stdout] 20 |     pub tsallis: f64,      // Tsallis entropy (q=2)
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/analysis/entropy.rs:23:5
[INFO] [stdout]    |
[INFO] [stdout] 23 |     pub sample: f64,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/analysis/entropy.rs:24:5
[INFO] [stdout]    |
[INFO] [stdout] 24 |     pub approximate: f64,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/analysis/entropy.rs:25:5
[INFO] [stdout]    |
[INFO] [stdout] 25 |     pub permutation: f64,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/analysis/entropy.rs:26:5
[INFO] [stdout]    |
[INFO] [stdout] 26 |     pub multiscale: Vec<f64>,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/analysis/entropy.rs:29:5
[INFO] [stdout]    |
[INFO] [stdout] 29 |     pub spectral: f64,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/analysis/entropy.rs:30:5
[INFO] [stdout]    |
[INFO] [stdout] 30 |     pub wavelet: f64,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/analysis/entropy.rs:33:5
[INFO] [stdout]    |
[INFO] [stdout] 33 |     pub lz_complexity: f64,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/analysis/entropy.rs:34:5
[INFO] [stdout]    |
[INFO] [stdout] 34 |     pub kolmogorov_estimate: f64,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/analysis/entropy.rs:35:5
[INFO] [stdout]    |
[INFO] [stdout] 35 |     pub hurst_exponent: f64,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/analysis/entropy.rs:38:5
[INFO] [stdout]    |
[INFO] [stdout] 38 |     pub kurtosis: f64,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/analysis/entropy.rs:39:5
[INFO] [stdout]    |
[INFO] [stdout] 39 |     pub skewness: f64,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/analysis/entropy.rs:42:5
[INFO] [stdout]    |
[INFO] [stdout] 42 |     pub is_anomalous: bool,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/analysis/entropy.rs:43:5
[INFO] [stdout]    |
[INFO] [stdout] 43 |     pub anomaly_score: f64,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for an associated function
[INFO] [stdout]   --> src/analysis/entropy.rs:54:5
[INFO] [stdout]    |
[INFO] [stdout] 54 |     pub fn new(config: AnalysisConfig) -> Self {
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a method
[INFO] [stdout]   --> src/analysis/entropy.rs:62:5
[INFO] [stdout]    |
[INFO] [stdout] 62 |     pub fn analyze(&self, data: &[f64]) -> EntropyResult {
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/analysis/anomaly.rs:16:5
[INFO] [stdout]    |
[INFO] [stdout] 16 |     pub index: usize,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/analysis/anomaly.rs:17:5
[INFO] [stdout]    |
[INFO] [stdout] 17 |     pub value: f64,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/analysis/anomaly.rs:18:5
[INFO] [stdout]    |
[INFO] [stdout] 18 |     pub score: f64,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/analysis/anomaly.rs:19:5
[INFO] [stdout]    |
[INFO] [stdout] 19 |     pub anomaly_type: AnomalyType,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/analysis/anomaly.rs:20:5
[INFO] [stdout]    |
[INFO] [stdout] 20 |     pub confidence: f64,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for an enum
[INFO] [stdout]   --> src/analysis/anomaly.rs:24:1
[INFO] [stdout]    |
[INFO] [stdout] 24 | pub enum AnomalyType {
[INFO] [stdout]    | ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]   --> src/analysis/anomaly.rs:25:5
[INFO] [stdout]    |
[INFO] [stdout] 25 |     PointAnomaly,       // Single outlier
[INFO] [stdout]    |     ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]   --> src/analysis/anomaly.rs:26:5
[INFO] [stdout]    |
[INFO] [stdout] 26 |     ContextualAnomaly,  // Anomaly in context
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]   --> src/analysis/anomaly.rs:27:5
[INFO] [stdout]    |
[INFO] [stdout] 27 |     CollectiveAnomaly,  // Group of anomalies
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]   --> src/analysis/anomaly.rs:28:5
[INFO] [stdout]    |
[INFO] [stdout] 28 |     ChangePoint,        // Distribution shift
[INFO] [stdout]    |     ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]   --> src/analysis/anomaly.rs:29:5
[INFO] [stdout]    |
[INFO] [stdout] 29 |     Spike,              // Sudden spike
[INFO] [stdout]    |     ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]   --> src/analysis/anomaly.rs:30:5
[INFO] [stdout]    |
[INFO] [stdout] 30 |     Drop,               // Sudden drop
[INFO] [stdout]    |     ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]   --> src/analysis/anomaly.rs:31:5
[INFO] [stdout]    |
[INFO] [stdout] 31 |     Drift,              // Gradual change
[INFO] [stdout]    |     ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]   --> src/analysis/anomaly.rs:32:5
[INFO] [stdout]    |
[INFO] [stdout] 32 |     Oscillation,        // Abnormal oscillation
[INFO] [stdout]    |     ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for an associated function
[INFO] [stdout]   --> src/analysis/anomaly.rs:54:5
[INFO] [stdout]    |
[INFO] [stdout] 54 |     pub fn new(config: AnalysisConfig) -> Self {
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a method
[INFO] [stdout]   --> src/analysis/anomaly.rs:67:5
[INFO] [stdout]    |
[INFO] [stdout] 67 |     pub fn detect(&self, data: &[f64]) -> Vec<Anomaly> {
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/analysis/signal.rs:17:5
[INFO] [stdout]    |
[INFO] [stdout] 17 |     pub mean: f64,
[INFO] [stdout]    |     ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/analysis/signal.rs:18:5
[INFO] [stdout]    |
[INFO] [stdout] 18 |     pub std_dev: f64,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/analysis/signal.rs:19:5
[INFO] [stdout]    |
[INFO] [stdout] 19 |     pub rms: f64,
[INFO] [stdout]    |     ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/analysis/signal.rs:20:5
[INFO] [stdout]    |
[INFO] [stdout] 20 |     pub peak_to_peak: f64,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/analysis/signal.rs:21:5
[INFO] [stdout]    |
[INFO] [stdout] 21 |     pub crest_factor: f64,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/analysis/signal.rs:22:5
[INFO] [stdout]    |
[INFO] [stdout] 22 |     pub zero_crossings: usize,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/analysis/signal.rs:25:5
[INFO] [stdout]    |
[INFO] [stdout] 25 |     pub dominant_frequency: f64,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/analysis/signal.rs:26:5
[INFO] [stdout]    |
[INFO] [stdout] 26 |     pub spectral_centroid: f64,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/analysis/signal.rs:27:5
[INFO] [stdout]    |
[INFO] [stdout] 27 |     pub spectral_bandwidth: f64,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/analysis/signal.rs:28:5
[INFO] [stdout]    |
[INFO] [stdout] 28 |     pub spectral_rolloff: f64,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/analysis/signal.rs:29:5
[INFO] [stdout]    |
[INFO] [stdout] 29 |     pub spectral_flatness: f64,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/analysis/signal.rs:32:5
[INFO] [stdout]    |
[INFO] [stdout] 32 |     pub band_energies: Vec<f64>,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/analysis/signal.rs:35:5
[INFO] [stdout]    |
[INFO] [stdout] 35 |     pub attack_time: f64,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/analysis/signal.rs:36:5
[INFO] [stdout]    |
[INFO] [stdout] 36 |     pub decay_time: f64,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for an associated function
[INFO] [stdout]   --> src/analysis/signal.rs:45:5
[INFO] [stdout]    |
[INFO] [stdout] 45 |     pub fn new(config: AnalysisConfig) -> Self {
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a method
[INFO] [stdout]   --> src/analysis/signal.rs:49:5
[INFO] [stdout]    |
[INFO] [stdout] 49 |     pub fn extract_features(&self, data: &[f64], sample_rate: f64) -> SignalFeatures {
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/analysis/patterns.rs:15:5
[INFO] [stdout]    |
[INFO] [stdout] 15 |     pub pattern_type: PatternType,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/analysis/patterns.rs:16:5
[INFO] [stdout]    |
[INFO] [stdout] 16 |     pub start_index: usize,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/analysis/patterns.rs:17:5
[INFO] [stdout]    |
[INFO] [stdout] 17 |     pub length: usize,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/analysis/patterns.rs:18:5
[INFO] [stdout]    |
[INFO] [stdout] 18 |     pub confidence: f64,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/analysis/patterns.rs:19:5
[INFO] [stdout]    |
[INFO] [stdout] 19 |     pub period: Option<f64>,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/analysis/patterns.rs:20:5
[INFO] [stdout]    |
[INFO] [stdout] 20 |     pub description: String,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for an enum
[INFO] [stdout]   --> src/analysis/patterns.rs:24:1
[INFO] [stdout]    |
[INFO] [stdout] 24 | pub enum PatternType {
[INFO] [stdout]    | ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]   --> src/analysis/patterns.rs:25:5
[INFO] [stdout]    |
[INFO] [stdout] 25 |     Periodic,
[INFO] [stdout]    |     ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]   --> src/analysis/patterns.rs:26:5
[INFO] [stdout]    |
[INFO] [stdout] 26 |     Transient,
[INFO] [stdout]    |     ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]   --> src/analysis/patterns.rs:27:5
[INFO] [stdout]    |
[INFO] [stdout] 27 |     Trend,
[INFO] [stdout]    |     ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]   --> src/analysis/patterns.rs:28:5
[INFO] [stdout]    |
[INFO] [stdout] 28 |     Oscillation,
[INFO] [stdout]    |     ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]   --> src/analysis/patterns.rs:29:5
[INFO] [stdout]    |
[INFO] [stdout] 29 |     StepChange,
[INFO] [stdout]    |     ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]   --> src/analysis/patterns.rs:30:5
[INFO] [stdout]    |
[INFO] [stdout] 30 |     Impulse,
[INFO] [stdout]    |     ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]   --> src/analysis/patterns.rs:31:5
[INFO] [stdout]    |
[INFO] [stdout] 31 |     Harmonic,
[INFO] [stdout]    |     ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]   --> src/analysis/patterns.rs:32:5
[INFO] [stdout]    |
[INFO] [stdout] 32 |     Burst,
[INFO] [stdout]    |     ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]   --> src/analysis/patterns.rs:33:5
[INFO] [stdout]    |
[INFO] [stdout] 33 |     Recurring,
[INFO] [stdout]    |     ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for an associated function
[INFO] [stdout]   --> src/analysis/patterns.rs:42:5
[INFO] [stdout]    |
[INFO] [stdout] 42 |     pub fn new(config: AnalysisConfig) -> Self {
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a method
[INFO] [stdout]   --> src/analysis/patterns.rs:46:5
[INFO] [stdout]    |
[INFO] [stdout] 46 |     pub fn find_patterns(&self, data: &[f64]) -> Vec<Pattern> {
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/analysis/statistics.rs:12:5
[INFO] [stdout]    |
[INFO] [stdout] 12 |     pub count: usize,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/analysis/statistics.rs:13:5
[INFO] [stdout]    |
[INFO] [stdout] 13 |     pub mean: f64,
[INFO] [stdout]    |     ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/analysis/statistics.rs:14:5
[INFO] [stdout]    |
[INFO] [stdout] 14 |     pub median: f64,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/analysis/statistics.rs:15:5
[INFO] [stdout]    |
[INFO] [stdout] 15 |     pub mode: Option<f64>,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/analysis/statistics.rs:16:5
[INFO] [stdout]    |
[INFO] [stdout] 16 |     pub std_dev: f64,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/analysis/statistics.rs:17:5
[INFO] [stdout]    |
[INFO] [stdout] 17 |     pub variance: f64,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/analysis/statistics.rs:18:5
[INFO] [stdout]    |
[INFO] [stdout] 18 |     pub min: f64,
[INFO] [stdout]    |     ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/analysis/statistics.rs:19:5
[INFO] [stdout]    |
[INFO] [stdout] 19 |     pub max: f64,
[INFO] [stdout]    |     ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/analysis/statistics.rs:20:5
[INFO] [stdout]    |
[INFO] [stdout] 20 |     pub range: f64,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/analysis/statistics.rs:21:5
[INFO] [stdout]    |
[INFO] [stdout] 21 |     pub q1: f64,
[INFO] [stdout]    |     ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/analysis/statistics.rs:22:5
[INFO] [stdout]    |
[INFO] [stdout] 22 |     pub q3: f64,
[INFO] [stdout]    |     ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/analysis/statistics.rs:23:5
[INFO] [stdout]    |
[INFO] [stdout] 23 |     pub iqr: f64,
[INFO] [stdout]    |     ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/analysis/statistics.rs:24:5
[INFO] [stdout]    |
[INFO] [stdout] 24 |     pub skewness: f64,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/analysis/statistics.rs:25:5
[INFO] [stdout]    |
[INFO] [stdout] 25 |     pub kurtosis: f64,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/analysis/statistics.rs:26:5
[INFO] [stdout]    |
[INFO] [stdout] 26 |     pub coefficient_of_variation: f64,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for an associated function
[INFO] [stdout]   --> src/analysis/statistics.rs:33:5
[INFO] [stdout]    |
[INFO] [stdout] 33 |     pub fn new() -> Self {
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a method
[INFO] [stdout]   --> src/analysis/statistics.rs:37:5
[INFO] [stdout]    |
[INFO] [stdout] 37 |     pub fn summarize(&self, data: &[f64]) -> StatisticalSummary {
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct
[INFO] [stdout]    --> src/analysis/statistics.rs:409:1
[INFO] [stdout]     |
[INFO] [stdout] 409 | pub struct TTestResult {
[INFO] [stdout]     | ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/analysis/statistics.rs:410:5
[INFO] [stdout]     |
[INFO] [stdout] 410 |     pub t_statistic: f64,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/analysis/statistics.rs:411:5
[INFO] [stdout]     |
[INFO] [stdout] 411 |     pub p_value: f64,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/analysis/statistics.rs:412:5
[INFO] [stdout]     |
[INFO] [stdout] 412 |     pub degrees_of_freedom: f64,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/analysis/statistics.rs:413:5
[INFO] [stdout]     |
[INFO] [stdout] 413 |     pub significant: bool,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct
[INFO] [stdout]    --> src/analysis/statistics.rs:417:1
[INFO] [stdout]     |
[INFO] [stdout] 417 | pub struct UTestResult {
[INFO] [stdout]     | ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/analysis/statistics.rs:418:5
[INFO] [stdout]     |
[INFO] [stdout] 418 |     pub u_statistic: f64,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/analysis/statistics.rs:419:5
[INFO] [stdout]     |
[INFO] [stdout] 419 |     pub p_value: f64,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/analysis/statistics.rs:420:5
[INFO] [stdout]     |
[INFO] [stdout] 420 |     pub significant: bool,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct
[INFO] [stdout]    --> src/analysis/statistics.rs:424:1
[INFO] [stdout]     |
[INFO] [stdout] 424 | pub struct KSTestResult {
[INFO] [stdout]     | ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/analysis/statistics.rs:425:5
[INFO] [stdout]     |
[INFO] [stdout] 425 |     pub d_statistic: f64,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/analysis/statistics.rs:426:5
[INFO] [stdout]     |
[INFO] [stdout] 426 |     pub p_value: f64,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/analysis/statistics.rs:427:5
[INFO] [stdout]     |
[INFO] [stdout] 427 |     pub significant: bool,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/analysis/complexity.rs:12:5
[INFO] [stdout]    |
[INFO] [stdout] 12 |     pub fractal_dimension: f64,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/analysis/complexity.rs:13:5
[INFO] [stdout]    |
[INFO] [stdout] 13 |     pub correlation_dimension: f64,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/analysis/complexity.rs:14:5
[INFO] [stdout]    |
[INFO] [stdout] 14 |     pub lyapunov_exponent: f64,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/analysis/complexity.rs:15:5
[INFO] [stdout]    |
[INFO] [stdout] 15 |     pub recurrence_rate: f64,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/analysis/complexity.rs:16:5
[INFO] [stdout]    |
[INFO] [stdout] 16 |     pub determinism: f64,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/analysis/complexity.rs:17:5
[INFO] [stdout]    |
[INFO] [stdout] 17 |     pub laminarity: f64,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/analysis/complexity.rs:18:5
[INFO] [stdout]    |
[INFO] [stdout] 18 |     pub entropy_rate: f64,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for an associated function
[INFO] [stdout]   --> src/analysis/complexity.rs:25:5
[INFO] [stdout]    |
[INFO] [stdout] 25 |     pub fn new() -> Self {
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a method
[INFO] [stdout]   --> src/analysis/complexity.rs:29:5
[INFO] [stdout]    |
[INFO] [stdout] 29 |     pub fn analyze(&self, data: &[f64]) -> ComplexityResult {
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/detection/mod.rs:30:5
[INFO] [stdout]    |
[INFO] [stdout] 30 |     pub id: String,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/detection/mod.rs:31:5
[INFO] [stdout]    |
[INFO] [stdout] 31 |     pub timestamp: DateTime<Utc>,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/detection/mod.rs:32:5
[INFO] [stdout]    |
[INFO] [stdout] 32 |     pub detection_type: DetectionType,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/detection/mod.rs:33:5
[INFO] [stdout]    |
[INFO] [stdout] 33 |     pub confidence: f64,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/detection/mod.rs:34:5
[INFO] [stdout]    |
[INFO] [stdout] 34 |     pub severity: Severity,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/detection/mod.rs:37:5
[INFO] [stdout]    |
[INFO] [stdout] 37 |     pub sensors: Vec<SensorContribution>,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/detection/mod.rs:40:5
[INFO] [stdout]    |
[INFO] [stdout] 40 |     pub entropy_deviation: f64,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/detection/mod.rs:41:5
[INFO] [stdout]    |
[INFO] [stdout] 41 |     pub anomaly_count: usize,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/detection/mod.rs:42:5
[INFO] [stdout]    |
[INFO] [stdout] 42 |     pub correlation_score: f64,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/detection/mod.rs:45:5
[INFO] [stdout]    |
[INFO] [stdout] 45 |     pub classification: Option<Classification>,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/detection/mod.rs:48:5
[INFO] [stdout]    |
[INFO] [stdout] 48 |     pub location: Option<[f64; 3]>,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/detection/mod.rs:51:5
[INFO] [stdout]    |
[INFO] [stdout] 51 |     pub data_window_start: DateTime<Utc>,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/detection/mod.rs:52:5
[INFO] [stdout]    |
[INFO] [stdout] 52 |     pub data_window_end: DateTime<Utc>,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/detection/mod.rs:58:5
[INFO] [stdout]    |
[INFO] [stdout] 58 |     pub sensor_id: String,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/detection/mod.rs:59:5
[INFO] [stdout]    |
[INFO] [stdout] 59 |     pub sensor_type: SensorType,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/detection/mod.rs:60:5
[INFO] [stdout]    |
[INFO] [stdout] 60 |     pub weight: f64,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/detection/mod.rs:61:5
[INFO] [stdout]    |
[INFO] [stdout] 61 |     pub reading_value: f64,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/detection/mod.rs:62:5
[INFO] [stdout]    |
[INFO] [stdout] 62 |     pub anomaly_score: f64,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]   --> src/detection/mod.rs:69:5
[INFO] [stdout]    |
[INFO] [stdout] 69 |     ThermalAnomaly,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]   --> src/detection/mod.rs:70:5
[INFO] [stdout]    |
[INFO] [stdout] 70 |     TemperatureGradient,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]   --> src/detection/mod.rs:71:5
[INFO] [stdout]    |
[INFO] [stdout] 71 |     ColdSpot,
[INFO] [stdout]    |     ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]   --> src/detection/mod.rs:72:5
[INFO] [stdout]    |
[INFO] [stdout] 72 |     HotSpot,
[INFO] [stdout]    |     ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]   --> src/detection/mod.rs:75:5
[INFO] [stdout]    |
[INFO] [stdout] 75 |     InfrasoundEvent,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]   --> src/detection/mod.rs:76:5
[INFO] [stdout]    |
[INFO] [stdout] 76 |     UltrasonicEvent,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]   --> src/detection/mod.rs:77:5
[INFO] [stdout]    |
[INFO] [stdout] 77 |     EVP,  // Electronic Voice Phenomena
[INFO] [stdout]    |     ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]   --> src/detection/mod.rs:78:5
[INFO] [stdout]    |
[INFO] [stdout] 78 |     UnexplainedSound,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]   --> src/detection/mod.rs:81:5
[INFO] [stdout]    |
[INFO] [stdout] 81 |     EMFSpike,
[INFO] [stdout]    |     ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]   --> src/detection/mod.rs:82:5
[INFO] [stdout]    |
[INFO] [stdout] 82 |     EMFFluctuation,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]   --> src/detection/mod.rs:83:5
[INFO] [stdout]    |
[INFO] [stdout] 83 |     MagneticAnomaly,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]   --> src/detection/mod.rs:84:5
[INFO] [stdout]    |
[INFO] [stdout] 84 |     StaticDischarge,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]   --> src/detection/mod.rs:87:5
[INFO] [stdout]    |
[INFO] [stdout] 87 |     SeismicEvent,
[INFO] [stdout]    |     ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]   --> src/detection/mod.rs:88:5
[INFO] [stdout]    |
[INFO] [stdout] 88 |     Vibration,
[INFO] [stdout]    |     ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]   --> src/detection/mod.rs:89:5
[INFO] [stdout]    |
[INFO] [stdout] 89 |     Movement,
[INFO] [stdout]    |     ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]   --> src/detection/mod.rs:92:5
[INFO] [stdout]    |
[INFO] [stdout] 92 |     RadiationSpike,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]   --> src/detection/mod.rs:93:5
[INFO] [stdout]    |
[INFO] [stdout] 93 |     IonizationChange,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]   --> src/detection/mod.rs:96:5
[INFO] [stdout]    |
[INFO] [stdout] 96 |     RFAnomaly,
[INFO] [stdout]    |     ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]   --> src/detection/mod.rs:97:5
[INFO] [stdout]    |
[INFO] [stdout] 97 |     InterferencePattern,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]    --> src/detection/mod.rs:100:5
[INFO] [stdout]     |
[INFO] [stdout] 100 |     LightAnomaly,
[INFO] [stdout]     |     ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]    --> src/detection/mod.rs:101:5
[INFO] [stdout]     |
[INFO] [stdout] 101 |     LaserInterruption,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]    --> src/detection/mod.rs:102:5
[INFO] [stdout]     |
[INFO] [stdout] 102 |     SpectrumAnomaly,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]    --> src/detection/mod.rs:105:5
[INFO] [stdout]     |
[INFO] [stdout] 105 |     EntropyAnomaly,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]    --> src/detection/mod.rs:106:5
[INFO] [stdout]     |
[INFO] [stdout] 106 |     QRNGDeviation,
[INFO] [stdout]     |     ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]    --> src/detection/mod.rs:109:5
[INFO] [stdout]     |
[INFO] [stdout] 109 |     CorrelatedAnomaly,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]    --> src/detection/mod.rs:110:5
[INFO] [stdout]     |
[INFO] [stdout] 110 |     SensorFusionEvent,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]    --> src/detection/mod.rs:113:5
[INFO] [stdout]     |
[INFO] [stdout] 113 |     Unknown,
[INFO] [stdout]     |     ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]    --> src/detection/mod.rs:119:5
[INFO] [stdout]     |
[INFO] [stdout] 119 |     Low,
[INFO] [stdout]     |     ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]    --> src/detection/mod.rs:120:5
[INFO] [stdout]     |
[INFO] [stdout] 120 |     Medium,
[INFO] [stdout]     |     ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]    --> src/detection/mod.rs:121:5
[INFO] [stdout]     |
[INFO] [stdout] 121 |     High,
[INFO] [stdout]     |     ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]    --> src/detection/mod.rs:122:5
[INFO] [stdout]     |
[INFO] [stdout] 122 |     Critical,
[INFO] [stdout]     |     ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/detection/mod.rs:128:5
[INFO] [stdout]     |
[INFO] [stdout] 128 |     pub category: String,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/detection/mod.rs:129:5
[INFO] [stdout]     |
[INFO] [stdout] 129 |     pub subcategory: Option<String>,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/detection/mod.rs:130:5
[INFO] [stdout]     |
[INFO] [stdout] 130 |     pub confidence: f64,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/detection/mod.rs:131:5
[INFO] [stdout]     |
[INFO] [stdout] 131 |     pub model_version: String,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for an associated function
[INFO] [stdout]    --> src/detection/mod.rs:148:5
[INFO] [stdout]     |
[INFO] [stdout] 148 |     pub async fn new(config: Arc<Config>, event_bus: Arc<EventBus>) -> Result<Self> {
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a method
[INFO] [stdout]    --> src/detection/mod.rs:160:5
[INFO] [stdout]     |
[INFO] [stdout] 160 |     pub async fn run(&self, mut shutdown: broadcast::Receiver<()>) -> Result<()> {
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a method
[INFO] [stdout]    --> src/detection/mod.rs:252:5
[INFO] [stdout]     |
[INFO] [stdout] 252 |     pub async fn get_detection_count(&self) -> usize {
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a method
[INFO] [stdout]    --> src/detection/mod.rs:256:5
[INFO] [stdout]     |
[INFO] [stdout] 256 |     pub async fn get_recent_detections(&self, limit: usize) -> Vec<Detection> {
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/detection/fusion.rs:17:5
[INFO] [stdout]    |
[INFO] [stdout] 17 |     pub confidence: f64,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/detection/fusion.rs:18:5
[INFO] [stdout]    |
[INFO] [stdout] 18 |     pub detection_type: DetectionType,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/detection/fusion.rs:19:5
[INFO] [stdout]    |
[INFO] [stdout] 19 |     pub sensors: Vec<SensorContribution>,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/detection/fusion.rs:20:5
[INFO] [stdout]    |
[INFO] [stdout] 20 |     pub belief_mass: HashMap<String, f64>,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/detection/fusion.rs:39:5
[INFO] [stdout]    |
[INFO] [stdout] 39 |     pub anomaly: f64,      // m({anomaly})
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/detection/fusion.rs:40:5
[INFO] [stdout]    |
[INFO] [stdout] 40 |     pub normal: f64,       // m({normal})
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/detection/fusion.rs:41:5
[INFO] [stdout]    |
[INFO] [stdout] 41 |     pub uncertainty: f64,  // m(Θ) - complete uncertainty
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for an associated function
[INFO] [stdout]   --> src/detection/fusion.rs:45:5
[INFO] [stdout]    |
[INFO] [stdout] 45 |     pub fn new() -> Self {
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/detection/classification.rs:16:5
[INFO] [stdout]    |
[INFO] [stdout] 16 |     pub name: String,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/detection/classification.rs:17:5
[INFO] [stdout]    |
[INFO] [stdout] 17 |     pub description: String,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/detection/classification.rs:18:5
[INFO] [stdout]    |
[INFO] [stdout] 18 |     pub typical_signatures: Vec<String>,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for an associated function
[INFO] [stdout]   --> src/detection/classification.rs:28:5
[INFO] [stdout]    |
[INFO] [stdout] 28 |     pub fn new() -> Self {
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct
[INFO] [stdout]    --> src/detection/classification.rs:208:1
[INFO] [stdout]     |
[INFO] [stdout] 208 | pub struct ClassificationResult {
[INFO] [stdout]     | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/detection/classification.rs:209:5
[INFO] [stdout]     |
[INFO] [stdout] 209 |     pub category: String,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/detection/classification.rs:210:5
[INFO] [stdout]     |
[INFO] [stdout] 210 |     pub confidence: f64,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/detection/classification.rs:211:5
[INFO] [stdout]     |
[INFO] [stdout] 211 |     pub all_scores: HashMap<String, f64>,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/detection/classification.rs:212:5
[INFO] [stdout]     |
[INFO] [stdout] 212 |     pub features: HashMap<String, f64>,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/detection/correlation.rs:17:5
[INFO] [stdout]    |
[INFO] [stdout] 17 |     pub timestamp: DateTime<Utc>,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/detection/correlation.rs:18:5
[INFO] [stdout]    |
[INFO] [stdout] 18 |     pub sensors: Vec<SensorContribution>,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/detection/correlation.rs:19:5
[INFO] [stdout]    |
[INFO] [stdout] 19 |     pub confidence: f64,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/detection/correlation.rs:20:5
[INFO] [stdout]    |
[INFO] [stdout] 20 |     pub lag_ms: i64,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for an associated function
[INFO] [stdout]   --> src/detection/correlation.rs:43:5
[INFO] [stdout]    |
[INFO] [stdout] 43 |     pub fn new() -> Self {
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/streaming/mod.rs:27:5
[INFO] [stdout]    |
[INFO] [stdout] 27 |     pub mqtt_broker: String,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/streaming/mod.rs:28:5
[INFO] [stdout]    |
[INFO] [stdout] 28 |     pub mqtt_port: u16,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/streaming/mod.rs:29:5
[INFO] [stdout]    |
[INFO] [stdout] 29 |     pub mqtt_client_id: String,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/streaming/mod.rs:30:5
[INFO] [stdout]    |
[INFO] [stdout] 30 |     pub mqtt_username: Option<String>,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/streaming/mod.rs:31:5
[INFO] [stdout]    |
[INFO] [stdout] 31 |     pub mqtt_password: Option<String>,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/streaming/mod.rs:32:5
[INFO] [stdout]    |
[INFO] [stdout] 32 |     pub mqtt_use_tls: bool,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/streaming/mod.rs:36:5
[INFO] [stdout]    |
[INFO] [stdout] 36 |     pub websocket_port: u16,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/streaming/mod.rs:37:5
[INFO] [stdout]    |
[INFO] [stdout] 37 |     pub websocket_max_clients: usize,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/streaming/mod.rs:41:5
[INFO] [stdout]    |
[INFO] [stdout] 41 |     pub export_format: ExportFormat,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/streaming/mod.rs:42:5
[INFO] [stdout]    |
[INFO] [stdout] 42 |     pub export_path: String,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]   --> src/streaming/mod.rs:70:5
[INFO] [stdout]    |
[INFO] [stdout] 70 |     Json,
[INFO] [stdout]    |     ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]   --> src/streaming/mod.rs:71:5
[INFO] [stdout]    |
[INFO] [stdout] 71 |     Csv,
[INFO] [stdout]    |     ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]   --> src/streaming/mod.rs:72:5
[INFO] [stdout]    |
[INFO] [stdout] 72 |     Binary,
[INFO] [stdout]    |     ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]   --> src/streaming/mod.rs:73:5
[INFO] [stdout]    |
[INFO] [stdout] 73 |     InfluxLineProtocol,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for an associated function
[INFO] [stdout]   --> src/streaming/mod.rs:85:5
[INFO] [stdout]    |
[INFO] [stdout] 85 |     pub async fn new(config: StreamingConfig) -> Result<Self> {
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a method
[INFO] [stdout]    --> src/streaming/mod.rs:108:5
[INFO] [stdout]     |
[INFO] [stdout] 108 |     pub async fn start(&mut self, shutdown: broadcast::Receiver<()>) -> Result<()> {
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a method
[INFO] [stdout]    --> src/streaming/mod.rs:120:5
[INFO] [stdout]     |
[INFO] [stdout] 120 |     pub async fn publish_reading(&self, reading: &crate::sensors::SensorReading) -> Result<()> {
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a method
[INFO] [stdout]    --> src/streaming/mod.rs:140:5
[INFO] [stdout]     |
[INFO] [stdout] 140 |     pub async fn publish_detection(&self, detection: &crate::detection::Detection) -> Result<()> {
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct
[INFO] [stdout]   --> src/streaming/mqtt.rs:24:1
[INFO] [stdout]    |
[INFO] [stdout] 24 | pub struct MqttConfig {
[INFO] [stdout]    | ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/streaming/mqtt.rs:25:5
[INFO] [stdout]    |
[INFO] [stdout] 25 |     pub broker: String,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/streaming/mqtt.rs:26:5
[INFO] [stdout]    |
[INFO] [stdout] 26 |     pub port: u16,
[INFO] [stdout]    |     ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/streaming/mqtt.rs:27:5
[INFO] [stdout]    |
[INFO] [stdout] 27 |     pub client_id: String,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/streaming/mqtt.rs:28:5
[INFO] [stdout]    |
[INFO] [stdout] 28 |     pub username: Option<String>,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/streaming/mqtt.rs:29:5
[INFO] [stdout]    |
[INFO] [stdout] 29 |     pub password: Option<String>,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/streaming/mqtt.rs:30:5
[INFO] [stdout]    |
[INFO] [stdout] 30 |     pub use_tls: bool,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/streaming/mqtt.rs:31:5
[INFO] [stdout]    |
[INFO] [stdout] 31 |     pub keep_alive_secs: u64,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/streaming/mqtt.rs:32:5
[INFO] [stdout]    |
[INFO] [stdout] 32 |     pub reconnect_interval_ms: u64,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for an associated function
[INFO] [stdout]   --> src/streaming/mqtt.rs:36:5
[INFO] [stdout]    |
[INFO] [stdout] 36 |     pub async fn new(config: &StreamingConfig) -> Result<Self> {
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a method
[INFO] [stdout]   --> src/streaming/mqtt.rs:94:5
[INFO] [stdout]    |
[INFO] [stdout] 94 |     pub async fn connect(&self) -> Result<()> {
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a method
[INFO] [stdout]    --> src/streaming/mqtt.rs:101:5
[INFO] [stdout]     |
[INFO] [stdout] 101 |     pub async fn publish<T: Serialize>(&self, topic: &str, payload: &T) -> Result<()> {
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a method
[INFO] [stdout]    --> src/streaming/mqtt.rs:111:5
[INFO] [stdout]     |
[INFO] [stdout] 111 |     pub async fn publish_raw(&self, topic: &str, payload: &[u8]) -> Result<()> {
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a method
[INFO] [stdout]    --> src/streaming/mqtt.rs:119:5
[INFO] [stdout]     |
[INFO] [stdout] 119 |     pub async fn subscribe(&self, topic: &str) -> Result<()> {
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a method
[INFO] [stdout]    --> src/streaming/mqtt.rs:128:5
[INFO] [stdout]     |
[INFO] [stdout] 128 |     pub async fn disconnect(&self) -> Result<()> {
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a method
[INFO] [stdout]    --> src/streaming/mqtt.rs:137:5
[INFO] [stdout]     |
[INFO] [stdout] 137 |     pub async fn is_connected(&self) -> bool {
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/streaming/mqtt.rs:145:5
[INFO] [stdout]     |
[INFO] [stdout] 145 |     pub topic: String,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/streaming/mqtt.rs:146:5
[INFO] [stdout]     |
[INFO] [stdout] 146 |     pub payload: Vec<u8>,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/streaming/mqtt.rs:147:5
[INFO] [stdout]     |
[INFO] [stdout] 147 |     pub qos: u8,
[INFO] [stdout]     |     ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/streaming/mqtt.rs:148:5
[INFO] [stdout]     |
[INFO] [stdout] 148 |     pub retain: bool,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for an enum
[INFO] [stdout]   --> src/streaming/websocket.rs:35:1
[INFO] [stdout]    |
[INFO] [stdout] 35 | pub enum WebSocketMessage {
[INFO] [stdout]    | ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]   --> src/streaming/websocket.rs:36:5
[INFO] [stdout]    |
[INFO] [stdout] 36 |     SensorReading(String),  // JSON
[INFO] [stdout]    |     ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]   --> src/streaming/websocket.rs:37:5
[INFO] [stdout]    |
[INFO] [stdout] 37 |     Detection(String),      // JSON
[INFO] [stdout]    |     ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]   --> src/streaming/websocket.rs:38:5
[INFO] [stdout]    |
[INFO] [stdout] 38 |     System(String),         // System message
[INFO] [stdout]    |     ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for an associated function
[INFO] [stdout]   --> src/streaming/websocket.rs:42:5
[INFO] [stdout]    |
[INFO] [stdout] 42 |     pub fn new(port: u16, max_clients: usize) -> Self {
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a method
[INFO] [stdout]   --> src/streaming/websocket.rs:53:5
[INFO] [stdout]    |
[INFO] [stdout] 53 |     pub async fn start(&self, mut shutdown: broadcast::Receiver<()>) -> Result<()> {
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a method
[INFO] [stdout]   --> src/streaming/websocket.rs:96:5
[INFO] [stdout]    |
[INFO] [stdout] 96 |     pub async fn broadcast<T: Serialize>(&self, data: &T) -> Result<()> {
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a method
[INFO] [stdout]    --> src/streaming/websocket.rs:102:5
[INFO] [stdout]     |
[INFO] [stdout] 102 |     pub async fn broadcast_detection(&self, detection: &Detection) -> Result<()> {
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a method
[INFO] [stdout]    --> src/streaming/websocket.rs:108:5
[INFO] [stdout]     |
[INFO] [stdout] 108 |     pub async fn send_to_client(&self, client_id: &str, message: &str) -> Result<()> {
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a method
[INFO] [stdout]    --> src/streaming/websocket.rs:113:5
[INFO] [stdout]     |
[INFO] [stdout] 113 |     pub async fn get_client_count(&self) -> usize {
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a method
[INFO] [stdout]    --> src/streaming/websocket.rs:117:5
[INFO] [stdout]     |
[INFO] [stdout] 117 |     pub async fn get_client_addrs(&self) -> Vec<SocketAddr> {
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for an associated function
[INFO] [stdout]   --> src/streaming/export.rs:31:5
[INFO] [stdout]    |
[INFO] [stdout] 31 |     pub fn new(path: &str, format: ExportFormat) -> Result<Self> {
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for an associated function
[INFO] [stdout]    --> src/streaming/export.rs:265:5
[INFO] [stdout]     |
[INFO] [stdout] 265 |     pub fn new(format: ExportFormat) -> Self {
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for an associated function
[INFO] [stdout]   --> src/security/mod.rs:66:5
[INFO] [stdout]    |
[INFO] [stdout] 66 |     pub fn new(config: SecurityConfig) -> Result<Self> {
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/security/mod.rs:121:5
[INFO] [stdout]     |
[INFO] [stdout] 121 |     pub timestamp: chrono::DateTime<chrono::Utc>,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/security/mod.rs:122:5
[INFO] [stdout]     |
[INFO] [stdout] 122 |     pub event_type: AuditEventType,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/security/mod.rs:123:5
[INFO] [stdout]     |
[INFO] [stdout] 123 |     pub description: String,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/security/mod.rs:124:5
[INFO] [stdout]     |
[INFO] [stdout] 124 |     pub user: Option<String>,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/security/mod.rs:125:5
[INFO] [stdout]     |
[INFO] [stdout] 125 |     pub ip_address: Option<String>,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/security/mod.rs:126:5
[INFO] [stdout]     |
[INFO] [stdout] 126 |     pub success: bool,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for an enum
[INFO] [stdout]    --> src/security/mod.rs:130:1
[INFO] [stdout]     |
[INFO] [stdout] 130 | pub enum AuditEventType {
[INFO] [stdout]     | ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]    --> src/security/mod.rs:131:5
[INFO] [stdout]     |
[INFO] [stdout] 131 |     Login,
[INFO] [stdout]     |     ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]    --> src/security/mod.rs:132:5
[INFO] [stdout]     |
[INFO] [stdout] 132 |     Logout,
[INFO] [stdout]     |     ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]    --> src/security/mod.rs:133:5
[INFO] [stdout]     |
[INFO] [stdout] 133 |     PasswordChange,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]    --> src/security/mod.rs:134:5
[INFO] [stdout]     |
[INFO] [stdout] 134 |     DataAccess,
[INFO] [stdout]     |     ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]    --> src/security/mod.rs:135:5
[INFO] [stdout]     |
[INFO] [stdout] 135 |     DataExport,
[INFO] [stdout]     |     ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]    --> src/security/mod.rs:136:5
[INFO] [stdout]     |
[INFO] [stdout] 136 |     ConfigChange,
[INFO] [stdout]     |     ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]    --> src/security/mod.rs:137:5
[INFO] [stdout]     |
[INFO] [stdout] 137 |     SessionExpired,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]    --> src/security/mod.rs:138:5
[INFO] [stdout]     |
[INFO] [stdout] 138 |     AuthFailure,
[INFO] [stdout]     |     ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]    --> src/security/mod.rs:139:5
[INFO] [stdout]     |
[INFO] [stdout] 139 |     EncryptionOperation,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]    --> src/security/mod.rs:140:5
[INFO] [stdout]     |
[INFO] [stdout] 140 |     SystemStart,
[INFO] [stdout]     |     ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]    --> src/security/mod.rs:141:5
[INFO] [stdout]     |
[INFO] [stdout] 141 |     SystemStop,
[INFO] [stdout]     |     ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for an associated function
[INFO] [stdout]    --> src/security/mod.rs:150:5
[INFO] [stdout]     |
[INFO] [stdout] 150 |     pub fn new() -> Self {
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a method
[INFO] [stdout]    --> src/security/mod.rs:156:5
[INFO] [stdout]     |
[INFO] [stdout] 156 |     pub fn log(&self, event: AuditEvent) {
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a method
[INFO] [stdout]    --> src/security/mod.rs:173:5
[INFO] [stdout]     |
[INFO] [stdout] 173 |     pub fn get_events(&self, limit: usize) -> Vec<AuditEvent> {
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for an associated function
[INFO] [stdout]   --> src/security/encryption.rs:87:5
[INFO] [stdout]    |
[INFO] [stdout] 87 |     pub fn new() -> Result<Self> {
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for an associated function
[INFO] [stdout]   --> src/security/encryption.rs:93:5
[INFO] [stdout]    |
[INFO] [stdout] 93 |     pub fn with_key(key: [u8; 32]) -> Self {
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a method
[INFO] [stdout]   --> src/security/encryption.rs:97:5
[INFO] [stdout]    |
[INFO] [stdout] 97 |     pub fn encrypt(&self, plaintext: &[u8]) -> Result<Vec<u8>> {
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a method
[INFO] [stdout]    --> src/security/encryption.rs:116:5
[INFO] [stdout]     |
[INFO] [stdout] 116 |     pub fn decrypt(&self, data: &[u8]) -> Result<Vec<u8>> {
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct
[INFO] [stdout]   --> src/security/keystore.rs:29:1
[INFO] [stdout]    |
[INFO] [stdout] 29 | pub struct EncryptedKey {
[INFO] [stdout]    | ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for an enum
[INFO] [stdout]   --> src/security/keystore.rs:47:1
[INFO] [stdout]    |
[INFO] [stdout] 47 | pub enum KeyType {
[INFO] [stdout]    | ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]   --> src/security/keystore.rs:48:5
[INFO] [stdout]    |
[INFO] [stdout] 48 |     DataEncryption,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]   --> src/security/keystore.rs:49:5
[INFO] [stdout]    |
[INFO] [stdout] 49 |     NetworkEncryption,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]   --> src/security/keystore.rs:50:5
[INFO] [stdout]    |
[INFO] [stdout] 50 |     SigningKey,
[INFO] [stdout]    |     ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]   --> src/security/keystore.rs:51:5
[INFO] [stdout]    |
[INFO] [stdout] 51 |     APIKey,
[INFO] [stdout]    |     ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]   --> src/security/keystore.rs:52:5
[INFO] [stdout]    |
[INFO] [stdout] 52 |     SessionKey,
[INFO] [stdout]    |     ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for an associated function
[INFO] [stdout]   --> src/security/keystore.rs:56:5
[INFO] [stdout]    |
[INFO] [stdout] 56 |     pub fn new() -> Result<Self> {
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/security/auth.rs:38:5
[INFO] [stdout]    |
[INFO] [stdout] 38 |     pub id: String,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/security/auth.rs:39:5
[INFO] [stdout]    |
[INFO] [stdout] 39 |     pub user_id: String,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/security/auth.rs:40:5
[INFO] [stdout]    |
[INFO] [stdout] 40 |     pub created_at: DateTime<Utc>,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/security/auth.rs:41:5
[INFO] [stdout]    |
[INFO] [stdout] 41 |     pub expires_at: DateTime<Utc>,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/security/auth.rs:42:5
[INFO] [stdout]    |
[INFO] [stdout] 42 |     pub ip_address: Option<String>,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/security/auth.rs:43:5
[INFO] [stdout]    |
[INFO] [stdout] 43 |     pub user_agent: Option<String>,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/security/auth.rs:44:5
[INFO] [stdout]    |
[INFO] [stdout] 44 |     pub is_active: bool,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable `match_m1` is assigned to, but never used
[INFO] [stdout]    --> src/analysis/entropy.rs:196:21
[INFO] [stdout]     |
[INFO] [stdout] 196 |                 let mut match_m1 = true;
[INFO] [stdout]     |                     ^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: consider using `_match_m1` instead
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/security/auth.rs:50:5
[INFO] [stdout]    |
[INFO] [stdout] 50 |     pub score: u32,  // 0-4 (weak to very strong)
[INFO] [stdout]    |     ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/security/auth.rs:51:5
[INFO] [stdout]    |
[INFO] [stdout] 51 |     pub feedback: Vec<String>,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/security/auth.rs:52:5
[INFO] [stdout]    |
[INFO] [stdout] 52 |     pub acceptable: bool,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for an associated function
[INFO] [stdout]   --> src/security/auth.rs:56:5
[INFO] [stdout]    |
[INFO] [stdout] 56 |     pub fn new(min_password_length: usize) -> Self {
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for an associated function
[INFO] [stdout]   --> src/security/secure_memory.rs:17:5
[INFO] [stdout]    |
[INFO] [stdout] 17 |     pub fn new(size: usize) -> Self {
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for an associated function
[INFO] [stdout]   --> src/security/secure_memory.rs:23:5
[INFO] [stdout]    |
[INFO] [stdout] 23 |     pub fn from_slice(slice: &[u8]) -> Self {
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a method
[INFO] [stdout]   --> src/security/secure_memory.rs:29:5
[INFO] [stdout]    |
[INFO] [stdout] 29 |     pub fn len(&self) -> usize {
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a method
[INFO] [stdout]   --> src/security/secure_memory.rs:33:5
[INFO] [stdout]    |
[INFO] [stdout] 33 |     pub fn is_empty(&self) -> bool {
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a method
[INFO] [stdout]   --> src/security/secure_memory.rs:37:5
[INFO] [stdout]    |
[INFO] [stdout] 37 |     pub fn clear(&mut self) {
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for an associated function
[INFO] [stdout]   --> src/security/secure_memory.rs:69:5
[INFO] [stdout]    |
[INFO] [stdout] 69 |     pub fn new(s: &str) -> Self {
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for an associated function
[INFO] [stdout]   --> src/security/secure_memory.rs:75:5
[INFO] [stdout]    |
[INFO] [stdout] 75 |     pub fn from_string(s: String) -> Self {
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a method
[INFO] [stdout]   --> src/security/secure_memory.rs:79:5
[INFO] [stdout]    |
[INFO] [stdout] 79 |     pub fn as_str(&self) -> &str {
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a method
[INFO] [stdout]   --> src/security/secure_memory.rs:83:5
[INFO] [stdout]    |
[INFO] [stdout] 83 |     pub fn len(&self) -> usize {
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a method
[INFO] [stdout]   --> src/security/secure_memory.rs:87:5
[INFO] [stdout]    |
[INFO] [stdout] 87 |     pub fn is_empty(&self) -> bool {
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for an associated function
[INFO] [stdout]    --> src/security/secure_memory.rs:119:5
[INFO] [stdout]     |
[INFO] [stdout] 119 |     pub fn new(size: usize) -> Self {
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for an associated function
[INFO] [stdout]    --> src/security/secure_memory.rs:128:5
[INFO] [stdout]     |
[INFO] [stdout] 128 |     pub fn from_slice(slice: &[u8]) -> Self {
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a method
[INFO] [stdout]    --> src/security/secure_memory.rs:160:5
[INFO] [stdout]     |
[INFO] [stdout] 160 |     pub fn is_locked(&self) -> bool {
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for an enum
[INFO] [stdout]    --> src/config/mod.rs:239:1
[INFO] [stdout]     |
[INFO] [stdout] 239 | pub enum FusionMethod {
[INFO] [stdout]     | ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]    --> src/config/mod.rs:240:5
[INFO] [stdout]     |
[INFO] [stdout] 240 |     Bayesian,
[INFO] [stdout]     |     ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]    --> src/config/mod.rs:241:5
[INFO] [stdout]     |
[INFO] [stdout] 241 |     DempsterShafer,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]    --> src/config/mod.rs:242:5
[INFO] [stdout]     |
[INFO] [stdout] 242 |     WeightedAverage,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for an enum
[INFO] [stdout]    --> src/config/mod.rs:246:1
[INFO] [stdout]     |
[INFO] [stdout] 246 | pub enum Severity {
[INFO] [stdout]     | ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]    --> src/config/mod.rs:247:5
[INFO] [stdout]     |
[INFO] [stdout] 247 |     Low,
[INFO] [stdout]     |     ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]    --> src/config/mod.rs:248:5
[INFO] [stdout]     |
[INFO] [stdout] 248 |     Medium,
[INFO] [stdout]     |     ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]    --> src/config/mod.rs:249:5
[INFO] [stdout]     |
[INFO] [stdout] 249 |     High,
[INFO] [stdout]     |     ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]    --> src/config/mod.rs:250:5
[INFO] [stdout]     |
[INFO] [stdout] 250 |     Critical,
[INFO] [stdout]     |     ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for an enum
[INFO] [stdout]    --> src/config/mod.rs:301:1
[INFO] [stdout]     |
[INFO] [stdout] 301 | pub enum Theme {
[INFO] [stdout]     | ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]    --> src/config/mod.rs:302:5
[INFO] [stdout]     |
[INFO] [stdout] 302 |     Dark,
[INFO] [stdout]     |     ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]    --> src/config/mod.rs:303:5
[INFO] [stdout]     |
[INFO] [stdout] 303 |     Light,
[INFO] [stdout]     |     ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]    --> src/config/mod.rs:304:5
[INFO] [stdout]     |
[INFO] [stdout] 304 |     System,
[INFO] [stdout]     |     ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: value assigned to `match_m1` is never read
[INFO] [stdout]    --> src/analysis/entropy.rs:202:25
[INFO] [stdout]     |
[INFO] [stdout] 202 |                         match_m1 = false;
[INFO] [stdout]     |                         ^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = help: maybe it is overwritten before being read?
[INFO] [stdout]     = note: `#[warn(unused_assignments)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for an enum
[INFO] [stdout]    --> src/config/mod.rs:308:1
[INFO] [stdout]     |
[INFO] [stdout] 308 | pub enum Colormap {
[INFO] [stdout]     | ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]    --> src/config/mod.rs:309:5
[INFO] [stdout]     |
[INFO] [stdout] 309 |     Inferno,
[INFO] [stdout]     |     ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]    --> src/config/mod.rs:310:5
[INFO] [stdout]     |
[INFO] [stdout] 310 |     Viridis,
[INFO] [stdout]     |     ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]    --> src/config/mod.rs:311:5
[INFO] [stdout]     |
[INFO] [stdout] 311 |     Plasma,
[INFO] [stdout]     |     ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]    --> src/config/mod.rs:312:5
[INFO] [stdout]     |
[INFO] [stdout] 312 |     Magma,
[INFO] [stdout]     |     ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]    --> src/config/mod.rs:313:5
[INFO] [stdout]     |
[INFO] [stdout] 313 |     Turbo,
[INFO] [stdout]     |     ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]    --> src/config/mod.rs:314:5
[INFO] [stdout]     |
[INFO] [stdout] 314 |     Grayscale,
[INFO] [stdout]     |     ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct
[INFO] [stdout]    --> src/db/mod.rs:388:1
[INFO] [stdout]     |
[INFO] [stdout] 388 | pub struct StoredReading {
[INFO] [stdout]     | ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/db/mod.rs:389:5
[INFO] [stdout]     |
[INFO] [stdout] 389 |     pub id: i64,
[INFO] [stdout]     |     ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/db/mod.rs:390:5
[INFO] [stdout]     |
[INFO] [stdout] 390 |     pub timestamp: String,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/db/mod.rs:391:5
[INFO] [stdout]     |
[INFO] [stdout] 391 |     pub sensor_id: String,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/db/mod.rs:392:5
[INFO] [stdout]     |
[INFO] [stdout] 392 |     pub sensor_type: String,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/db/mod.rs:393:5
[INFO] [stdout]     |
[INFO] [stdout] 393 |     pub quality: f32,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/db/mod.rs:394:5
[INFO] [stdout]     |
[INFO] [stdout] 394 |     pub data: Vec<u8>,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct
[INFO] [stdout]    --> src/db/mod.rs:398:1
[INFO] [stdout]     |
[INFO] [stdout] 398 | pub struct StoredDetection {
[INFO] [stdout]     | ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/db/mod.rs:399:5
[INFO] [stdout]     |
[INFO] [stdout] 399 |     pub id: String,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/db/mod.rs:400:5
[INFO] [stdout]     |
[INFO] [stdout] 400 |     pub timestamp: String,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/db/mod.rs:401:5
[INFO] [stdout]     |
[INFO] [stdout] 401 |     pub detection_type: String,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/db/mod.rs:402:5
[INFO] [stdout]     |
[INFO] [stdout] 402 |     pub confidence: f64,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/db/mod.rs:403:5
[INFO] [stdout]     |
[INFO] [stdout] 403 |     pub severity: String,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/db/mod.rs:404:5
[INFO] [stdout]     |
[INFO] [stdout] 404 |     pub sensor_count: i32,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/db/mod.rs:405:5
[INFO] [stdout]     |
[INFO] [stdout] 405 |     pub data: Vec<u8>,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct
[INFO] [stdout]    --> src/db/mod.rs:409:1
[INFO] [stdout]     |
[INFO] [stdout] 409 | pub struct DatabaseStats {
[INFO] [stdout]     | ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/db/mod.rs:410:5
[INFO] [stdout]     |
[INFO] [stdout] 410 |     pub reading_count: usize,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/db/mod.rs:411:5
[INFO] [stdout]     |
[INFO] [stdout] 411 |     pub detection_count: usize,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/db/mod.rs:412:5
[INFO] [stdout]     |
[INFO] [stdout] 412 |     pub size_bytes: u64,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for an associated function
[INFO] [stdout]    --> src/gpu/mod.rs:121:5
[INFO] [stdout]     |
[INFO] [stdout] 121 |     pub fn new(device: &wgpu::Device) -> Result<Self> {
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a method
[INFO] [stdout]    --> src/gpu/mod.rs:185:5
[INFO] [stdout]     |
[INFO] [stdout] 185 |     pub async fn compute(&self, device: &wgpu::Device, queue: &wgpu::Queue, data: &[f32]) -> Result<f32> {
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for an associated function
[INFO] [stdout]    --> src/gpu/mod.rs:292:5
[INFO] [stdout]     |
[INFO] [stdout] 292 |     pub fn new(device: &wgpu::Device) -> Result<Self> {
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a method
[INFO] [stdout]    --> src/gpu/mod.rs:345:5
[INFO] [stdout]     |
[INFO] [stdout] 345 |     pub async fn compute(&self, device: &wgpu::Device, queue: &wgpu::Queue, data: &[f32]) -> Result<Vec<f32>> {
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for an associated function
[INFO] [stdout]   --> src/gpu/buffers.rs:19:5
[INFO] [stdout]    |
[INFO] [stdout] 19 |     pub fn new(device: &wgpu::Device, capacity: u64) -> Self {
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a method
[INFO] [stdout]   --> src/gpu/buffers.rs:37:5
[INFO] [stdout]    |
[INFO] [stdout] 37 |     pub fn push(&mut self, queue: &wgpu::Queue, data: &[u8]) {
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a method
[INFO] [stdout]   --> src/gpu/buffers.rs:61:5
[INFO] [stdout]    |
[INFO] [stdout] 61 |     pub fn buffer(&self) -> &wgpu::Buffer {
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a method
[INFO] [stdout]   --> src/gpu/buffers.rs:65:5
[INFO] [stdout]    |
[INFO] [stdout] 65 |     pub fn len(&self) -> u64 {
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a method
[INFO] [stdout]   --> src/gpu/buffers.rs:69:5
[INFO] [stdout]    |
[INFO] [stdout] 69 |     pub fn capacity(&self) -> u64 {
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for an associated function
[INFO] [stdout]   --> src/gpu/buffers.rs:82:5
[INFO] [stdout]    |
[INFO] [stdout] 82 |     pub fn new(device: &wgpu::Device, size: u64) -> Self {
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a method
[INFO] [stdout]    --> src/gpu/buffers.rs:109:5
[INFO] [stdout]     |
[INFO] [stdout] 109 |     pub fn current(&self) -> &wgpu::Buffer {
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a method
[INFO] [stdout]    --> src/gpu/buffers.rs:113:5
[INFO] [stdout]     |
[INFO] [stdout] 113 |     pub fn previous(&self) -> &wgpu::Buffer {
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a method
[INFO] [stdout]    --> src/gpu/buffers.rs:117:5
[INFO] [stdout]     |
[INFO] [stdout] 117 |     pub fn swap(&mut self) {
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a method
[INFO] [stdout]    --> src/gpu/buffers.rs:121:5
[INFO] [stdout]     |
[INFO] [stdout] 121 |     pub fn write_current(&self, queue: &wgpu::Queue, data: &[u8]) {
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for an associated function
[INFO] [stdout]    --> src/gpu/buffers.rs:133:5
[INFO] [stdout]     |
[INFO] [stdout] 133 |     pub fn new(device: &wgpu::Device, data: &T) -> Self {
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a method
[INFO] [stdout]    --> src/gpu/buffers.rs:146:5
[INFO] [stdout]     |
[INFO] [stdout] 146 |     pub fn update(&self, queue: &wgpu::Queue, data: &T) {
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a method
[INFO] [stdout]    --> src/gpu/buffers.rs:150:5
[INFO] [stdout]     |
[INFO] [stdout] 150 |     pub fn buffer(&self) -> &wgpu::Buffer {
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for an associated function
[INFO] [stdout]    --> src/gpu/buffers.rs:163:5
[INFO] [stdout]     |
[INFO] [stdout] 163 |     pub fn new(device: &wgpu::Device, width: u32, height: u32, format: wgpu::TextureFormat) -> Self {
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a method
[INFO] [stdout]    --> src/gpu/buffers.rs:188:5
[INFO] [stdout]     |
[INFO] [stdout] 188 |     pub fn update(&self, queue: &wgpu::Queue, data: &[u8], bytes_per_row: u32) {
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a method
[INFO] [stdout]    --> src/gpu/buffers.rs:206:5
[INFO] [stdout]     |
[INFO] [stdout] 206 |     pub fn view(&self) -> &wgpu::TextureView {
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a method
[INFO] [stdout]    --> src/gpu/buffers.rs:210:5
[INFO] [stdout]     |
[INFO] [stdout] 210 |     pub fn texture(&self) -> &wgpu::Texture {
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a method
[INFO] [stdout]    --> src/gpu/buffers.rs:214:5
[INFO] [stdout]     |
[INFO] [stdout] 214 |     pub fn width(&self) -> u32 {
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a method
[INFO] [stdout]    --> src/gpu/buffers.rs:218:5
[INFO] [stdout]     |
[INFO] [stdout] 218 |     pub fn height(&self) -> u32 {
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for an associated function
[INFO] [stdout]   --> src/gpu/pipelines.rs:18:5
[INFO] [stdout]    |
[INFO] [stdout] 18 |     pub fn new(device: Arc<wgpu::Device>) -> Self {
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for an associated function
[INFO] [stdout]   --> src/gpu/pipelines.rs:92:5
[INFO] [stdout]    |
[INFO] [stdout] 92 |     pub fn new(device: Arc<wgpu::Device>, queue: Arc<wgpu::Queue>) -> Self {
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/gpu/pipelines.rs:122:5
[INFO] [stdout]     |
[INFO] [stdout] 122 |     pub label: Option<String>,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/gpu/pipelines.rs:123:5
[INFO] [stdout]     |
[INFO] [stdout] 123 |     pub pipeline: &'a wgpu::ComputePipeline,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/gpu/pipelines.rs:124:5
[INFO] [stdout]     |
[INFO] [stdout] 124 |     pub bind_group: &'a wgpu::BindGroup,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/gpu/pipelines.rs:125:5
[INFO] [stdout]     |
[INFO] [stdout] 125 |     pub workgroups: (u32, u32, u32),
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for an associated function
[INFO] [stdout]    --> src/gpu/pipelines.rs:134:5
[INFO] [stdout]     |
[INFO] [stdout] 134 |     pub fn new(device: Arc<wgpu::Device>) -> Self {
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/ui/mod.rs:86:5
[INFO] [stdout]    |
[INFO] [stdout] 86 |     pub width: usize,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/ui/mod.rs:87:5
[INFO] [stdout]    |
[INFO] [stdout] 87 |     pub height: usize,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/ui/mod.rs:88:5
[INFO] [stdout]    |
[INFO] [stdout] 88 |     pub data: Vec<f32>,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/ui/mod.rs:89:5
[INFO] [stdout]    |
[INFO] [stdout] 89 |     pub min_temp: f32,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/ui/mod.rs:90:5
[INFO] [stdout]    |
[INFO] [stdout] 90 |     pub max_temp: f32,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/ui/mod.rs:91:5
[INFO] [stdout]    |
[INFO] [stdout] 91 |     pub timestamp: chrono::DateTime<chrono::Utc>,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/ui/mod.rs:97:5
[INFO] [stdout]    |
[INFO] [stdout] 97 |     pub frequencies: Vec<f32>,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/ui/mod.rs:98:5
[INFO] [stdout]    |
[INFO] [stdout] 98 |     pub magnitudes: Vec<f32>,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/ui/mod.rs:99:5
[INFO] [stdout]    |
[INFO] [stdout] 99 |     pub peak_freq: f32,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/ui/mod.rs:100:5
[INFO] [stdout]     |
[INFO] [stdout] 100 |     pub timestamp: chrono::DateTime<chrono::Utc>,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/ui/mod.rs:106:5
[INFO] [stdout]     |
[INFO] [stdout] 106 |     pub readings_per_sec: f64,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/ui/mod.rs:107:5
[INFO] [stdout]     |
[INFO] [stdout] 107 |     pub detections_total: usize,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/ui/mod.rs:108:5
[INFO] [stdout]     |
[INFO] [stdout] 108 |     pub cpu_usage: f32,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/ui/mod.rs:109:5
[INFO] [stdout]     |
[INFO] [stdout] 109 |     pub memory_mb: f64,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/ui/mod.rs:110:5
[INFO] [stdout]     |
[INFO] [stdout] 110 |     pub uptime_secs: u64,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/ui/mod.rs:111:5
[INFO] [stdout]     |
[INFO] [stdout] 111 |     pub active_sensors: usize,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for an associated function
[INFO] [stdout]   --> src/ui/app.rs:42:5
[INFO] [stdout]    |
[INFO] [stdout] 42 |     pub fn new(cc: &eframe::CreationContext<'_>, config: Config) -> Self {
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for an associated function
[INFO] [stdout]   --> src/ui/panels.rs:20:5
[INFO] [stdout]    |
[INFO] [stdout] 20 |     pub fn new() -> Self {
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a method
[INFO] [stdout]   --> src/ui/panels.rs:26:5
[INFO] [stdout]    |
[INFO] [stdout] 26 |     pub fn show(&mut self, ui: &mut egui::Ui, state: &mut GuiState) {
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for an associated function
[INFO] [stdout]    --> src/ui/panels.rs:108:5
[INFO] [stdout]     |
[INFO] [stdout] 108 |     pub fn new() -> Self {
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a method
[INFO] [stdout]    --> src/ui/panels.rs:115:5
[INFO] [stdout]     |
[INFO] [stdout] 115 |     pub fn show(&self, ui: &mut egui::Ui, state: &GuiState) {
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for an associated function
[INFO] [stdout]    --> src/ui/panels.rs:169:5
[INFO] [stdout]     |
[INFO] [stdout] 169 |     pub fn new() -> Self {
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a method
[INFO] [stdout]    --> src/ui/panels.rs:176:5
[INFO] [stdout]     |
[INFO] [stdout] 176 |     pub fn show(&mut self, ui: &mut egui::Ui, state: &GuiState) {
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for an associated function
[INFO] [stdout]    --> src/ui/panels.rs:241:5
[INFO] [stdout]     |
[INFO] [stdout] 241 |     pub fn new() -> Self {
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a method
[INFO] [stdout]    --> src/ui/panels.rs:247:5
[INFO] [stdout]     |
[INFO] [stdout] 247 |     pub fn show(&self, ui: &mut egui::Ui, state: &GuiState) {
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for an associated function
[INFO] [stdout]    --> src/ui/panels.rs:286:5
[INFO] [stdout]     |
[INFO] [stdout] 286 |     pub fn new() -> Self {
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a method
[INFO] [stdout]    --> src/ui/panels.rs:290:5
[INFO] [stdout]     |
[INFO] [stdout] 290 |     pub fn show(&self, ui: &mut egui::Ui, state: &mut GuiState) {
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for an associated function
[INFO] [stdout]    --> src/ui/panels.rs:348:5
[INFO] [stdout]     |
[INFO] [stdout] 348 |     pub fn new() -> Self {
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a method
[INFO] [stdout]    --> src/ui/panels.rs:352:5
[INFO] [stdout]     |
[INFO] [stdout] 352 |     pub fn show(&self, ui: &mut egui::Ui, state: &GuiState) {
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]    --> src/ui/panels.rs:382:5
[INFO] [stdout]     |
[INFO] [stdout] 382 |     Inferno,
[INFO] [stdout]     |     ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]    --> src/ui/panels.rs:383:5
[INFO] [stdout]     |
[INFO] [stdout] 383 |     Viridis,
[INFO] [stdout]     |     ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]    --> src/ui/panels.rs:384:5
[INFO] [stdout]     |
[INFO] [stdout] 384 |     Plasma,
[INFO] [stdout]     |     ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]    --> src/ui/panels.rs:385:5
[INFO] [stdout]     |
[INFO] [stdout] 385 |     Turbo,
[INFO] [stdout]     |     ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]    --> src/ui/panels.rs:386:5
[INFO] [stdout]     |
[INFO] [stdout] 386 |     Grayscale,
[INFO] [stdout]     |     ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a method
[INFO] [stdout]    --> src/ui/panels.rs:390:5
[INFO] [stdout]     |
[INFO] [stdout] 390 |     pub fn to_color(&self, t: f32) -> egui::Color32 {
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for an associated function
[INFO] [stdout]   --> src/ui/widgets.rs:52:5
[INFO] [stdout]    |
[INFO] [stdout] 52 |     pub fn new(value: f32, min: f32, max: f32) -> Self {
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a method
[INFO] [stdout]   --> src/ui/widgets.rs:62:5
[INFO] [stdout]    |
[INFO] [stdout] 62 |     pub fn label(mut self, label: impl Into<String>) -> Self {
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a method
[INFO] [stdout]   --> src/ui/widgets.rs:67:5
[INFO] [stdout]    |
[INFO] [stdout] 67 |     pub fn unit(mut self, unit: impl Into<String>) -> Self {
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a method
[INFO] [stdout]   --> src/ui/widgets.rs:72:5
[INFO] [stdout]    |
[INFO] [stdout] 72 |     pub fn show(self, ui: &mut egui::Ui) {
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for an associated function
[INFO] [stdout]    --> src/ui/plots.rs:166:5
[INFO] [stdout]     |
[INFO] [stdout] 166 |     pub fn new(max_rows: usize) -> Self {
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a method
[INFO] [stdout]    --> src/ui/plots.rs:173:5
[INFO] [stdout]     |
[INFO] [stdout] 173 |     pub fn push_row(&mut self, row: Vec<f32>) {
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a method
[INFO] [stdout]    --> src/ui/plots.rs:180:5
[INFO] [stdout]     |
[INFO] [stdout] 180 |     pub fn show(&self, ui: &mut egui::Ui, colormap: impl Fn(f32) -> egui::Color32) {
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for an associated constant
[INFO] [stdout]   --> src/ui/theme.rs:98:5
[INFO] [stdout]    |
[INFO] [stdout] 98 |     pub const PRIMARY: egui::Color32 = egui::Color32::from_rgb(100, 200, 255);
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for an associated constant
[INFO] [stdout]   --> src/ui/theme.rs:99:5
[INFO] [stdout]    |
[INFO] [stdout] 99 |     pub const SECONDARY: egui::Color32 = egui::Color32::from_rgb(150, 100, 255);
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for an associated constant
[INFO] [stdout]    --> src/ui/theme.rs:100:5
[INFO] [stdout]     |
[INFO] [stdout] 100 |     pub const SUCCESS: egui::Color32 = egui::Color32::from_rgb(100, 255, 150);
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for an associated constant
[INFO] [stdout]    --> src/ui/theme.rs:101:5
[INFO] [stdout]     |
[INFO] [stdout] 101 |     pub const WARNING: egui::Color32 = egui::Color32::from_rgb(255, 200, 100);
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for an associated constant
[INFO] [stdout]    --> src/ui/theme.rs:102:5
[INFO] [stdout]     |
[INFO] [stdout] 102 |     pub const DANGER: egui::Color32 = egui::Color32::from_rgb(255, 100, 100);
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for an associated constant
[INFO] [stdout]    --> src/ui/theme.rs:103:5
[INFO] [stdout]     |
[INFO] [stdout] 103 |     pub const INFO: egui::Color32 = egui::Color32::from_rgb(100, 200, 255);
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for an associated constant
[INFO] [stdout]    --> src/ui/theme.rs:106:5
[INFO] [stdout]     |
[INFO] [stdout] 106 |     pub const EMF: egui::Color32 = egui::Color32::from_rgb(100, 200, 255);
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for an associated constant
[INFO] [stdout]    --> src/ui/theme.rs:107:5
[INFO] [stdout]     |
[INFO] [stdout] 107 |     pub const THERMAL: egui::Color32 = egui::Color32::from_rgb(255, 100, 100);
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for an associated constant
[INFO] [stdout]    --> src/ui/theme.rs:108:5
[INFO] [stdout]     |
[INFO] [stdout] 108 |     pub const AUDIO: egui::Color32 = egui::Color32::from_rgb(100, 255, 150);
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for an associated constant
[INFO] [stdout]    --> src/ui/theme.rs:109:5
[INFO] [stdout]     |
[INFO] [stdout] 109 |     pub const SEISMIC: egui::Color32 = egui::Color32::from_rgb(255, 200, 100);
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for an associated constant
[INFO] [stdout]    --> src/ui/theme.rs:110:5
[INFO] [stdout]     |
[INFO] [stdout] 110 |     pub const RADIATION: egui::Color32 = egui::Color32::from_rgb(255, 255, 100);
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for an associated constant
[INFO] [stdout]    --> src/ui/theme.rs:111:5
[INFO] [stdout]     |
[INFO] [stdout] 111 |     pub const RF: egui::Color32 = egui::Color32::from_rgb(200, 100, 255);
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for an associated constant
[INFO] [stdout]    --> src/ui/theme.rs:112:5
[INFO] [stdout]     |
[INFO] [stdout] 112 |     pub const OPTICAL: egui::Color32 = egui::Color32::from_rgb(255, 150, 200);
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for an associated constant
[INFO] [stdout]    --> src/ui/theme.rs:113:5
[INFO] [stdout]     |
[INFO] [stdout] 113 |     pub const QUANTUM: egui::Color32 = egui::Color32::from_rgb(100, 255, 255);
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for an associated constant
[INFO] [stdout]    --> src/ui/theme.rs:116:5
[INFO] [stdout]     |
[INFO] [stdout] 116 |     pub const SEVERITY_LOW: egui::Color32 = egui::Color32::from_rgb(100, 200, 100);
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for an associated constant
[INFO] [stdout]    --> src/ui/theme.rs:117:5
[INFO] [stdout]     |
[INFO] [stdout] 117 |     pub const SEVERITY_MEDIUM: egui::Color32 = egui::Color32::from_rgb(200, 200, 100);
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for an associated constant
[INFO] [stdout]    --> src/ui/theme.rs:118:5
[INFO] [stdout]     |
[INFO] [stdout] 118 |     pub const SEVERITY_HIGH: egui::Color32 = egui::Color32::from_rgb(255, 150, 50);
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for an associated constant
[INFO] [stdout]    --> src/ui/theme.rs:119:5
[INFO] [stdout]     |
[INFO] [stdout] 119 |     pub const SEVERITY_CRITICAL: egui::Color32 = egui::Color32::from_rgb(255, 50, 50);
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `sample_rate`
[INFO] [stdout]    --> src/analysis/signal.rs:296:45
[INFO] [stdout]     |
[INFO] [stdout] 296 |     pub fn spectrogram(&self, data: &[f64], sample_rate: f64, window_size: usize, hop_size: usize) -> Vec<Vec<f64>> {
[INFO] [stdout]     |                                             ^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_sample_rate`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/analysis/statistics.rs:245:13
[INFO] [stdout]     |
[INFO] [stdout] 245 |         let mut result = x.powf(a) * (1.0 - x).powf(b) / (a * self.beta(a, b));
[INFO] [stdout]     |             ----^^^^^^
[INFO] [stdout]     |             |
[INFO] [stdout]     |             help: remove this `mut`
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_mut)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/analysis/complexity.rs:298:13
[INFO] [stdout]     |
[INFO] [stdout] 298 |         let mut vertical_lines: Vec<usize> = Vec::new();
[INFO] [stdout]     |             ----^^^^^^^^^^^^^^
[INFO] [stdout]     |             |
[INFO] [stdout]     |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/analysis/complexity.rs:303:17
[INFO] [stdout]     |
[INFO] [stdout] 303 |             let mut vert_length = 0;
[INFO] [stdout]     |                 ----^^^^^^^^^^^
[INFO] [stdout]     |                 |
[INFO] [stdout]     |                 help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `vertical_lines`
[INFO] [stdout]    --> src/analysis/complexity.rs:298:13
[INFO] [stdout]     |
[INFO] [stdout] 298 |         let mut vertical_lines: Vec<usize> = Vec::new();
[INFO] [stdout]     |             ^^^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_vertical_lines`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `vert_length`
[INFO] [stdout]    --> src/analysis/complexity.rs:303:17
[INFO] [stdout]     |
[INFO] [stdout] 303 |             let mut vert_length = 0;
[INFO] [stdout]     |                 ^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_vert_length`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `signal_features`
[INFO] [stdout]    --> src/analysis/mod.rs:110:13
[INFO] [stdout]     |
[INFO] [stdout] 110 |         let signal_features = self.signal_processor.extract_features(&reading.data, reading.sample_rate);
[INFO] [stdout]     |             ^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_signal_features`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `patterns`
[INFO] [stdout]    --> src/analysis/mod.rs:113:13
[INFO] [stdout]     |
[INFO] [stdout] 113 |         let patterns = self.pattern_detector.find_patterns(&reading.data);
[INFO] [stdout]     |             ^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_patterns`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `client_id`
[INFO] [stdout]    --> src/streaming/websocket.rs:108:40
[INFO] [stdout]     |
[INFO] [stdout] 108 |     pub async fn send_to_client(&self, client_id: &str, message: &str) -> Result<()> {
[INFO] [stdout]     |                                        ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_client_id`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `tx`
[INFO] [stdout]    --> src/main.rs:152:10
[INFO] [stdout]     |
[INFO] [stdout] 152 |     let (tx, _rx): (broadcast::Sender<String>, broadcast::Receiver<String>) = broadcast::channel(1000);
[INFO] [stdout]     |          ^^ help: if this is intentional, prefix it with an underscore: `_tx`
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `engine`
[INFO] [stdout]    --> src/main.rs:164:9
[INFO] [stdout]     |
[INFO] [stdout] 164 |     let engine = Engine::new(config.clone()).await?;
[INFO] [stdout]     |         ^^^^^^ help: if this is intentional, prefix it with an underscore: `_engine`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `sid`
[INFO] [stdout]    --> src/db/mod.rs:212:31
[INFO] [stdout]     |
[INFO] [stdout] 212 |         let sql = if let Some(sid) = sensor_id {
[INFO] [stdout]     |                               ^^^ help: if this is intentional, prefix it with an underscore: `_sid`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `tx`
[INFO] [stdout]    --> src/main.rs:152:10
[INFO] [stdout]     |
[INFO] [stdout] 152 |     let (tx, _rx): (broadcast::Sender<String>, broadcast::Receiver<String>) = broadcast::channel(1000);
[INFO] [stdout]     |          ^^ help: if this is intentional, prefix it with an underscore: `_tx`
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `engine`
[INFO] [stdout]    --> src/main.rs:164:9
[INFO] [stdout]     |
[INFO] [stdout] 164 |     let engine = Engine::new(config.clone()).await?;
[INFO] [stdout]     |         ^^^^^^ help: if this is intentional, prefix it with an underscore: `_engine`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `cc`
[INFO] [stdout]   --> src/ui/app.rs:42:16
[INFO] [stdout]    |
[INFO] [stdout] 42 |     pub fn new(cc: &eframe::CreationContext<'_>, config: Config) -> Self {
[INFO] [stdout]    |                ^^ help: if this is intentional, prefix it with an underscore: `_cc`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `elapsed`
[INFO] [stdout]    --> src/ui/app.rs:185:13
[INFO] [stdout]     |
[INFO] [stdout] 185 |         let elapsed = self.last_update.elapsed().as_secs_f64();
[INFO] [stdout]     |             ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_elapsed`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `id`
[INFO] [stdout]    --> src/ui/plots.rs:110:5
[INFO] [stdout]     |
[INFO] [stdout] 110 |     id: &str,
[INFO] [stdout]     |     ^^ help: if this is intentional, prefix it with an underscore: `_id`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unreachable pattern
[INFO] [stdout]    --> src/ui/theme.rs:131:60
[INFO] [stdout]     |
[INFO] [stdout] 131 |         SensorType::Accelerometer | SensorType::Geophone | SensorType::Accelerometer => GlowBarnColors::SEISMIC,
[INFO] [stdout]     |         -------------------------                          ^^^^^^^^^^^^^^^^^^^^^^^^^ no value can reach this
[INFO] [stdout]     |         |
[INFO] [stdout]     |         matches all the relevant values
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unreachable_patterns)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/ui/mod.rs:150:9
[INFO] [stdout]     |
[INFO] [stdout] 150 |     let mut fonts = egui::FontDefinitions::default();
[INFO] [stdout]     |         ----^^^^^
[INFO] [stdout]     |         |
[INFO] [stdout]     |         help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: useless conversion to the same type: `std::string::String`
[INFO] [stdout]    --> src/streaming/websocket.rs:162:50
[INFO] [stdout]     |
[INFO] [stdout] 162 |     if let Err(e) = ws_sender.send(Message::Text(welcome.to_string().into())).await {
[INFO] [stdout]     |                                                  ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: you can instead use the fully-qualified path `<std::string::String as Into<std::string::String>::into(val) to avoid triggering this lint
[INFO] [stdout]     = note: `#[warn(self_type_conversion)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: useless conversion to the same type: `std::string::String`
[INFO] [stdout]    --> src/streaming/websocket.rs:181:78
[INFO] [stdout]     |
[INFO] [stdout] 181 | ...                   let _ = ws_sender.send(Message::Text(pong.to_string().into())).await;
[INFO] [stdout]     |                                                            ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: you can instead use the fully-qualified path `<std::string::String as Into<std::string::String>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: useless conversion to the same type: `std::string::String`
[INFO] [stdout]    --> src/streaming/websocket.rs:228:70
[INFO] [stdout]     |
[INFO] [stdout] 228 |                         if let Err(e) = ws_sender.send(Message::Text(wrapper.to_string().into())).await {
[INFO] [stdout]     |                                                                      ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: you can instead use the fully-qualified path `<std::string::String as Into<std::string::String>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: useless conversion to the same type: `std::string::String`
[INFO] [stdout]    --> src/streaming/websocket.rs:238:70
[INFO] [stdout]     |
[INFO] [stdout] 238 |                         if let Err(e) = ws_sender.send(Message::Text(wrapper.to_string().into())).await {
[INFO] [stdout]     |                                                                      ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: you can instead use the fully-qualified path `<std::string::String as Into<std::string::String>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: useless conversion to the same type: `std::string::String`
[INFO] [stdout]    --> src/streaming/websocket.rs:248:62
[INFO] [stdout]     |
[INFO] [stdout] 248 |                         let _ = ws_sender.send(Message::Text(wrapper.to_string().into())).await;
[INFO] [stdout]     |                                                              ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this method call relies on the `impl<T> Into<T> for T` blanket implementation and type inference, which is a semver hazard as a new `impl Into<_>` that affects your type might be added in the future causing type inference errors
[INFO] [stdout]     = note: you can instead use the fully-qualified path `<std::string::String as Into<std::string::String>::into(val) to avoid triggering this lint
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/core/mod.rs:23:5
[INFO] [stdout]    |
[INFO] [stdout] 23 |     pub running: bool,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout] note: the lint level is defined here
[INFO] [stdout]   --> src/lib.rs:37:9
[INFO] [stdout]    |
[INFO] [stdout] 37 | #![warn(missing_docs)]
[INFO] [stdout]    |         ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/core/mod.rs:24:5
[INFO] [stdout]    |
[INFO] [stdout] 24 |     pub sensors_active: usize,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/core/mod.rs:25:5
[INFO] [stdout]    |
[INFO] [stdout] 25 |     pub total_readings: u64,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/core/mod.rs:26:5
[INFO] [stdout]    |
[INFO] [stdout] 26 |     pub total_detections: u64,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/core/mod.rs:27:5
[INFO] [stdout]    |
[INFO] [stdout] 27 |     pub uptime_seconds: u64,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/core/mod.rs:28:5
[INFO] [stdout]    |
[INFO] [stdout] 28 |     pub cpu_usage: f32,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/core/mod.rs:29:5
[INFO] [stdout]    |
[INFO] [stdout] 29 |     pub memory_usage: f32,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/core/mod.rs:30:5
[INFO] [stdout]    |
[INFO] [stdout] 30 |     pub last_detection: Option<DateTime<Utc>>,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/core/engine.rs:18:5
[INFO] [stdout]    |
[INFO] [stdout] 18 |     pub config: Arc<Config>,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for an associated function
[INFO] [stdout]   --> src/core/engine.rs:24:5
[INFO] [stdout]    |
[INFO] [stdout] 24 |     pub async fn new(config: Config) -> Result<Self> {
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a method
[INFO] [stdout]   --> src/core/engine.rs:34:5
[INFO] [stdout]    |
[INFO] [stdout] 34 |     pub async fn start(&mut self) -> Result<()> {
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a method
[INFO] [stdout]   --> src/core/engine.rs:47:5
[INFO] [stdout]    |
[INFO] [stdout] 47 |     pub async fn stop(&mut self) -> Result<()> {
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a method
[INFO] [stdout]   --> src/core/engine.rs:59:5
[INFO] [stdout]    |
[INFO] [stdout] 59 |     pub async fn state(&self) -> SystemState {
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a method
[INFO] [stdout]   --> src/core/engine.rs:63:5
[INFO] [stdout]    |
[INFO] [stdout] 63 |     pub fn uptime(&self) -> u64 {
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct
[INFO] [stdout]   --> src/core/scheduler.rs:23:1
[INFO] [stdout]    |
[INFO] [stdout] 23 | pub struct Scheduler {
[INFO] [stdout]    | ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for an associated function
[INFO] [stdout]   --> src/core/scheduler.rs:28:5
[INFO] [stdout]    |
[INFO] [stdout] 28 |     pub fn new() -> Self {
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a method
[INFO] [stdout]   --> src/core/scheduler.rs:34:5
[INFO] [stdout]    |
[INFO] [stdout] 34 | /     pub async fn add_task<F>(&self, name: &str, interval: Duration, task: F)
[INFO] [stdout] 35 | |     where
[INFO] [stdout] 36 | |         F: Fn() + Send + Sync + 'static,
[INFO] [stdout]    | |________________________________________^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a method
[INFO] [stdout]   --> src/core/scheduler.rs:51:5
[INFO] [stdout]    |
[INFO] [stdout] 51 |     pub async fn remove_task(&self, name: &str) {
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a method
[INFO] [stdout]   --> src/core/scheduler.rs:56:5
[INFO] [stdout]    |
[INFO] [stdout] 56 |     pub async fn enable_task(&self, name: &str, enabled: bool) {
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]   --> src/core/event_bus.rs:18:5
[INFO] [stdout]    |
[INFO] [stdout] 18 |     SensorReading,
[INFO] [stdout]    |     ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]   --> src/core/event_bus.rs:19:5
[INFO] [stdout]    |
[INFO] [stdout] 19 |     Detection,
[INFO] [stdout]    |     ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]   --> src/core/event_bus.rs:20:5
[INFO] [stdout]    |
[INFO] [stdout] 20 |     Alert,
[INFO] [stdout]    |     ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]   --> src/core/event_bus.rs:21:5
[INFO] [stdout]    |
[INFO] [stdout] 21 |     SystemStatus,
[INFO] [stdout]    |     ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]   --> src/core/event_bus.rs:22:5
[INFO] [stdout]    |
[INFO] [stdout] 22 |     Error,
[INFO] [stdout]    |     ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/core/event_bus.rs:28:5
[INFO] [stdout]    |
[INFO] [stdout] 28 |     pub id: u64,
[INFO] [stdout]    |     ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/core/event_bus.rs:29:5
[INFO] [stdout]    |
[INFO] [stdout] 29 |     pub event_type: EventType,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/core/event_bus.rs:30:5
[INFO] [stdout]    |
[INFO] [stdout] 30 |     pub timestamp: DateTime<Utc>,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/core/event_bus.rs:31:5
[INFO] [stdout]    |
[INFO] [stdout] 31 |     pub payload: EventPayload,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for an associated function
[INFO] [stdout]   --> src/core/event_bus.rs:52:5
[INFO] [stdout]    |
[INFO] [stdout] 52 |     pub fn new(capacity: usize) -> Self {
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a method
[INFO] [stdout]   --> src/core/event_bus.rs:65:5
[INFO] [stdout]    |
[INFO] [stdout] 65 |     pub fn publish_reading(&self, reading: SensorReading) {
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a method
[INFO] [stdout]   --> src/core/event_bus.rs:70:5
[INFO] [stdout]    |
[INFO] [stdout] 70 |     pub fn publish_detection(&self, detection: Detection) {
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a method
[INFO] [stdout]   --> src/core/event_bus.rs:75:5
[INFO] [stdout]    |
[INFO] [stdout] 75 |     pub fn publish_alert(&self, level: &str, message: &str) {
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a method
[INFO] [stdout]   --> src/core/event_bus.rs:85:5
[INFO] [stdout]    |
[INFO] [stdout] 85 |     pub fn publish_error(&self, code: u32, message: &str) {
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a method
[INFO] [stdout]    --> src/core/event_bus.rs:106:5
[INFO] [stdout]     |
[INFO] [stdout] 106 |     pub fn subscribe_readings(&self) -> broadcast::Receiver<SensorReading> {
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a method
[INFO] [stdout]    --> src/core/event_bus.rs:110:5
[INFO] [stdout]     |
[INFO] [stdout] 110 |     pub fn subscribe_detections(&self) -> broadcast::Receiver<Detection> {
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a method
[INFO] [stdout]    --> src/core/event_bus.rs:114:5
[INFO] [stdout]     |
[INFO] [stdout] 114 |     pub fn subscribe_events(&self) -> broadcast::Receiver<Event> {
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for an associated function
[INFO] [stdout]   --> src/sensors/manager.rs:29:5
[INFO] [stdout]    |
[INFO] [stdout] 29 |     pub async fn new(config: Arc<Config>, event_bus: Arc<EventBus>, demo_mode: bool) -> Result<Self> {
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a method
[INFO] [stdout]   --> src/sensors/manager.rs:73:5
[INFO] [stdout]    |
[INFO] [stdout] 73 |     pub async fn add_sensor(&self, sensor: Box<dyn Sensor>) -> Result<()> {
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a method
[INFO] [stdout]   --> src/sensors/manager.rs:98:5
[INFO] [stdout]    |
[INFO] [stdout] 98 |     pub async fn remove_sensor(&self, id: &str) -> Result<()> {
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a method
[INFO] [stdout]    --> src/sensors/manager.rs:111:5
[INFO] [stdout]     |
[INFO] [stdout] 111 |     pub async fn active_count(&self) -> usize {
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a method
[INFO] [stdout]    --> src/sensors/manager.rs:116:5
[INFO] [stdout]     |
[INFO] [stdout] 116 |     pub async fn get_health(&self, id: &str) -> Option<SensorHealth> {
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a method
[INFO] [stdout]    --> src/sensors/manager.rs:121:5
[INFO] [stdout]     |
[INFO] [stdout] 121 |     pub async fn get_all_health(&self) -> Vec<SensorHealth> {
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a method
[INFO] [stdout]    --> src/sensors/manager.rs:126:5
[INFO] [stdout]     |
[INFO] [stdout] 126 |     pub async fn run(&self, mut shutdown: broadcast::Receiver<()>) -> Result<()> {
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]   --> src/sensors/traits.rs:18:5
[INFO] [stdout]    |
[INFO] [stdout] 18 |     ThermalImager,      // FLIR, SEEK, MLX90640
[INFO] [stdout]    |     ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]   --> src/sensors/traits.rs:19:5
[INFO] [stdout]    |
[INFO] [stdout] 19 |     ThermalArray,       // AMG8833
[INFO] [stdout]    |     ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]   --> src/sensors/traits.rs:20:5
[INFO] [stdout]    |
[INFO] [stdout] 20 |     Thermistor,         // Point temperature
[INFO] [stdout]    |     ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]   --> src/sensors/traits.rs:21:5
[INFO] [stdout]    |
[INFO] [stdout] 21 |     Pyrometer,          // Non-contact IR
[INFO] [stdout]    |     ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]   --> src/sensors/traits.rs:24:5
[INFO] [stdout]    |
[INFO] [stdout] 24 |     Geophone,           // Velocity sensor
[INFO] [stdout]    |     ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]   --> src/sensors/traits.rs:25:5
[INFO] [stdout]    |
[INFO] [stdout] 25 |     Accelerometer,      // MEMS (ADXL, MPU, LIS)
[INFO] [stdout]    |     ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]   --> src/sensors/traits.rs:26:5
[INFO] [stdout]    |
[INFO] [stdout] 26 |     Seismograph,        // Raspberry Shake
[INFO] [stdout]    |     ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]   --> src/sensors/traits.rs:27:5
[INFO] [stdout]    |
[INFO] [stdout] 27 |     Piezoelectric,      // Contact vibration
[INFO] [stdout]    |     ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]   --> src/sensors/traits.rs:30:5
[INFO] [stdout]    |
[INFO] [stdout] 30 |     EMFProbe,           // Magnetic field
[INFO] [stdout]    |     ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]   --> src/sensors/traits.rs:31:5
[INFO] [stdout]    |
[INFO] [stdout] 31 |     TriField,           // Multi-axis EMF
[INFO] [stdout]    |     ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]   --> src/sensors/traits.rs:32:5
[INFO] [stdout]    |
[INFO] [stdout] 32 |     GaussMeter,         // Precision magnetic
[INFO] [stdout]    |     ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]   --> src/sensors/traits.rs:33:5
[INFO] [stdout]    |
[INFO] [stdout] 33 |     FluxGate,           // Vector magnetometer
[INFO] [stdout]    |     ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]   --> src/sensors/traits.rs:34:5
[INFO] [stdout]    |
[INFO] [stdout] 34 |     SQUIDMagnetometer,  // Ultra-sensitive
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]   --> src/sensors/traits.rs:37:5
[INFO] [stdout]    |
[INFO] [stdout] 37 |     Ultrasonic,         // >20kHz
[INFO] [stdout]    |     ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]   --> src/sensors/traits.rs:38:5
[INFO] [stdout]    |
[INFO] [stdout] 38 |     Infrasound,         // <20Hz
[INFO] [stdout]    |     ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]   --> src/sensors/traits.rs:39:5
[INFO] [stdout]    |
[INFO] [stdout] 39 |     FullSpectrum,       // 0.1Hz - 100kHz
[INFO] [stdout]    |     ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]   --> src/sensors/traits.rs:40:5
[INFO] [stdout]    |
[INFO] [stdout] 40 |     ParabolicMic,       // Directional
[INFO] [stdout]    |     ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]   --> src/sensors/traits.rs:41:5
[INFO] [stdout]    |
[INFO] [stdout] 41 |     ContactMic,         // Structure-borne
[INFO] [stdout]    |     ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]   --> src/sensors/traits.rs:42:5
[INFO] [stdout]    |
[INFO] [stdout] 42 |     MicArray,           // Beamforming array
[INFO] [stdout]    |     ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]   --> src/sensors/traits.rs:45:5
[INFO] [stdout]    |
[INFO] [stdout] 45 |     Barometer,          // Pressure
[INFO] [stdout]    |     ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]   --> src/sensors/traits.rs:46:5
[INFO] [stdout]    |
[INFO] [stdout] 46 |     Hygrometer,         // Humidity
[INFO] [stdout]    |     ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]   --> src/sensors/traits.rs:47:5
[INFO] [stdout]    |
[INFO] [stdout] 47 |     Anemometer,         // Air flow
[INFO] [stdout]    |     ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]   --> src/sensors/traits.rs:48:5
[INFO] [stdout]    |
[INFO] [stdout] 48 |     IonCounter,         // Air ionization
[INFO] [stdout]    |     ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]   --> src/sensors/traits.rs:49:5
[INFO] [stdout]    |
[INFO] [stdout] 49 |     VOCSensor,          // Volatile organics
[INFO] [stdout]    |     ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]   --> src/sensors/traits.rs:50:5
[INFO] [stdout]    |
[INFO] [stdout] 50 |     ParticulateSensor,  // PM2.5/PM10
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]   --> src/sensors/traits.rs:53:5
[INFO] [stdout]    |
[INFO] [stdout] 53 |     GeigerCounter,      // Alpha/Beta/Gamma
[INFO] [stdout]    |     ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]   --> src/sensors/traits.rs:54:5
[INFO] [stdout]    |
[INFO] [stdout] 54 |     Scintillator,       // Gamma spectroscopy
[INFO] [stdout]    |     ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]   --> src/sensors/traits.rs:55:5
[INFO] [stdout]    |
[INFO] [stdout] 55 |     NeutronDetector,    // Neutron flux
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]   --> src/sensors/traits.rs:56:5
[INFO] [stdout]    |
[INFO] [stdout] 56 |     DosimeterArray,     // Spatial radiation
[INFO] [stdout]    |     ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]   --> src/sensors/traits.rs:59:5
[INFO] [stdout]    |
[INFO] [stdout] 59 |     LightMeter,         // Luminosity
[INFO] [stdout]    |     ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]   --> src/sensors/traits.rs:60:5
[INFO] [stdout]    |
[INFO] [stdout] 60 |     UVSensor,           // UV A/B/C
[INFO] [stdout]    |     ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]   --> src/sensors/traits.rs:61:5
[INFO] [stdout]    |
[INFO] [stdout] 61 |     IRDetector,         // Passive IR
[INFO] [stdout]    |     ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]   --> src/sensors/traits.rs:62:5
[INFO] [stdout]    |
[INFO] [stdout] 62 |     Spectrometer,       // Full spectrum
[INFO] [stdout]    |     ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]   --> src/sensors/traits.rs:63:5
[INFO] [stdout]    |
[INFO] [stdout] 63 |     LiDAR,              // Distance/mapping
[INFO] [stdout]    |     ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]   --> src/sensors/traits.rs:64:5
[INFO] [stdout]    |
[INFO] [stdout] 64 |     LaserGrid,          // Interruption detection
[INFO] [stdout]    |     ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]   --> src/sensors/traits.rs:65:5
[INFO] [stdout]    |
[INFO] [stdout] 65 |     NightVision,        // Enhanced imaging
[INFO] [stdout]    |     ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]   --> src/sensors/traits.rs:68:5
[INFO] [stdout]    |
[INFO] [stdout] 68 |     SDRReceiver,        // Software-defined radio
[INFO] [stdout]    |     ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]   --> src/sensors/traits.rs:69:5
[INFO] [stdout]    |
[INFO] [stdout] 69 |     SpectrumAnalyzer,   // RF spectrum
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]   --> src/sensors/traits.rs:70:5
[INFO] [stdout]    |
[INFO] [stdout] 70 |     WiFiScanner,        // 2.4/5GHz
[INFO] [stdout]    |     ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]   --> src/sensors/traits.rs:71:5
[INFO] [stdout]    |
[INFO] [stdout] 71 |     EMIDetector,        // Interference
[INFO] [stdout]    |     ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]   --> src/sensors/traits.rs:74:5
[INFO] [stdout]    |
[INFO] [stdout] 74 |     CapacitiveSensor,   // Proximity
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]   --> src/sensors/traits.rs:75:5
[INFO] [stdout]    |
[INFO] [stdout] 75 |     StaticMeter,        // Electrostatic
[INFO] [stdout]    |     ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]   --> src/sensors/traits.rs:76:5
[INFO] [stdout]    |
[INFO] [stdout] 76 |     FieldMill,          // Atmospheric electric
[INFO] [stdout]    |     ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]   --> src/sensors/traits.rs:77:5
[INFO] [stdout]    |
[INFO] [stdout] 77 |     CurrentClamp,       // AC/DC current
[INFO] [stdout]    |     ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]   --> src/sensors/traits.rs:80:5
[INFO] [stdout]    |
[INFO] [stdout] 80 |     IonChamber,         // Air ionization
[INFO] [stdout]    |     ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]   --> src/sensors/traits.rs:81:5
[INFO] [stdout]    |
[INFO] [stdout] 81 |     CoronaDetector,     // Electric discharge
[INFO] [stdout]    |     ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]   --> src/sensors/traits.rs:82:5
[INFO] [stdout]    |
[INFO] [stdout] 82 |     PlasmaProbe,        // Plasma detection
[INFO] [stdout]    |     ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]   --> src/sensors/traits.rs:85:5
[INFO] [stdout]    |
[INFO] [stdout] 85 |     QRNG,               // Quantum RNG
[INFO] [stdout]    |     ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]   --> src/sensors/traits.rs:86:5
[INFO] [stdout]    |
[INFO] [stdout] 86 |     ThermalNoise,       // Johnson noise
[INFO] [stdout]    |     ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]   --> src/sensors/traits.rs:87:5
[INFO] [stdout]    |
[INFO] [stdout] 87 |     ShotNoise,          // Electron shot noise
[INFO] [stdout]    |     ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]   --> src/sensors/traits.rs:88:5
[INFO] [stdout]    |
[INFO] [stdout] 88 |     ZenerDiode,         // Avalanche noise
[INFO] [stdout]    |     ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]   --> src/sensors/traits.rs:91:5
[INFO] [stdout]    |
[INFO] [stdout] 91 |     Custom(u32),        // User-defined
[INFO] [stdout]    |     ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]   --> src/sensors/traits.rs:97:5
[INFO] [stdout]    |
[INFO] [stdout] 97 |     Disconnected,
[INFO] [stdout]    |     ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]   --> src/sensors/traits.rs:98:5
[INFO] [stdout]    |
[INFO] [stdout] 98 |     Connecting,
[INFO] [stdout]    |     ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]   --> src/sensors/traits.rs:99:5
[INFO] [stdout]    |
[INFO] [stdout] 99 |     Connected,
[INFO] [stdout]    |     ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]    --> src/sensors/traits.rs:100:5
[INFO] [stdout]     |
[INFO] [stdout] 100 |     Calibrating,
[INFO] [stdout]     |     ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]    --> src/sensors/traits.rs:101:5
[INFO] [stdout]     |
[INFO] [stdout] 101 |     Active,
[INFO] [stdout]     |     ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]    --> src/sensors/traits.rs:102:5
[INFO] [stdout]     |
[INFO] [stdout] 102 |     Error,
[INFO] [stdout]     |     ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]    --> src/sensors/traits.rs:103:5
[INFO] [stdout]     |
[INFO] [stdout] 103 |     Maintenance,
[INFO] [stdout]     |     ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/sensors/traits.rs:109:5
[INFO] [stdout]     |
[INFO] [stdout] 109 |     pub offset: Vec<f64>,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/sensors/traits.rs:110:5
[INFO] [stdout]     |
[INFO] [stdout] 110 |     pub scale: Vec<f64>,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/sensors/traits.rs:111:5
[INFO] [stdout]     |
[INFO] [stdout] 111 |     pub noise_floor: f64,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/sensors/traits.rs:112:5
[INFO] [stdout]     |
[INFO] [stdout] 112 |     pub timestamp: DateTime<Utc>,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/sensors/traits.rs:113:5
[INFO] [stdout]     |
[INFO] [stdout] 113 |     pub temperature: Option<f64>,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/sensors/traits.rs:114:5
[INFO] [stdout]     |
[INFO] [stdout] 114 |     pub notes: String,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/sensors/traits.rs:115:5
[INFO] [stdout]     |
[INFO] [stdout] 115 |     pub signature: Vec<u8>,  // Cryptographic signature
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/sensors/traits.rs:121:5
[INFO] [stdout]     |
[INFO] [stdout] 121 |     pub sensor_id: String,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/sensors/traits.rs:122:5
[INFO] [stdout]     |
[INFO] [stdout] 122 |     pub sensor_type: SensorType,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/sensors/traits.rs:123:5
[INFO] [stdout]     |
[INFO] [stdout] 123 |     pub timestamp: DateTime<Utc>,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/sensors/traits.rs:124:5
[INFO] [stdout]     |
[INFO] [stdout] 124 |     pub sequence: u64,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/sensors/traits.rs:127:5
[INFO] [stdout]     |
[INFO] [stdout] 127 |     pub data: Vec<f64>,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/sensors/traits.rs:128:5
[INFO] [stdout]     |
[INFO] [stdout] 128 |     pub dimensions: Vec<usize>,  // Shape for multi-dimensional data
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/sensors/traits.rs:131:5
[INFO] [stdout]     |
[INFO] [stdout] 131 |     pub unit: String,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/sensors/traits.rs:132:5
[INFO] [stdout]     |
[INFO] [stdout] 132 |     pub sample_rate: f64,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/sensors/traits.rs:133:5
[INFO] [stdout]     |
[INFO] [stdout] 133 |     pub quality: f32,  // 0-1 signal quality
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/sensors/traits.rs:136:5
[INFO] [stdout]     |
[INFO] [stdout] 136 |     pub position: Option<[f64; 3]>,  // x, y, z in meters
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/sensors/traits.rs:137:5
[INFO] [stdout]     |
[INFO] [stdout] 137 |     pub orientation: Option<[f64; 3]>,  // roll, pitch, yaw in radians
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for an associated function
[INFO] [stdout]    --> src/sensors/traits.rs:141:5
[INFO] [stdout]     |
[INFO] [stdout] 141 |     pub fn new(sensor_id: &str, sensor_type: SensorType, data: Vec<f64>) -> Self {
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a method
[INFO] [stdout]    --> src/sensors/traits.rs:157:5
[INFO] [stdout]     |
[INFO] [stdout] 157 |     pub fn as_vector(&self) -> DVector<f64> {
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a method
[INFO] [stdout]    --> src/sensors/traits.rs:161:5
[INFO] [stdout]     |
[INFO] [stdout] 161 |     pub fn len(&self) -> usize {
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a method
[INFO] [stdout]    --> src/sensors/traits.rs:165:5
[INFO] [stdout]     |
[INFO] [stdout] 165 |     pub fn is_empty(&self) -> bool {
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/sensors/traits.rs:210:5
[INFO] [stdout]     |
[INFO] [stdout] 210 |     pub sensor_id: String,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/sensors/traits.rs:211:5
[INFO] [stdout]     |
[INFO] [stdout] 211 |     pub status: SensorStatus,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/sensors/traits.rs:212:5
[INFO] [stdout]     |
[INFO] [stdout] 212 |     pub uptime_seconds: u64,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/sensors/traits.rs:213:5
[INFO] [stdout]     |
[INFO] [stdout] 213 |     pub readings_count: u64,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/sensors/traits.rs:214:5
[INFO] [stdout]     |
[INFO] [stdout] 214 |     pub error_count: u64,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/sensors/traits.rs:215:5
[INFO] [stdout]     |
[INFO] [stdout] 215 |     pub last_error: Option<String>,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/sensors/traits.rs:216:5
[INFO] [stdout]     |
[INFO] [stdout] 216 |     pub signal_quality: f32,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/sensors/traits.rs:217:5
[INFO] [stdout]     |
[INFO] [stdout] 217 |     pub noise_level: f64,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/sensors/traits.rs:218:5
[INFO] [stdout]     |
[INFO] [stdout] 218 |     pub temperature: Option<f64>,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/sensors/traits.rs:219:5
[INFO] [stdout]     |
[INFO] [stdout] 219 |     pub battery_level: Option<f32>,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for an associated function
[INFO] [stdout]   --> src/sensors/thermal.rs:24:5
[INFO] [stdout]    |
[INFO] [stdout] 24 |     pub fn new(id: &str, port_name: &str) -> Self {
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for an associated function
[INFO] [stdout]   --> src/sensors/thermal.rs:98:5
[INFO] [stdout]    |
[INFO] [stdout] 98 |     pub fn new(id: &str) -> Self {
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for an associated function
[INFO] [stdout]   --> src/sensors/seismic.rs:23:5
[INFO] [stdout]    |
[INFO] [stdout] 23 |     pub fn new(id: &str) -> Self {
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for an associated function
[INFO] [stdout]   --> src/sensors/seismic.rs:94:5
[INFO] [stdout]    |
[INFO] [stdout] 94 |     pub fn new(id: &str) -> Self {
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for an associated function
[INFO] [stdout]    --> src/sensors/seismic.rs:141:5
[INFO] [stdout]     |
[INFO] [stdout] 141 |     pub fn new(id: &str, sensitivity: f64) -> Self {
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for an associated function
[INFO] [stdout]   --> src/sensors/emf.rs:23:5
[INFO] [stdout]    |
[INFO] [stdout] 23 |     pub fn new(id: &str) -> Self {
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for an associated function
[INFO] [stdout]   --> src/sensors/emf.rs:76:5
[INFO] [stdout]    |
[INFO] [stdout] 76 |     pub fn new(id: &str) -> Self {
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for an enum
[INFO] [stdout]    --> src/sensors/emf.rs:129:1
[INFO] [stdout]     |
[INFO] [stdout] 129 | pub enum TriFieldMode {
[INFO] [stdout]     | ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]    --> src/sensors/emf.rs:130:5
[INFO] [stdout]     |
[INFO] [stdout] 130 |     Magnetic,
[INFO] [stdout]     |     ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]    --> src/sensors/emf.rs:131:5
[INFO] [stdout]     |
[INFO] [stdout] 131 |     Electric,
[INFO] [stdout]     |     ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]    --> src/sensors/emf.rs:132:5
[INFO] [stdout]     |
[INFO] [stdout] 132 |     Radio,
[INFO] [stdout]     |     ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for an associated function
[INFO] [stdout]    --> src/sensors/emf.rs:136:5
[INFO] [stdout]     |
[INFO] [stdout] 136 |     pub fn new(id: &str) -> Self {
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for an associated function
[INFO] [stdout]   --> src/sensors/audio.rs:22:5
[INFO] [stdout]    |
[INFO] [stdout] 22 |     pub fn new(id: &str) -> Self {
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for an associated function
[INFO] [stdout]   --> src/sensors/audio.rs:69:5
[INFO] [stdout]    |
[INFO] [stdout] 69 |     pub fn new(id: &str) -> Self {
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for an associated function
[INFO] [stdout]    --> src/sensors/audio.rs:120:5
[INFO] [stdout]     |
[INFO] [stdout] 120 |     pub fn new(id: &str) -> Self {
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for an associated function
[INFO] [stdout]    --> src/sensors/audio.rs:168:5
[INFO] [stdout]     |
[INFO] [stdout] 168 |     pub fn new(id: &str) -> Self {
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for an associated function
[INFO] [stdout]    --> src/sensors/audio.rs:227:5
[INFO] [stdout]     |
[INFO] [stdout] 227 |     pub fn new(id: &str, num_mics: usize) -> Self {
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for an associated function
[INFO] [stdout]   --> src/sensors/environmental.rs:23:5
[INFO] [stdout]    |
[INFO] [stdout] 23 |     pub fn new(id: &str) -> Self {
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for an associated function
[INFO] [stdout]   --> src/sensors/environmental.rs:75:5
[INFO] [stdout]    |
[INFO] [stdout] 75 |     pub fn new(id: &str) -> Self {
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for an associated function
[INFO] [stdout]    --> src/sensors/environmental.rs:121:5
[INFO] [stdout]     |
[INFO] [stdout] 121 |     pub fn new(id: &str) -> Self {
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for an associated function
[INFO] [stdout]    --> src/sensors/environmental.rs:167:5
[INFO] [stdout]     |
[INFO] [stdout] 167 |     pub fn new(id: &str) -> Self {
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for an associated function
[INFO] [stdout]    --> src/sensors/environmental.rs:213:5
[INFO] [stdout]     |
[INFO] [stdout] 213 |     pub fn new(id: &str) -> Self {
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for an enum
[INFO] [stdout]   --> src/sensors/radiation.rs:24:1
[INFO] [stdout]    |
[INFO] [stdout] 24 | pub enum GeigerTubeType {
[INFO] [stdout]    | ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]   --> src/sensors/radiation.rs:25:5
[INFO] [stdout]    |
[INFO] [stdout] 25 |     SBM20,      // Russian pancake
[INFO] [stdout]    |     ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]   --> src/sensors/radiation.rs:26:5
[INFO] [stdout]    |
[INFO] [stdout] 26 |     SI29BG,     // End-window
[INFO] [stdout]    |     ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]   --> src/sensors/radiation.rs:27:5
[INFO] [stdout]    |
[INFO] [stdout] 27 |     LND712,     // Halogen-quenched
[INFO] [stdout]    |     ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]   --> src/sensors/radiation.rs:28:5
[INFO] [stdout]    |
[INFO] [stdout] 28 |     J408Gamma,  // High-sensitivity gamma
[INFO] [stdout]    |     ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]   --> src/sensors/radiation.rs:29:5
[INFO] [stdout]    |
[INFO] [stdout] 29 |     Custom,
[INFO] [stdout]    |     ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for an associated function
[INFO] [stdout]   --> src/sensors/radiation.rs:33:5
[INFO] [stdout]    |
[INFO] [stdout] 33 |     pub fn new(id: &str, tube_type: GeigerTubeType) -> Self {
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for an enum
[INFO] [stdout]   --> src/sensors/radiation.rs:96:1
[INFO] [stdout]    |
[INFO] [stdout] 96 | pub enum ScintillatorType {
[INFO] [stdout]    | ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]   --> src/sensors/radiation.rs:97:5
[INFO] [stdout]    |
[INFO] [stdout] 97 |     NaI,      // Sodium Iodide
[INFO] [stdout]    |     ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]   --> src/sensors/radiation.rs:98:5
[INFO] [stdout]    |
[INFO] [stdout] 98 |     CsI,      // Cesium Iodide
[INFO] [stdout]    |     ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]   --> src/sensors/radiation.rs:99:5
[INFO] [stdout]    |
[INFO] [stdout] 99 |     BGO,      // Bismuth Germanate
[INFO] [stdout]    |     ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]    --> src/sensors/radiation.rs:100:5
[INFO] [stdout]     |
[INFO] [stdout] 100 |     LaBr3,    // Lanthanum Bromide
[INFO] [stdout]     |     ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]    --> src/sensors/radiation.rs:101:5
[INFO] [stdout]     |
[INFO] [stdout] 101 |     Plastic,  // Plastic scintillator
[INFO] [stdout]     |     ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for an associated function
[INFO] [stdout]    --> src/sensors/radiation.rs:105:5
[INFO] [stdout]     |
[INFO] [stdout] 105 |     pub fn new(id: &str, crystal_type: ScintillatorType) -> Self {
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for an associated function
[INFO] [stdout]    --> src/sensors/radiation.rs:166:5
[INFO] [stdout]     |
[INFO] [stdout] 166 |     pub fn new(id: &str) -> Self {
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for an associated function
[INFO] [stdout]    --> src/sensors/radiation.rs:213:5
[INFO] [stdout]     |
[INFO] [stdout] 213 |     pub fn new(id: &str, num_dosimeters: usize) -> Self {
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for an associated function
[INFO] [stdout]   --> src/sensors/optical.rs:22:5
[INFO] [stdout]    |
[INFO] [stdout] 22 |     pub fn new(id: &str) -> Self {
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for an associated function
[INFO] [stdout]   --> src/sensors/optical.rs:68:5
[INFO] [stdout]    |
[INFO] [stdout] 68 |     pub fn new(id: &str) -> Self {
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for an associated function
[INFO] [stdout]    --> src/sensors/optical.rs:116:5
[INFO] [stdout]     |
[INFO] [stdout] 116 |     pub fn new(id: &str) -> Self {
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for an associated function
[INFO] [stdout]    --> src/sensors/optical.rs:172:5
[INFO] [stdout]     |
[INFO] [stdout] 172 |     pub fn new(id: &str) -> Self {
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for an associated function
[INFO] [stdout]    --> src/sensors/optical.rs:227:5
[INFO] [stdout]     |
[INFO] [stdout] 227 |     pub fn new(id: &str, rows: usize, cols: usize) -> Self {
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for an associated function
[INFO] [stdout]   --> src/sensors/rf.rs:25:5
[INFO] [stdout]    |
[INFO] [stdout] 25 |     pub fn new(id: &str) -> Self {
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for an associated function
[INFO] [stdout]   --> src/sensors/rf.rs:95:5
[INFO] [stdout]    |
[INFO] [stdout] 95 |     pub fn new(id: &str) -> Self {
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct
[INFO] [stdout]    --> src/sensors/rf.rs:165:1
[INFO] [stdout]     |
[INFO] [stdout] 165 | pub struct WiFiBands {
[INFO] [stdout]     | ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/sensors/rf.rs:166:5
[INFO] [stdout]     |
[INFO] [stdout] 166 |     pub ghz_2_4: bool,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/sensors/rf.rs:167:5
[INFO] [stdout]     |
[INFO] [stdout] 167 |     pub ghz_5: bool,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/sensors/rf.rs:168:5
[INFO] [stdout]     |
[INFO] [stdout] 168 |     pub ghz_6: bool,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for an associated function
[INFO] [stdout]    --> src/sensors/rf.rs:178:5
[INFO] [stdout]     |
[INFO] [stdout] 178 |     pub fn new(id: &str) -> Self {
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for an associated function
[INFO] [stdout]    --> src/sensors/rf.rs:242:5
[INFO] [stdout]     |
[INFO] [stdout] 242 |     pub fn new(id: &str) -> Self {
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for an associated function
[INFO] [stdout]   --> src/sensors/capacitive.rs:24:5
[INFO] [stdout]    |
[INFO] [stdout] 24 |     pub fn new(id: &str) -> Self {
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for an associated function
[INFO] [stdout]   --> src/sensors/capacitive.rs:86:5
[INFO] [stdout]    |
[INFO] [stdout] 86 |     pub fn new(id: &str) -> Self {
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for an associated function
[INFO] [stdout]    --> src/sensors/capacitive.rs:138:5
[INFO] [stdout]     |
[INFO] [stdout] 138 |     pub fn new(id: &str) -> Self {
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for an associated function
[INFO] [stdout]    --> src/sensors/capacitive.rs:185:5
[INFO] [stdout]     |
[INFO] [stdout] 185 |     pub fn new(id: &str, max_current: f64) -> Self {
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for an associated function
[INFO] [stdout]   --> src/sensors/magnetic.rs:23:5
[INFO] [stdout]    |
[INFO] [stdout] 23 |     pub fn new(id: &str) -> Self {
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for an associated function
[INFO] [stdout]   --> src/sensors/magnetic.rs:75:5
[INFO] [stdout]    |
[INFO] [stdout] 75 |     pub fn new(id: &str) -> Self {
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for an associated function
[INFO] [stdout]    --> src/sensors/magnetic.rs:122:5
[INFO] [stdout]     |
[INFO] [stdout] 122 |     pub fn new(id: &str, baseline: f64) -> Self {
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for an associated function
[INFO] [stdout]   --> src/sensors/ionization.rs:22:5
[INFO] [stdout]    |
[INFO] [stdout] 22 |     pub fn new(id: &str) -> Self {
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for an associated function
[INFO] [stdout]   --> src/sensors/ionization.rs:69:5
[INFO] [stdout]    |
[INFO] [stdout] 69 |     pub fn new(id: &str, chamber_volume: f64) -> Self {
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for an associated function
[INFO] [stdout]    --> src/sensors/ionization.rs:121:5
[INFO] [stdout]     |
[INFO] [stdout] 121 |     pub fn new(id: &str) -> Self {
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for an associated function
[INFO] [stdout]    --> src/sensors/ionization.rs:167:5
[INFO] [stdout]     |
[INFO] [stdout] 167 |     pub fn new(id: &str) -> Self {
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for an enum
[INFO] [stdout]   --> src/sensors/quantum.rs:24:1
[INFO] [stdout]    |
[INFO] [stdout] 24 | pub enum QRNGSourceType {
[INFO] [stdout]    | ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]   --> src/sensors/quantum.rs:25:5
[INFO] [stdout]    |
[INFO] [stdout] 25 |     PhotonArrival,    // Photon timing
[INFO] [stdout]    |     ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]   --> src/sensors/quantum.rs:26:5
[INFO] [stdout]    |
[INFO] [stdout] 26 |     BeamSplitter,     // Quantum beam splitter
[INFO] [stdout]    |     ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]   --> src/sensors/quantum.rs:27:5
[INFO] [stdout]    |
[INFO] [stdout] 27 |     Vacuum,           // Vacuum fluctuations
[INFO] [stdout]    |     ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]   --> src/sensors/quantum.rs:28:5
[INFO] [stdout]    |
[INFO] [stdout] 28 |     RadioactiveDecay, // True random from decay
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for an associated function
[INFO] [stdout]   --> src/sensors/quantum.rs:32:5
[INFO] [stdout]    |
[INFO] [stdout] 32 |     pub fn new(id: &str, source_type: QRNGSourceType) -> Self {
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for an associated function
[INFO] [stdout]   --> src/sensors/quantum.rs:86:5
[INFO] [stdout]    |
[INFO] [stdout] 86 |     pub fn new(id: &str) -> Self {
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for an associated function
[INFO] [stdout]    --> src/sensors/quantum.rs:156:5
[INFO] [stdout]     |
[INFO] [stdout] 156 |     pub fn new(id: &str) -> Self {
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for an associated function
[INFO] [stdout]    --> src/sensors/quantum.rs:217:5
[INFO] [stdout]     |
[INFO] [stdout] 217 |     pub fn new(id: &str) -> Self {
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for an associated function
[INFO] [stdout]   --> src/sensors/simulator.rs:33:5
[INFO] [stdout]    |
[INFO] [stdout] 33 |     pub fn new(id: &str, sensor_type: SensorType, sample_rate: f64) -> Self {
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/analysis/mod.rs:33:5
[INFO] [stdout]    |
[INFO] [stdout] 33 |     pub entropy_window: usize,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/analysis/mod.rs:34:5
[INFO] [stdout]    |
[INFO] [stdout] 34 |     pub anomaly_threshold: f64,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/analysis/mod.rs:35:5
[INFO] [stdout]    |
[INFO] [stdout] 35 |     pub pattern_min_length: usize,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/analysis/mod.rs:36:5
[INFO] [stdout]    |
[INFO] [stdout] 36 |     pub fft_size: usize,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/analysis/mod.rs:37:5
[INFO] [stdout]    |
[INFO] [stdout] 37 |     pub enable_gpu: bool,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for an associated function
[INFO] [stdout]   --> src/analysis/mod.rs:64:5
[INFO] [stdout]    |
[INFO] [stdout] 64 |     pub async fn new(config: Arc<Config>, event_bus: Arc<EventBus>) -> Result<Self> {
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a method
[INFO] [stdout]   --> src/analysis/mod.rs:78:5
[INFO] [stdout]    |
[INFO] [stdout] 78 |     pub async fn run(&self, mut shutdown: broadcast::Receiver<()>) -> Result<()> {
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/analysis/entropy.rs:18:5
[INFO] [stdout]    |
[INFO] [stdout] 18 |     pub shannon: f64,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/analysis/entropy.rs:19:5
[INFO] [stdout]    |
[INFO] [stdout] 19 |     pub renyi: f64,        // Rényi entropy (alpha=2)
[INFO] [stdout]    |     ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/analysis/entropy.rs:20:5
[INFO] [stdout]    |
[INFO] [stdout] 20 |     pub tsallis: f64,      // Tsallis entropy (q=2)
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/analysis/entropy.rs:23:5
[INFO] [stdout]    |
[INFO] [stdout] 23 |     pub sample: f64,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/analysis/entropy.rs:24:5
[INFO] [stdout]    |
[INFO] [stdout] 24 |     pub approximate: f64,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/analysis/entropy.rs:25:5
[INFO] [stdout]    |
[INFO] [stdout] 25 |     pub permutation: f64,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/analysis/entropy.rs:26:5
[INFO] [stdout]    |
[INFO] [stdout] 26 |     pub multiscale: Vec<f64>,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/analysis/entropy.rs:29:5
[INFO] [stdout]    |
[INFO] [stdout] 29 |     pub spectral: f64,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/analysis/entropy.rs:30:5
[INFO] [stdout]    |
[INFO] [stdout] 30 |     pub wavelet: f64,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/analysis/entropy.rs:33:5
[INFO] [stdout]    |
[INFO] [stdout] 33 |     pub lz_complexity: f64,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/analysis/entropy.rs:34:5
[INFO] [stdout]    |
[INFO] [stdout] 34 |     pub kolmogorov_estimate: f64,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/analysis/entropy.rs:35:5
[INFO] [stdout]    |
[INFO] [stdout] 35 |     pub hurst_exponent: f64,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/analysis/entropy.rs:38:5
[INFO] [stdout]    |
[INFO] [stdout] 38 |     pub kurtosis: f64,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/analysis/entropy.rs:39:5
[INFO] [stdout]    |
[INFO] [stdout] 39 |     pub skewness: f64,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/analysis/entropy.rs:42:5
[INFO] [stdout]    |
[INFO] [stdout] 42 |     pub is_anomalous: bool,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/analysis/entropy.rs:43:5
[INFO] [stdout]    |
[INFO] [stdout] 43 |     pub anomaly_score: f64,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for an associated function
[INFO] [stdout]   --> src/analysis/entropy.rs:54:5
[INFO] [stdout]    |
[INFO] [stdout] 54 |     pub fn new(config: AnalysisConfig) -> Self {
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a method
[INFO] [stdout]   --> src/analysis/entropy.rs:62:5
[INFO] [stdout]    |
[INFO] [stdout] 62 |     pub fn analyze(&self, data: &[f64]) -> EntropyResult {
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/analysis/anomaly.rs:16:5
[INFO] [stdout]    |
[INFO] [stdout] 16 |     pub index: usize,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/analysis/anomaly.rs:17:5
[INFO] [stdout]    |
[INFO] [stdout] 17 |     pub value: f64,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/analysis/anomaly.rs:18:5
[INFO] [stdout]    |
[INFO] [stdout] 18 |     pub score: f64,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/analysis/anomaly.rs:19:5
[INFO] [stdout]    |
[INFO] [stdout] 19 |     pub anomaly_type: AnomalyType,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/analysis/anomaly.rs:20:5
[INFO] [stdout]    |
[INFO] [stdout] 20 |     pub confidence: f64,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for an enum
[INFO] [stdout]   --> src/analysis/anomaly.rs:24:1
[INFO] [stdout]    |
[INFO] [stdout] 24 | pub enum AnomalyType {
[INFO] [stdout]    | ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]   --> src/analysis/anomaly.rs:25:5
[INFO] [stdout]    |
[INFO] [stdout] 25 |     PointAnomaly,       // Single outlier
[INFO] [stdout]    |     ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]   --> src/analysis/anomaly.rs:26:5
[INFO] [stdout]    |
[INFO] [stdout] 26 |     ContextualAnomaly,  // Anomaly in context
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]   --> src/analysis/anomaly.rs:27:5
[INFO] [stdout]    |
[INFO] [stdout] 27 |     CollectiveAnomaly,  // Group of anomalies
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]   --> src/analysis/anomaly.rs:28:5
[INFO] [stdout]    |
[INFO] [stdout] 28 |     ChangePoint,        // Distribution shift
[INFO] [stdout]    |     ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]   --> src/analysis/anomaly.rs:29:5
[INFO] [stdout]    |
[INFO] [stdout] 29 |     Spike,              // Sudden spike
[INFO] [stdout]    |     ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]   --> src/analysis/anomaly.rs:30:5
[INFO] [stdout]    |
[INFO] [stdout] 30 |     Drop,               // Sudden drop
[INFO] [stdout]    |     ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]   --> src/analysis/anomaly.rs:31:5
[INFO] [stdout]    |
[INFO] [stdout] 31 |     Drift,              // Gradual change
[INFO] [stdout]    |     ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]   --> src/analysis/anomaly.rs:32:5
[INFO] [stdout]    |
[INFO] [stdout] 32 |     Oscillation,        // Abnormal oscillation
[INFO] [stdout]    |     ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for an associated function
[INFO] [stdout]   --> src/analysis/anomaly.rs:54:5
[INFO] [stdout]    |
[INFO] [stdout] 54 |     pub fn new(config: AnalysisConfig) -> Self {
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a method
[INFO] [stdout]   --> src/analysis/anomaly.rs:67:5
[INFO] [stdout]    |
[INFO] [stdout] 67 |     pub fn detect(&self, data: &[f64]) -> Vec<Anomaly> {
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/analysis/signal.rs:17:5
[INFO] [stdout]    |
[INFO] [stdout] 17 |     pub mean: f64,
[INFO] [stdout]    |     ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/analysis/signal.rs:18:5
[INFO] [stdout]    |
[INFO] [stdout] 18 |     pub std_dev: f64,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/analysis/signal.rs:19:5
[INFO] [stdout]    |
[INFO] [stdout] 19 |     pub rms: f64,
[INFO] [stdout]    |     ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/analysis/signal.rs:20:5
[INFO] [stdout]    |
[INFO] [stdout] 20 |     pub peak_to_peak: f64,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/analysis/signal.rs:21:5
[INFO] [stdout]    |
[INFO] [stdout] 21 |     pub crest_factor: f64,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/analysis/signal.rs:22:5
[INFO] [stdout]    |
[INFO] [stdout] 22 |     pub zero_crossings: usize,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/analysis/signal.rs:25:5
[INFO] [stdout]    |
[INFO] [stdout] 25 |     pub dominant_frequency: f64,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/analysis/signal.rs:26:5
[INFO] [stdout]    |
[INFO] [stdout] 26 |     pub spectral_centroid: f64,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/analysis/signal.rs:27:5
[INFO] [stdout]    |
[INFO] [stdout] 27 |     pub spectral_bandwidth: f64,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/analysis/signal.rs:28:5
[INFO] [stdout]    |
[INFO] [stdout] 28 |     pub spectral_rolloff: f64,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/analysis/signal.rs:29:5
[INFO] [stdout]    |
[INFO] [stdout] 29 |     pub spectral_flatness: f64,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/analysis/signal.rs:32:5
[INFO] [stdout]    |
[INFO] [stdout] 32 |     pub band_energies: Vec<f64>,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/analysis/signal.rs:35:5
[INFO] [stdout]    |
[INFO] [stdout] 35 |     pub attack_time: f64,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/analysis/signal.rs:36:5
[INFO] [stdout]    |
[INFO] [stdout] 36 |     pub decay_time: f64,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for an associated function
[INFO] [stdout]   --> src/analysis/signal.rs:45:5
[INFO] [stdout]    |
[INFO] [stdout] 45 |     pub fn new(config: AnalysisConfig) -> Self {
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a method
[INFO] [stdout]   --> src/analysis/signal.rs:49:5
[INFO] [stdout]    |
[INFO] [stdout] 49 |     pub fn extract_features(&self, data: &[f64], sample_rate: f64) -> SignalFeatures {
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/analysis/patterns.rs:15:5
[INFO] [stdout]    |
[INFO] [stdout] 15 |     pub pattern_type: PatternType,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/analysis/patterns.rs:16:5
[INFO] [stdout]    |
[INFO] [stdout] 16 |     pub start_index: usize,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/analysis/patterns.rs:17:5
[INFO] [stdout]    |
[INFO] [stdout] 17 |     pub length: usize,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/analysis/patterns.rs:18:5
[INFO] [stdout]    |
[INFO] [stdout] 18 |     pub confidence: f64,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/analysis/patterns.rs:19:5
[INFO] [stdout]    |
[INFO] [stdout] 19 |     pub period: Option<f64>,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/analysis/patterns.rs:20:5
[INFO] [stdout]    |
[INFO] [stdout] 20 |     pub description: String,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for an enum
[INFO] [stdout]   --> src/analysis/patterns.rs:24:1
[INFO] [stdout]    |
[INFO] [stdout] 24 | pub enum PatternType {
[INFO] [stdout]    | ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]   --> src/analysis/patterns.rs:25:5
[INFO] [stdout]    |
[INFO] [stdout] 25 |     Periodic,
[INFO] [stdout]    |     ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]   --> src/analysis/patterns.rs:26:5
[INFO] [stdout]    |
[INFO] [stdout] 26 |     Transient,
[INFO] [stdout]    |     ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]   --> src/analysis/patterns.rs:27:5
[INFO] [stdout]    |
[INFO] [stdout] 27 |     Trend,
[INFO] [stdout]    |     ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]   --> src/analysis/patterns.rs:28:5
[INFO] [stdout]    |
[INFO] [stdout] 28 |     Oscillation,
[INFO] [stdout]    |     ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]   --> src/analysis/patterns.rs:29:5
[INFO] [stdout]    |
[INFO] [stdout] 29 |     StepChange,
[INFO] [stdout]    |     ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]   --> src/analysis/patterns.rs:30:5
[INFO] [stdout]    |
[INFO] [stdout] 30 |     Impulse,
[INFO] [stdout]    |     ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]   --> src/analysis/patterns.rs:31:5
[INFO] [stdout]    |
[INFO] [stdout] 31 |     Harmonic,
[INFO] [stdout]    |     ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]   --> src/analysis/patterns.rs:32:5
[INFO] [stdout]    |
[INFO] [stdout] 32 |     Burst,
[INFO] [stdout]    |     ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]   --> src/analysis/patterns.rs:33:5
[INFO] [stdout]    |
[INFO] [stdout] 33 |     Recurring,
[INFO] [stdout]    |     ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for an associated function
[INFO] [stdout]   --> src/analysis/patterns.rs:42:5
[INFO] [stdout]    |
[INFO] [stdout] 42 |     pub fn new(config: AnalysisConfig) -> Self {
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a method
[INFO] [stdout]   --> src/analysis/patterns.rs:46:5
[INFO] [stdout]    |
[INFO] [stdout] 46 |     pub fn find_patterns(&self, data: &[f64]) -> Vec<Pattern> {
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/analysis/statistics.rs:12:5
[INFO] [stdout]    |
[INFO] [stdout] 12 |     pub count: usize,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/analysis/statistics.rs:13:5
[INFO] [stdout]    |
[INFO] [stdout] 13 |     pub mean: f64,
[INFO] [stdout]    |     ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/analysis/statistics.rs:14:5
[INFO] [stdout]    |
[INFO] [stdout] 14 |     pub median: f64,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/analysis/statistics.rs:15:5
[INFO] [stdout]    |
[INFO] [stdout] 15 |     pub mode: Option<f64>,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/analysis/statistics.rs:16:5
[INFO] [stdout]    |
[INFO] [stdout] 16 |     pub std_dev: f64,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/analysis/statistics.rs:17:5
[INFO] [stdout]    |
[INFO] [stdout] 17 |     pub variance: f64,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/analysis/statistics.rs:18:5
[INFO] [stdout]    |
[INFO] [stdout] 18 |     pub min: f64,
[INFO] [stdout]    |     ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/analysis/statistics.rs:19:5
[INFO] [stdout]    |
[INFO] [stdout] 19 |     pub max: f64,
[INFO] [stdout]    |     ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/analysis/statistics.rs:20:5
[INFO] [stdout]    |
[INFO] [stdout] 20 |     pub range: f64,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/analysis/statistics.rs:21:5
[INFO] [stdout]    |
[INFO] [stdout] 21 |     pub q1: f64,
[INFO] [stdout]    |     ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/analysis/statistics.rs:22:5
[INFO] [stdout]    |
[INFO] [stdout] 22 |     pub q3: f64,
[INFO] [stdout]    |     ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/analysis/statistics.rs:23:5
[INFO] [stdout]    |
[INFO] [stdout] 23 |     pub iqr: f64,
[INFO] [stdout]    |     ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/analysis/statistics.rs:24:5
[INFO] [stdout]    |
[INFO] [stdout] 24 |     pub skewness: f64,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/analysis/statistics.rs:25:5
[INFO] [stdout]    |
[INFO] [stdout] 25 |     pub kurtosis: f64,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/analysis/statistics.rs:26:5
[INFO] [stdout]    |
[INFO] [stdout] 26 |     pub coefficient_of_variation: f64,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for an associated function
[INFO] [stdout]   --> src/analysis/statistics.rs:33:5
[INFO] [stdout]    |
[INFO] [stdout] 33 |     pub fn new() -> Self {
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a method
[INFO] [stdout]   --> src/analysis/statistics.rs:37:5
[INFO] [stdout]    |
[INFO] [stdout] 37 |     pub fn summarize(&self, data: &[f64]) -> StatisticalSummary {
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct
[INFO] [stdout]    --> src/analysis/statistics.rs:409:1
[INFO] [stdout]     |
[INFO] [stdout] 409 | pub struct TTestResult {
[INFO] [stdout]     | ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/analysis/statistics.rs:410:5
[INFO] [stdout]     |
[INFO] [stdout] 410 |     pub t_statistic: f64,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/analysis/statistics.rs:411:5
[INFO] [stdout]     |
[INFO] [stdout] 411 |     pub p_value: f64,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/analysis/statistics.rs:412:5
[INFO] [stdout]     |
[INFO] [stdout] 412 |     pub degrees_of_freedom: f64,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/analysis/statistics.rs:413:5
[INFO] [stdout]     |
[INFO] [stdout] 413 |     pub significant: bool,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct
[INFO] [stdout]    --> src/analysis/statistics.rs:417:1
[INFO] [stdout]     |
[INFO] [stdout] 417 | pub struct UTestResult {
[INFO] [stdout]     | ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/analysis/statistics.rs:418:5
[INFO] [stdout]     |
[INFO] [stdout] 418 |     pub u_statistic: f64,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/analysis/statistics.rs:419:5
[INFO] [stdout]     |
[INFO] [stdout] 419 |     pub p_value: f64,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/analysis/statistics.rs:420:5
[INFO] [stdout]     |
[INFO] [stdout] 420 |     pub significant: bool,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct
[INFO] [stdout]    --> src/analysis/statistics.rs:424:1
[INFO] [stdout]     |
[INFO] [stdout] 424 | pub struct KSTestResult {
[INFO] [stdout]     | ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/analysis/statistics.rs:425:5
[INFO] [stdout]     |
[INFO] [stdout] 425 |     pub d_statistic: f64,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/analysis/statistics.rs:426:5
[INFO] [stdout]     |
[INFO] [stdout] 426 |     pub p_value: f64,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/analysis/statistics.rs:427:5
[INFO] [stdout]     |
[INFO] [stdout] 427 |     pub significant: bool,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/analysis/complexity.rs:12:5
[INFO] [stdout]    |
[INFO] [stdout] 12 |     pub fractal_dimension: f64,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/analysis/complexity.rs:13:5
[INFO] [stdout]    |
[INFO] [stdout] 13 |     pub correlation_dimension: f64,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/analysis/complexity.rs:14:5
[INFO] [stdout]    |
[INFO] [stdout] 14 |     pub lyapunov_exponent: f64,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/analysis/complexity.rs:15:5
[INFO] [stdout]    |
[INFO] [stdout] 15 |     pub recurrence_rate: f64,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/analysis/complexity.rs:16:5
[INFO] [stdout]    |
[INFO] [stdout] 16 |     pub determinism: f64,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/analysis/complexity.rs:17:5
[INFO] [stdout]    |
[INFO] [stdout] 17 |     pub laminarity: f64,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/analysis/complexity.rs:18:5
[INFO] [stdout]    |
[INFO] [stdout] 18 |     pub entropy_rate: f64,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for an associated function
[INFO] [stdout]   --> src/analysis/complexity.rs:25:5
[INFO] [stdout]    |
[INFO] [stdout] 25 |     pub fn new() -> Self {
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a method
[INFO] [stdout]   --> src/analysis/complexity.rs:29:5
[INFO] [stdout]    |
[INFO] [stdout] 29 |     pub fn analyze(&self, data: &[f64]) -> ComplexityResult {
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/detection/mod.rs:30:5
[INFO] [stdout]    |
[INFO] [stdout] 30 |     pub id: String,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/detection/mod.rs:31:5
[INFO] [stdout]    |
[INFO] [stdout] 31 |     pub timestamp: DateTime<Utc>,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/detection/mod.rs:32:5
[INFO] [stdout]    |
[INFO] [stdout] 32 |     pub detection_type: DetectionType,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/detection/mod.rs:33:5
[INFO] [stdout]    |
[INFO] [stdout] 33 |     pub confidence: f64,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/detection/mod.rs:34:5
[INFO] [stdout]    |
[INFO] [stdout] 34 |     pub severity: Severity,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/detection/mod.rs:37:5
[INFO] [stdout]    |
[INFO] [stdout] 37 |     pub sensors: Vec<SensorContribution>,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/detection/mod.rs:40:5
[INFO] [stdout]    |
[INFO] [stdout] 40 |     pub entropy_deviation: f64,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/detection/mod.rs:41:5
[INFO] [stdout]    |
[INFO] [stdout] 41 |     pub anomaly_count: usize,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/detection/mod.rs:42:5
[INFO] [stdout]    |
[INFO] [stdout] 42 |     pub correlation_score: f64,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/detection/mod.rs:45:5
[INFO] [stdout]    |
[INFO] [stdout] 45 |     pub classification: Option<Classification>,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/detection/mod.rs:48:5
[INFO] [stdout]    |
[INFO] [stdout] 48 |     pub location: Option<[f64; 3]>,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/detection/mod.rs:51:5
[INFO] [stdout]    |
[INFO] [stdout] 51 |     pub data_window_start: DateTime<Utc>,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/detection/mod.rs:52:5
[INFO] [stdout]    |
[INFO] [stdout] 52 |     pub data_window_end: DateTime<Utc>,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/detection/mod.rs:58:5
[INFO] [stdout]    |
[INFO] [stdout] 58 |     pub sensor_id: String,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/detection/mod.rs:59:5
[INFO] [stdout]    |
[INFO] [stdout] 59 |     pub sensor_type: SensorType,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/detection/mod.rs:60:5
[INFO] [stdout]    |
[INFO] [stdout] 60 |     pub weight: f64,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/detection/mod.rs:61:5
[INFO] [stdout]    |
[INFO] [stdout] 61 |     pub reading_value: f64,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/detection/mod.rs:62:5
[INFO] [stdout]    |
[INFO] [stdout] 62 |     pub anomaly_score: f64,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]   --> src/detection/mod.rs:69:5
[INFO] [stdout]    |
[INFO] [stdout] 69 |     ThermalAnomaly,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]   --> src/detection/mod.rs:70:5
[INFO] [stdout]    |
[INFO] [stdout] 70 |     TemperatureGradient,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]   --> src/detection/mod.rs:71:5
[INFO] [stdout]    |
[INFO] [stdout] 71 |     ColdSpot,
[INFO] [stdout]    |     ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]   --> src/detection/mod.rs:72:5
[INFO] [stdout]    |
[INFO] [stdout] 72 |     HotSpot,
[INFO] [stdout]    |     ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]   --> src/detection/mod.rs:75:5
[INFO] [stdout]    |
[INFO] [stdout] 75 |     InfrasoundEvent,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]   --> src/detection/mod.rs:76:5
[INFO] [stdout]    |
[INFO] [stdout] 76 |     UltrasonicEvent,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]   --> src/detection/mod.rs:77:5
[INFO] [stdout]    |
[INFO] [stdout] 77 |     EVP,  // Electronic Voice Phenomena
[INFO] [stdout]    |     ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]   --> src/detection/mod.rs:78:5
[INFO] [stdout]    |
[INFO] [stdout] 78 |     UnexplainedSound,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]   --> src/detection/mod.rs:81:5
[INFO] [stdout]    |
[INFO] [stdout] 81 |     EMFSpike,
[INFO] [stdout]    |     ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]   --> src/detection/mod.rs:82:5
[INFO] [stdout]    |
[INFO] [stdout] 82 |     EMFFluctuation,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]   --> src/detection/mod.rs:83:5
[INFO] [stdout]    |
[INFO] [stdout] 83 |     MagneticAnomaly,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]   --> src/detection/mod.rs:84:5
[INFO] [stdout]    |
[INFO] [stdout] 84 |     StaticDischarge,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]   --> src/detection/mod.rs:87:5
[INFO] [stdout]    |
[INFO] [stdout] 87 |     SeismicEvent,
[INFO] [stdout]    |     ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]   --> src/detection/mod.rs:88:5
[INFO] [stdout]    |
[INFO] [stdout] 88 |     Vibration,
[INFO] [stdout]    |     ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]   --> src/detection/mod.rs:89:5
[INFO] [stdout]    |
[INFO] [stdout] 89 |     Movement,
[INFO] [stdout]    |     ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]   --> src/detection/mod.rs:92:5
[INFO] [stdout]    |
[INFO] [stdout] 92 |     RadiationSpike,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]   --> src/detection/mod.rs:93:5
[INFO] [stdout]    |
[INFO] [stdout] 93 |     IonizationChange,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]   --> src/detection/mod.rs:96:5
[INFO] [stdout]    |
[INFO] [stdout] 96 |     RFAnomaly,
[INFO] [stdout]    |     ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]   --> src/detection/mod.rs:97:5
[INFO] [stdout]    |
[INFO] [stdout] 97 |     InterferencePattern,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]    --> src/detection/mod.rs:100:5
[INFO] [stdout]     |
[INFO] [stdout] 100 |     LightAnomaly,
[INFO] [stdout]     |     ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]    --> src/detection/mod.rs:101:5
[INFO] [stdout]     |
[INFO] [stdout] 101 |     LaserInterruption,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]    --> src/detection/mod.rs:102:5
[INFO] [stdout]     |
[INFO] [stdout] 102 |     SpectrumAnomaly,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]    --> src/detection/mod.rs:105:5
[INFO] [stdout]     |
[INFO] [stdout] 105 |     EntropyAnomaly,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]    --> src/detection/mod.rs:106:5
[INFO] [stdout]     |
[INFO] [stdout] 106 |     QRNGDeviation,
[INFO] [stdout]     |     ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]    --> src/detection/mod.rs:109:5
[INFO] [stdout]     |
[INFO] [stdout] 109 |     CorrelatedAnomaly,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]    --> src/detection/mod.rs:110:5
[INFO] [stdout]     |
[INFO] [stdout] 110 |     SensorFusionEvent,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]    --> src/detection/mod.rs:113:5
[INFO] [stdout]     |
[INFO] [stdout] 113 |     Unknown,
[INFO] [stdout]     |     ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]    --> src/detection/mod.rs:119:5
[INFO] [stdout]     |
[INFO] [stdout] 119 |     Low,
[INFO] [stdout]     |     ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]    --> src/detection/mod.rs:120:5
[INFO] [stdout]     |
[INFO] [stdout] 120 |     Medium,
[INFO] [stdout]     |     ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]    --> src/detection/mod.rs:121:5
[INFO] [stdout]     |
[INFO] [stdout] 121 |     High,
[INFO] [stdout]     |     ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]    --> src/detection/mod.rs:122:5
[INFO] [stdout]     |
[INFO] [stdout] 122 |     Critical,
[INFO] [stdout]     |     ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/detection/mod.rs:128:5
[INFO] [stdout]     |
[INFO] [stdout] 128 |     pub category: String,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/detection/mod.rs:129:5
[INFO] [stdout]     |
[INFO] [stdout] 129 |     pub subcategory: Option<String>,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/detection/mod.rs:130:5
[INFO] [stdout]     |
[INFO] [stdout] 130 |     pub confidence: f64,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/detection/mod.rs:131:5
[INFO] [stdout]     |
[INFO] [stdout] 131 |     pub model_version: String,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for an associated function
[INFO] [stdout]    --> src/detection/mod.rs:148:5
[INFO] [stdout]     |
[INFO] [stdout] 148 |     pub async fn new(config: Arc<Config>, event_bus: Arc<EventBus>) -> Result<Self> {
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a method
[INFO] [stdout]    --> src/detection/mod.rs:160:5
[INFO] [stdout]     |
[INFO] [stdout] 160 |     pub async fn run(&self, mut shutdown: broadcast::Receiver<()>) -> Result<()> {
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a method
[INFO] [stdout]    --> src/detection/mod.rs:252:5
[INFO] [stdout]     |
[INFO] [stdout] 252 |     pub async fn get_detection_count(&self) -> usize {
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a method
[INFO] [stdout]    --> src/detection/mod.rs:256:5
[INFO] [stdout]     |
[INFO] [stdout] 256 |     pub async fn get_recent_detections(&self, limit: usize) -> Vec<Detection> {
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/detection/fusion.rs:17:5
[INFO] [stdout]    |
[INFO] [stdout] 17 |     pub confidence: f64,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/detection/fusion.rs:18:5
[INFO] [stdout]    |
[INFO] [stdout] 18 |     pub detection_type: DetectionType,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/detection/fusion.rs:19:5
[INFO] [stdout]    |
[INFO] [stdout] 19 |     pub sensors: Vec<SensorContribution>,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/detection/fusion.rs:20:5
[INFO] [stdout]    |
[INFO] [stdout] 20 |     pub belief_mass: HashMap<String, f64>,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/detection/fusion.rs:39:5
[INFO] [stdout]    |
[INFO] [stdout] 39 |     pub anomaly: f64,      // m({anomaly})
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/detection/fusion.rs:40:5
[INFO] [stdout]    |
[INFO] [stdout] 40 |     pub normal: f64,       // m({normal})
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/detection/fusion.rs:41:5
[INFO] [stdout]    |
[INFO] [stdout] 41 |     pub uncertainty: f64,  // m(Θ) - complete uncertainty
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for an associated function
[INFO] [stdout]   --> src/detection/fusion.rs:45:5
[INFO] [stdout]    |
[INFO] [stdout] 45 |     pub fn new() -> Self {
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/detection/classification.rs:16:5
[INFO] [stdout]    |
[INFO] [stdout] 16 |     pub name: String,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/detection/classification.rs:17:5
[INFO] [stdout]    |
[INFO] [stdout] 17 |     pub description: String,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/detection/classification.rs:18:5
[INFO] [stdout]    |
[INFO] [stdout] 18 |     pub typical_signatures: Vec<String>,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for an associated function
[INFO] [stdout]   --> src/detection/classification.rs:28:5
[INFO] [stdout]    |
[INFO] [stdout] 28 |     pub fn new() -> Self {
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct
[INFO] [stdout]    --> src/detection/classification.rs:208:1
[INFO] [stdout]     |
[INFO] [stdout] 208 | pub struct ClassificationResult {
[INFO] [stdout]     | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/detection/classification.rs:209:5
[INFO] [stdout]     |
[INFO] [stdout] 209 |     pub category: String,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/detection/classification.rs:210:5
[INFO] [stdout]     |
[INFO] [stdout] 210 |     pub confidence: f64,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/detection/classification.rs:211:5
[INFO] [stdout]     |
[INFO] [stdout] 211 |     pub all_scores: HashMap<String, f64>,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/detection/classification.rs:212:5
[INFO] [stdout]     |
[INFO] [stdout] 212 |     pub features: HashMap<String, f64>,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/detection/correlation.rs:17:5
[INFO] [stdout]    |
[INFO] [stdout] 17 |     pub timestamp: DateTime<Utc>,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/detection/correlation.rs:18:5
[INFO] [stdout]    |
[INFO] [stdout] 18 |     pub sensors: Vec<SensorContribution>,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/detection/correlation.rs:19:5
[INFO] [stdout]    |
[INFO] [stdout] 19 |     pub confidence: f64,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/detection/correlation.rs:20:5
[INFO] [stdout]    |
[INFO] [stdout] 20 |     pub lag_ms: i64,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for an associated function
[INFO] [stdout]   --> src/detection/correlation.rs:43:5
[INFO] [stdout]    |
[INFO] [stdout] 43 |     pub fn new() -> Self {
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/streaming/mod.rs:27:5
[INFO] [stdout]    |
[INFO] [stdout] 27 |     pub mqtt_broker: String,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/streaming/mod.rs:28:5
[INFO] [stdout]    |
[INFO] [stdout] 28 |     pub mqtt_port: u16,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/streaming/mod.rs:29:5
[INFO] [stdout]    |
[INFO] [stdout] 29 |     pub mqtt_client_id: String,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/streaming/mod.rs:30:5
[INFO] [stdout]    |
[INFO] [stdout] 30 |     pub mqtt_username: Option<String>,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/streaming/mod.rs:31:5
[INFO] [stdout]    |
[INFO] [stdout] 31 |     pub mqtt_password: Option<String>,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/streaming/mod.rs:32:5
[INFO] [stdout]    |
[INFO] [stdout] 32 |     pub mqtt_use_tls: bool,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/streaming/mod.rs:36:5
[INFO] [stdout]    |
[INFO] [stdout] 36 |     pub websocket_port: u16,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/streaming/mod.rs:37:5
[INFO] [stdout]    |
[INFO] [stdout] 37 |     pub websocket_max_clients: usize,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/streaming/mod.rs:41:5
[INFO] [stdout]    |
[INFO] [stdout] 41 |     pub export_format: ExportFormat,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/streaming/mod.rs:42:5
[INFO] [stdout]    |
[INFO] [stdout] 42 |     pub export_path: String,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]   --> src/streaming/mod.rs:70:5
[INFO] [stdout]    |
[INFO] [stdout] 70 |     Json,
[INFO] [stdout]    |     ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]   --> src/streaming/mod.rs:71:5
[INFO] [stdout]    |
[INFO] [stdout] 71 |     Csv,
[INFO] [stdout]    |     ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]   --> src/streaming/mod.rs:72:5
[INFO] [stdout]    |
[INFO] [stdout] 72 |     Binary,
[INFO] [stdout]    |     ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]   --> src/streaming/mod.rs:73:5
[INFO] [stdout]    |
[INFO] [stdout] 73 |     InfluxLineProtocol,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for an associated function
[INFO] [stdout]   --> src/streaming/mod.rs:85:5
[INFO] [stdout]    |
[INFO] [stdout] 85 |     pub async fn new(config: StreamingConfig) -> Result<Self> {
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a method
[INFO] [stdout]    --> src/streaming/mod.rs:108:5
[INFO] [stdout]     |
[INFO] [stdout] 108 |     pub async fn start(&mut self, shutdown: broadcast::Receiver<()>) -> Result<()> {
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a method
[INFO] [stdout]    --> src/streaming/mod.rs:120:5
[INFO] [stdout]     |
[INFO] [stdout] 120 |     pub async fn publish_reading(&self, reading: &crate::sensors::SensorReading) -> Result<()> {
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a method
[INFO] [stdout]    --> src/streaming/mod.rs:140:5
[INFO] [stdout]     |
[INFO] [stdout] 140 |     pub async fn publish_detection(&self, detection: &crate::detection::Detection) -> Result<()> {
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct
[INFO] [stdout]   --> src/streaming/mqtt.rs:24:1
[INFO] [stdout]    |
[INFO] [stdout] 24 | pub struct MqttConfig {
[INFO] [stdout]    | ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/streaming/mqtt.rs:25:5
[INFO] [stdout]    |
[INFO] [stdout] 25 |     pub broker: String,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/streaming/mqtt.rs:26:5
[INFO] [stdout]    |
[INFO] [stdout] 26 |     pub port: u16,
[INFO] [stdout]    |     ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/streaming/mqtt.rs:27:5
[INFO] [stdout]    |
[INFO] [stdout] 27 |     pub client_id: String,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/streaming/mqtt.rs:28:5
[INFO] [stdout]    |
[INFO] [stdout] 28 |     pub username: Option<String>,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/streaming/mqtt.rs:29:5
[INFO] [stdout]    |
[INFO] [stdout] 29 |     pub password: Option<String>,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/streaming/mqtt.rs:30:5
[INFO] [stdout]    |
[INFO] [stdout] 30 |     pub use_tls: bool,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/streaming/mqtt.rs:31:5
[INFO] [stdout]    |
[INFO] [stdout] 31 |     pub keep_alive_secs: u64,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/streaming/mqtt.rs:32:5
[INFO] [stdout]    |
[INFO] [stdout] 32 |     pub reconnect_interval_ms: u64,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for an associated function
[INFO] [stdout]   --> src/streaming/mqtt.rs:36:5
[INFO] [stdout]    |
[INFO] [stdout] 36 |     pub async fn new(config: &StreamingConfig) -> Result<Self> {
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a method
[INFO] [stdout]   --> src/streaming/mqtt.rs:94:5
[INFO] [stdout]    |
[INFO] [stdout] 94 |     pub async fn connect(&self) -> Result<()> {
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a method
[INFO] [stdout]    --> src/streaming/mqtt.rs:101:5
[INFO] [stdout]     |
[INFO] [stdout] 101 |     pub async fn publish<T: Serialize>(&self, topic: &str, payload: &T) -> Result<()> {
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a method
[INFO] [stdout]    --> src/streaming/mqtt.rs:111:5
[INFO] [stdout]     |
[INFO] [stdout] 111 |     pub async fn publish_raw(&self, topic: &str, payload: &[u8]) -> Result<()> {
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a method
[INFO] [stdout]    --> src/streaming/mqtt.rs:119:5
[INFO] [stdout]     |
[INFO] [stdout] 119 |     pub async fn subscribe(&self, topic: &str) -> Result<()> {
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a method
[INFO] [stdout]    --> src/streaming/mqtt.rs:128:5
[INFO] [stdout]     |
[INFO] [stdout] 128 |     pub async fn disconnect(&self) -> Result<()> {
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a method
[INFO] [stdout]    --> src/streaming/mqtt.rs:137:5
[INFO] [stdout]     |
[INFO] [stdout] 137 |     pub async fn is_connected(&self) -> bool {
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/streaming/mqtt.rs:145:5
[INFO] [stdout]     |
[INFO] [stdout] 145 |     pub topic: String,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/streaming/mqtt.rs:146:5
[INFO] [stdout]     |
[INFO] [stdout] 146 |     pub payload: Vec<u8>,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/streaming/mqtt.rs:147:5
[INFO] [stdout]     |
[INFO] [stdout] 147 |     pub qos: u8,
[INFO] [stdout]     |     ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/streaming/mqtt.rs:148:5
[INFO] [stdout]     |
[INFO] [stdout] 148 |     pub retain: bool,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for an enum
[INFO] [stdout]   --> src/streaming/websocket.rs:35:1
[INFO] [stdout]    |
[INFO] [stdout] 35 | pub enum WebSocketMessage {
[INFO] [stdout]    | ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]   --> src/streaming/websocket.rs:36:5
[INFO] [stdout]    |
[INFO] [stdout] 36 |     SensorReading(String),  // JSON
[INFO] [stdout]    |     ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]   --> src/streaming/websocket.rs:37:5
[INFO] [stdout]    |
[INFO] [stdout] 37 |     Detection(String),      // JSON
[INFO] [stdout]    |     ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]   --> src/streaming/websocket.rs:38:5
[INFO] [stdout]    |
[INFO] [stdout] 38 |     System(String),         // System message
[INFO] [stdout]    |     ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for an associated function
[INFO] [stdout]   --> src/streaming/websocket.rs:42:5
[INFO] [stdout]    |
[INFO] [stdout] 42 |     pub fn new(port: u16, max_clients: usize) -> Self {
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a method
[INFO] [stdout]   --> src/streaming/websocket.rs:53:5
[INFO] [stdout]    |
[INFO] [stdout] 53 |     pub async fn start(&self, mut shutdown: broadcast::Receiver<()>) -> Result<()> {
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a method
[INFO] [stdout]   --> src/streaming/websocket.rs:96:5
[INFO] [stdout]    |
[INFO] [stdout] 96 |     pub async fn broadcast<T: Serialize>(&self, data: &T) -> Result<()> {
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a method
[INFO] [stdout]    --> src/streaming/websocket.rs:102:5
[INFO] [stdout]     |
[INFO] [stdout] 102 |     pub async fn broadcast_detection(&self, detection: &Detection) -> Result<()> {
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a method
[INFO] [stdout]    --> src/streaming/websocket.rs:108:5
[INFO] [stdout]     |
[INFO] [stdout] 108 |     pub async fn send_to_client(&self, client_id: &str, message: &str) -> Result<()> {
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a method
[INFO] [stdout]    --> src/streaming/websocket.rs:113:5
[INFO] [stdout]     |
[INFO] [stdout] 113 |     pub async fn get_client_count(&self) -> usize {
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a method
[INFO] [stdout]    --> src/streaming/websocket.rs:117:5
[INFO] [stdout]     |
[INFO] [stdout] 117 |     pub async fn get_client_addrs(&self) -> Vec<SocketAddr> {
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for an associated function
[INFO] [stdout]   --> src/streaming/export.rs:31:5
[INFO] [stdout]    |
[INFO] [stdout] 31 |     pub fn new(path: &str, format: ExportFormat) -> Result<Self> {
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for an associated function
[INFO] [stdout]    --> src/streaming/export.rs:265:5
[INFO] [stdout]     |
[INFO] [stdout] 265 |     pub fn new(format: ExportFormat) -> Self {
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for an associated function
[INFO] [stdout]   --> src/security/mod.rs:66:5
[INFO] [stdout]    |
[INFO] [stdout] 66 |     pub fn new(config: SecurityConfig) -> Result<Self> {
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/security/mod.rs:121:5
[INFO] [stdout]     |
[INFO] [stdout] 121 |     pub timestamp: chrono::DateTime<chrono::Utc>,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/security/mod.rs:122:5
[INFO] [stdout]     |
[INFO] [stdout] 122 |     pub event_type: AuditEventType,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/security/mod.rs:123:5
[INFO] [stdout]     |
[INFO] [stdout] 123 |     pub description: String,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/security/mod.rs:124:5
[INFO] [stdout]     |
[INFO] [stdout] 124 |     pub user: Option<String>,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/security/mod.rs:125:5
[INFO] [stdout]     |
[INFO] [stdout] 125 |     pub ip_address: Option<String>,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/security/mod.rs:126:5
[INFO] [stdout]     |
[INFO] [stdout] 126 |     pub success: bool,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for an enum
[INFO] [stdout]    --> src/security/mod.rs:130:1
[INFO] [stdout]     |
[INFO] [stdout] 130 | pub enum AuditEventType {
[INFO] [stdout]     | ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]    --> src/security/mod.rs:131:5
[INFO] [stdout]     |
[INFO] [stdout] 131 |     Login,
[INFO] [stdout]     |     ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]    --> src/security/mod.rs:132:5
[INFO] [stdout]     |
[INFO] [stdout] 132 |     Logout,
[INFO] [stdout]     |     ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]    --> src/security/mod.rs:133:5
[INFO] [stdout]     |
[INFO] [stdout] 133 |     PasswordChange,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]    --> src/security/mod.rs:134:5
[INFO] [stdout]     |
[INFO] [stdout] 134 |     DataAccess,
[INFO] [stdout]     |     ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]    --> src/security/mod.rs:135:5
[INFO] [stdout]     |
[INFO] [stdout] 135 |     DataExport,
[INFO] [stdout]     |     ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]    --> src/security/mod.rs:136:5
[INFO] [stdout]     |
[INFO] [stdout] 136 |     ConfigChange,
[INFO] [stdout]     |     ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]    --> src/security/mod.rs:137:5
[INFO] [stdout]     |
[INFO] [stdout] 137 |     SessionExpired,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]    --> src/security/mod.rs:138:5
[INFO] [stdout]     |
[INFO] [stdout] 138 |     AuthFailure,
[INFO] [stdout]     |     ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]    --> src/security/mod.rs:139:5
[INFO] [stdout]     |
[INFO] [stdout] 139 |     EncryptionOperation,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]    --> src/security/mod.rs:140:5
[INFO] [stdout]     |
[INFO] [stdout] 140 |     SystemStart,
[INFO] [stdout]     |     ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]    --> src/security/mod.rs:141:5
[INFO] [stdout]     |
[INFO] [stdout] 141 |     SystemStop,
[INFO] [stdout]     |     ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for an associated function
[INFO] [stdout]    --> src/security/mod.rs:150:5
[INFO] [stdout]     |
[INFO] [stdout] 150 |     pub fn new() -> Self {
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a method
[INFO] [stdout]    --> src/security/mod.rs:156:5
[INFO] [stdout]     |
[INFO] [stdout] 156 |     pub fn log(&self, event: AuditEvent) {
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a method
[INFO] [stdout]    --> src/security/mod.rs:173:5
[INFO] [stdout]     |
[INFO] [stdout] 173 |     pub fn get_events(&self, limit: usize) -> Vec<AuditEvent> {
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for an associated function
[INFO] [stdout]   --> src/security/encryption.rs:87:5
[INFO] [stdout]    |
[INFO] [stdout] 87 |     pub fn new() -> Result<Self> {
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for an associated function
[INFO] [stdout]   --> src/security/encryption.rs:93:5
[INFO] [stdout]    |
[INFO] [stdout] 93 |     pub fn with_key(key: [u8; 32]) -> Self {
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a method
[INFO] [stdout]   --> src/security/encryption.rs:97:5
[INFO] [stdout]    |
[INFO] [stdout] 97 |     pub fn encrypt(&self, plaintext: &[u8]) -> Result<Vec<u8>> {
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a method
[INFO] [stdout]    --> src/security/encryption.rs:116:5
[INFO] [stdout]     |
[INFO] [stdout] 116 |     pub fn decrypt(&self, data: &[u8]) -> Result<Vec<u8>> {
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct
[INFO] [stdout]   --> src/security/keystore.rs:29:1
[INFO] [stdout]    |
[INFO] [stdout] 29 | pub struct EncryptedKey {
[INFO] [stdout]    | ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for an enum
[INFO] [stdout]   --> src/security/keystore.rs:47:1
[INFO] [stdout]    |
[INFO] [stdout] 47 | pub enum KeyType {
[INFO] [stdout]    | ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]   --> src/security/keystore.rs:48:5
[INFO] [stdout]    |
[INFO] [stdout] 48 |     DataEncryption,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]   --> src/security/keystore.rs:49:5
[INFO] [stdout]    |
[INFO] [stdout] 49 |     NetworkEncryption,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]   --> src/security/keystore.rs:50:5
[INFO] [stdout]    |
[INFO] [stdout] 50 |     SigningKey,
[INFO] [stdout]    |     ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]   --> src/security/keystore.rs:51:5
[INFO] [stdout]    |
[INFO] [stdout] 51 |     APIKey,
[INFO] [stdout]    |     ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]   --> src/security/keystore.rs:52:5
[INFO] [stdout]    |
[INFO] [stdout] 52 |     SessionKey,
[INFO] [stdout]    |     ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for an associated function
[INFO] [stdout]   --> src/security/keystore.rs:56:5
[INFO] [stdout]    |
[INFO] [stdout] 56 |     pub fn new() -> Result<Self> {
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/security/auth.rs:38:5
[INFO] [stdout]    |
[INFO] [stdout] 38 |     pub id: String,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/security/auth.rs:39:5
[INFO] [stdout]    |
[INFO] [stdout] 39 |     pub user_id: String,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/security/auth.rs:40:5
[INFO] [stdout]    |
[INFO] [stdout] 40 |     pub created_at: DateTime<Utc>,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/security/auth.rs:41:5
[INFO] [stdout]    |
[INFO] [stdout] 41 |     pub expires_at: DateTime<Utc>,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/security/auth.rs:42:5
[INFO] [stdout]    |
[INFO] [stdout] 42 |     pub ip_address: Option<String>,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/security/auth.rs:43:5
[INFO] [stdout]    |
[INFO] [stdout] 43 |     pub user_agent: Option<String>,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/security/auth.rs:44:5
[INFO] [stdout]    |
[INFO] [stdout] 44 |     pub is_active: bool,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/security/auth.rs:50:5
[INFO] [stdout]    |
[INFO] [stdout] 50 |     pub score: u32,  // 0-4 (weak to very strong)
[INFO] [stdout]    |     ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/security/auth.rs:51:5
[INFO] [stdout]    |
[INFO] [stdout] 51 |     pub feedback: Vec<String>,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/security/auth.rs:52:5
[INFO] [stdout]    |
[INFO] [stdout] 52 |     pub acceptable: bool,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for an associated function
[INFO] [stdout]   --> src/security/auth.rs:56:5
[INFO] [stdout]    |
[INFO] [stdout] 56 |     pub fn new(min_password_length: usize) -> Self {
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for an associated function
[INFO] [stdout]   --> src/security/secure_memory.rs:17:5
[INFO] [stdout]    |
[INFO] [stdout] 17 |     pub fn new(size: usize) -> Self {
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for an associated function
[INFO] [stdout]   --> src/security/secure_memory.rs:23:5
[INFO] [stdout]    |
[INFO] [stdout] 23 |     pub fn from_slice(slice: &[u8]) -> Self {
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a method
[INFO] [stdout]   --> src/security/secure_memory.rs:29:5
[INFO] [stdout]    |
[INFO] [stdout] 29 |     pub fn len(&self) -> usize {
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a method
[INFO] [stdout]   --> src/security/secure_memory.rs:33:5
[INFO] [stdout]    |
[INFO] [stdout] 33 |     pub fn is_empty(&self) -> bool {
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a method
[INFO] [stdout]   --> src/security/secure_memory.rs:37:5
[INFO] [stdout]    |
[INFO] [stdout] 37 |     pub fn clear(&mut self) {
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for an associated function
[INFO] [stdout]   --> src/security/secure_memory.rs:69:5
[INFO] [stdout]    |
[INFO] [stdout] 69 |     pub fn new(s: &str) -> Self {
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for an associated function
[INFO] [stdout]   --> src/security/secure_memory.rs:75:5
[INFO] [stdout]    |
[INFO] [stdout] 75 |     pub fn from_string(s: String) -> Self {
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a method
[INFO] [stdout]   --> src/security/secure_memory.rs:79:5
[INFO] [stdout]    |
[INFO] [stdout] 79 |     pub fn as_str(&self) -> &str {
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a method
[INFO] [stdout]   --> src/security/secure_memory.rs:83:5
[INFO] [stdout]    |
[INFO] [stdout] 83 |     pub fn len(&self) -> usize {
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a method
[INFO] [stdout]   --> src/security/secure_memory.rs:87:5
[INFO] [stdout]    |
[INFO] [stdout] 87 |     pub fn is_empty(&self) -> bool {
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for an associated function
[INFO] [stdout]    --> src/security/secure_memory.rs:119:5
[INFO] [stdout]     |
[INFO] [stdout] 119 |     pub fn new(size: usize) -> Self {
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for an associated function
[INFO] [stdout]    --> src/security/secure_memory.rs:128:5
[INFO] [stdout]     |
[INFO] [stdout] 128 |     pub fn from_slice(slice: &[u8]) -> Self {
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a method
[INFO] [stdout]    --> src/security/secure_memory.rs:160:5
[INFO] [stdout]     |
[INFO] [stdout] 160 |     pub fn is_locked(&self) -> bool {
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for an enum
[INFO] [stdout]    --> src/config/mod.rs:239:1
[INFO] [stdout]     |
[INFO] [stdout] 239 | pub enum FusionMethod {
[INFO] [stdout]     | ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]    --> src/config/mod.rs:240:5
[INFO] [stdout]     |
[INFO] [stdout] 240 |     Bayesian,
[INFO] [stdout]     |     ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]    --> src/config/mod.rs:241:5
[INFO] [stdout]     |
[INFO] [stdout] 241 |     DempsterShafer,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]    --> src/config/mod.rs:242:5
[INFO] [stdout]     |
[INFO] [stdout] 242 |     WeightedAverage,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for an enum
[INFO] [stdout]    --> src/config/mod.rs:246:1
[INFO] [stdout]     |
[INFO] [stdout] 246 | pub enum Severity {
[INFO] [stdout]     | ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]    --> src/config/mod.rs:247:5
[INFO] [stdout]     |
[INFO] [stdout] 247 |     Low,
[INFO] [stdout]     |     ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]    --> src/config/mod.rs:248:5
[INFO] [stdout]     |
[INFO] [stdout] 248 |     Medium,
[INFO] [stdout]     |     ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]    --> src/config/mod.rs:249:5
[INFO] [stdout]     |
[INFO] [stdout] 249 |     High,
[INFO] [stdout]     |     ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]    --> src/config/mod.rs:250:5
[INFO] [stdout]     |
[INFO] [stdout] 250 |     Critical,
[INFO] [stdout]     |     ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for an enum
[INFO] [stdout]    --> src/config/mod.rs:301:1
[INFO] [stdout]     |
[INFO] [stdout] 301 | pub enum Theme {
[INFO] [stdout]     | ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]    --> src/config/mod.rs:302:5
[INFO] [stdout]     |
[INFO] [stdout] 302 |     Dark,
[INFO] [stdout]     |     ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]    --> src/config/mod.rs:303:5
[INFO] [stdout]     |
[INFO] [stdout] 303 |     Light,
[INFO] [stdout]     |     ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]    --> src/config/mod.rs:304:5
[INFO] [stdout]     |
[INFO] [stdout] 304 |     System,
[INFO] [stdout]     |     ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for an enum
[INFO] [stdout]    --> src/config/mod.rs:308:1
[INFO] [stdout]     |
[INFO] [stdout] 308 | pub enum Colormap {
[INFO] [stdout]     | ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]    --> src/config/mod.rs:309:5
[INFO] [stdout]     |
[WARN] too many lines in the log, truncating it
