[INFO] fetching crate ccny-course-catalog 0.1.4...
[INFO] checking ccny-course-catalog-0.1.4 against master#779e19d8baa3e3625bd4fc5c85cbb2ad47b43155 for pr-147589-1
[INFO] extracting crate ccny-course-catalog 0.1.4 into /workspace/builds/worker-3-tc1/source
[INFO] started tweaking crates.io crate ccny-course-catalog 0.1.4
[INFO] finished tweaking crates.io crate ccny-course-catalog 0.1.4
[INFO] tweaked toml for crates.io crate ccny-course-catalog 0.1.4 written to /workspace/builds/worker-3-tc1/source/Cargo.toml
[INFO] validating manifest of crates.io crate ccny-course-catalog 0.1.4 on toolchain 779e19d8baa3e3625bd4fc5c85cbb2ad47b43155
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+779e19d8baa3e3625bd4fc5c85cbb2ad47b43155" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }`
[INFO] crate crates.io crate ccny-course-catalog 0.1.4 already has a lockfile, it will not be regenerated
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+779e19d8baa3e3625bd4fc5c85cbb2ad47b43155" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }`
[INFO] [stderr]     Updating crates.io index
[INFO] [stderr]  Downloading crates ...
[INFO] [stderr]   Downloaded filepath v0.2.0
[INFO] [stderr]   Downloaded rayon v0.7.1
[INFO] [stderr]   Downloaded closestmatch v0.1.2
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-3-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-3-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:e90291280db7d1fac5b66fc6dad9f9662629e7365a55743daf9bdf73ebc4ea79" "/opt/rustwide/cargo-home/bin/cargo" "+779e19d8baa3e3625bd4fc5c85cbb2ad47b43155" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }`
[INFO] [stdout] 80501fd2af0cffd573ecda4bdee802dc160710a91f7ef4ba33759a3e0176d53d
[INFO] running `Command { std: "docker" "start" "-a" "80501fd2af0cffd573ecda4bdee802dc160710a91f7ef4ba33759a3e0176d53d", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "80501fd2af0cffd573ecda4bdee802dc160710a91f7ef4ba33759a3e0176d53d", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "80501fd2af0cffd573ecda4bdee802dc160710a91f7ef4ba33759a3e0176d53d", kill_on_drop: false }`
[INFO] [stdout] 80501fd2af0cffd573ecda4bdee802dc160710a91f7ef4ba33759a3e0176d53d
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-3-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-3-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "RUSTDOCFLAGS=--cap-lints=forbid" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:e90291280db7d1fac5b66fc6dad9f9662629e7365a55743daf9bdf73ebc4ea79" "/opt/rustwide/cargo-home/bin/cargo" "+779e19d8baa3e3625bd4fc5c85cbb2ad47b43155" "check" "--frozen" "--all" "--all-targets" "--message-format=json", kill_on_drop: false }`
[INFO] [stdout] 05b36f548720ba4e56b6db7d95c07c9aa6e0cbd2edb5c07354543f3e12c2f5dd
[INFO] running `Command { std: "docker" "start" "-a" "05b36f548720ba4e56b6db7d95c07c9aa6e0cbd2edb5c07354543f3e12c2f5dd", kill_on_drop: false }`
[INFO] [stderr]    Compiling proc-macro2 v1.0.93
[INFO] [stderr]    Compiling cc v1.2.9
[INFO] [stderr]    Compiling httparse v1.9.5
[INFO] [stderr]     Checking hashbrown v0.15.2
[INFO] [stderr]     Checking miniz_oxide v0.8.3
[INFO] [stderr]    Compiling serde_json v1.0.135
[INFO] [stderr]    Compiling anyhow v1.0.95
[INFO] [stderr]     Checking rustls-pki-types v1.10.1
[INFO] [stderr]     Checking ipnet v2.10.1
[INFO] [stderr]     Checking filepath v0.2.0
[INFO] [stderr]     Checking rayon v0.7.1
[INFO] [stderr]     Checking rustls-pemfile v2.2.0
[INFO] [stderr]    Compiling quote v1.0.38
[INFO] [stderr]    Compiling syn v2.0.96
[INFO] [stderr]     Checking flate2 v1.0.35
[INFO] [stderr]     Checking indexmap v2.7.0
[INFO] [stderr]     Checking lru v0.13.0
[INFO] [stderr]     Checking closestmatch v0.1.2
[INFO] [stderr]    Compiling openssl-sys v0.9.104
[INFO] [stderr]    Compiling openssl v0.10.68
[INFO] [stderr]    Compiling native-tls v0.2.12
[INFO] [stderr]    Compiling synstructure v0.13.1
[INFO] [stderr]    Compiling zerofrom-derive v0.1.5
[INFO] [stderr]    Compiling yoke-derive v0.7.5
[INFO] [stderr]    Compiling zerovec-derive v0.10.3
[INFO] [stderr]    Compiling displaydoc v0.2.5
[INFO] [stderr]    Compiling tokio-macros v2.5.0
[INFO] [stderr]    Compiling futures-macro v0.3.31
[INFO] [stderr]    Compiling icu_provider_macros v1.5.0
[INFO] [stderr]    Compiling openssl-macros v0.1.1
[INFO] [stderr]    Compiling serde_derive v1.0.217
[INFO] [stderr]     Checking tokio v1.43.0
[INFO] [stderr]     Checking futures-util v0.3.31
[INFO] [stderr]     Checking zerofrom v0.1.5
[INFO] [stderr]     Checking yoke v0.7.5
[INFO] [stderr]     Checking zerovec v0.10.4
[INFO] [stderr]     Checking serde v1.0.217
[INFO] [stderr]     Checking tinystr v0.7.6
[INFO] [stderr]     Checking icu_collections v1.5.0
[INFO] [stderr]     Checking icu_locid v1.5.0
[INFO] [stderr]     Checking icu_provider v1.5.0
[INFO] [stderr]     Checking icu_locid_transform v1.5.0
[INFO] [stderr]     Checking http-body-util v0.1.2
[INFO] [stderr]     Checking futures-executor v0.3.31
[INFO] [stderr]     Checking futures v0.3.31
[INFO] [stderr]     Checking icu_properties v1.5.1
[INFO] [stderr]     Checking serde_urlencoded v0.7.1
[INFO] [stderr]     Checking tokio-util v0.7.13
[INFO] [stderr]     Checking tokio-native-tls v0.3.1
[INFO] [stderr]     Checking tower v0.5.2
[INFO] [stderr]     Checking async-compression v0.4.18
[INFO] [stderr]     Checking icu_normalizer v1.5.0
[INFO] [stderr]     Checking h2 v0.4.7
[INFO] [stderr]     Checking idna_adapter v1.2.0
[INFO] [stderr]     Checking idna v1.0.3
[INFO] [stderr]     Checking url v2.5.4
[INFO] [stderr]     Checking hyper v1.5.2
[INFO] [stderr]     Checking hyper-util v0.1.10
[INFO] [stderr]     Checking hyper-tls v0.6.0
[INFO] [stderr]     Checking reqwest v0.12.12
[INFO] [stderr]     Checking ccny-course-catalog v0.1.4 (/opt/rustwide/workdir)
[INFO] [stdout] warning: unused import: `std::mem`
[INFO] [stdout]   --> src/data_structures/custom_lru_cache.rs:10:5
[INFO] [stdout]    |
[INFO] [stdout] 10 | use std::mem;
[INFO] [stdout]    |     ^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `ACCEPT`, `CONTENT_TYPE`, `HeaderMap`, `HeaderValue`, `ORIGIN`, and `REFERER`
[INFO] [stdout]  --> src/api/course_finder.rs:6:23
[INFO] [stdout]   |
[INFO] [stdout] 6 | use reqwest::header::{HeaderMap, HeaderValue, ACCEPT, CONTENT_TYPE, ORIGIN, REFERER};
[INFO] [stdout]   |                       ^^^^^^^^^  ^^^^^^^^^^^  ^^^^^^  ^^^^^^^^^^^^  ^^^^^^  ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `serde_json::json`
[INFO] [stdout]  --> src/api/course_finder.rs:7:5
[INFO] [stdout]   |
[INFO] [stdout] 7 | use serde_json::json;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `fs` and `io::Write`
[INFO] [stdout]  --> src/api/course_finder.rs:8:11
[INFO] [stdout]   |
[INFO] [stdout] 8 | use std::{fs, io::Write};
[INFO] [stdout]   |           ^^  ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::path::PathBuf`
[INFO] [stdout]  --> src/api/course_finder.rs:9:5
[INFO] [stdout]   |
[INFO] [stdout] 9 | use std::path::PathBuf;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::borrow::Borrow`
[INFO] [stdout]   --> src/api/course_finder.rs:11:5
[INFO] [stdout]    |
[INFO] [stdout] 11 | use std::borrow::Borrow;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Deserialize` and `Serialize`
[INFO] [stdout]   --> src/api/course_finder.rs:12:13
[INFO] [stdout]    |
[INFO] [stdout] 12 | use serde::{Deserialize, Serialize};
[INFO] [stdout]    |             ^^^^^^^^^^^  ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::ptr::null`
[INFO] [stdout]   --> src/api/course_finder.rs:13:5
[INFO] [stdout]    |
[INFO] [stdout] 13 | use std::ptr::null;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::api::course_finder`
[INFO] [stdout]  --> src/api/utils.rs:3:5
[INFO] [stdout]   |
[INFO] [stdout] 3 | use crate::api::course_finder;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `io::Write`
[INFO] [stdout]  --> src/api/utils.rs:7:15
[INFO] [stdout]   |
[INFO] [stdout] 7 | use std::{fs, io::Write};
[INFO] [stdout]   |               ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `CourseComponents` and `CourseInfo`
[INFO] [stdout]   --> src/lib.rs:18:22
[INFO] [stdout]    |
[INFO] [stdout] 18 | use models::course::{CourseComponents, CourseInfo};
[INFO] [stdout]    |                      ^^^^^^^^^^^^^^^^  ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::mem`
[INFO] [stdout]   --> src/data_structures/custom_lru_cache.rs:10:5
[INFO] [stdout]    |
[INFO] [stdout] 10 | use std::mem;
[INFO] [stdout]    |     ^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `ACCEPT`, `CONTENT_TYPE`, `HeaderMap`, `HeaderValue`, `ORIGIN`, and `REFERER`
[INFO] [stdout]  --> src/api/course_finder.rs:6:23
[INFO] [stdout]   |
[INFO] [stdout] 6 | use reqwest::header::{HeaderMap, HeaderValue, ACCEPT, CONTENT_TYPE, ORIGIN, REFERER};
[INFO] [stdout]   |                       ^^^^^^^^^  ^^^^^^^^^^^  ^^^^^^  ^^^^^^^^^^^^  ^^^^^^  ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `serde_json::json`
[INFO] [stdout]  --> src/api/course_finder.rs:7:5
[INFO] [stdout]   |
[INFO] [stdout] 7 | use serde_json::json;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `fs` and `io::Write`
[INFO] [stdout]  --> src/api/course_finder.rs:8:11
[INFO] [stdout]   |
[INFO] [stdout] 8 | use std::{fs, io::Write};
[INFO] [stdout]   |           ^^  ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::path::PathBuf`
[INFO] [stdout]  --> src/api/course_finder.rs:9:5
[INFO] [stdout]   |
[INFO] [stdout] 9 | use std::path::PathBuf;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::borrow::Borrow`
[INFO] [stdout]   --> src/api/course_finder.rs:11:5
[INFO] [stdout]    |
[INFO] [stdout] 11 | use std::borrow::Borrow;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Deserialize` and `Serialize`
[INFO] [stdout]   --> src/api/course_finder.rs:12:13
[INFO] [stdout]    |
[INFO] [stdout] 12 | use serde::{Deserialize, Serialize};
[INFO] [stdout]    |             ^^^^^^^^^^^  ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::ptr::null`
[INFO] [stdout]   --> src/api/course_finder.rs:13:5
[INFO] [stdout]    |
[INFO] [stdout] 13 | use std::ptr::null;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::api::course_finder`
[INFO] [stdout]  --> src/api/utils.rs:3:5
[INFO] [stdout]   |
[INFO] [stdout] 3 | use crate::api::course_finder;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `io::Write`
[INFO] [stdout]  --> src/api/utils.rs:7:15
[INFO] [stdout]   |
[INFO] [stdout] 7 | use std::{fs, io::Write};
[INFO] [stdout]   |               ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `CourseComponents` and `CourseInfo`
[INFO] [stdout]   --> src/lib.rs:18:22
[INFO] [stdout]    |
[INFO] [stdout] 18 | use models::course::{CourseComponents, CourseInfo};
[INFO] [stdout]    |                      ^^^^^^^^^^^^^^^^  ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/api/department.rs:53:25
[INFO] [stdout]    |
[INFO] [stdout] 53 |                     let mut course_component_instance = CourseComponents {
[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/api/department.rs:87:17
[INFO] [stdout]    |
[INFO] [stdout] 87 |             let mut course_info_instance = CourseInfo {
[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/api/department.rs:53:25
[INFO] [stdout]    |
[INFO] [stdout] 53 |                     let mut course_component_instance = CourseComponents {
[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/api/department.rs:87:17
[INFO] [stdout]    |
[INFO] [stdout] 87 |             let mut course_info_instance = CourseInfo {
[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/api/course_finder.rs:66:9
[INFO] [stdout]    |
[INFO] [stdout] 66 |     let mut closest_course_groupID = String::new();        // result will be stored here
[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/api/course_finder.rs:73:9
[INFO] [stdout]    |
[INFO] [stdout] 73 |     let mut courses_by_department = fetch_courses_by_department(&closest_department).await.unwrap();
[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/api/course_finder.rs:66:9
[INFO] [stdout]    |
[INFO] [stdout] 66 |     let mut closest_course_groupID = String::new();        // result will be stored here
[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/api/course_finder.rs:73:9
[INFO] [stdout]    |
[INFO] [stdout] 73 |     let mut courses_by_department = fetch_courses_by_department(&closest_department).await.unwrap();
[INFO] [stdout]    |         ----^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |         |
[INFO] [stdout]    |         help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `effective_end_date_placeholder`
[INFO] [stdout]   --> src/api/department.rs:72:17
[INFO] [stdout]    |
[INFO] [stdout] 72 | ...   let effective_end_date_placeholder = serde_json::from_value(course_data["effectiveEndDate"].clone()).unwrap_or("null".to_owned());
[INFO] [stdout]    |           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_effective_end_date_placeholder`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `value`
[INFO] [stdout]    --> src/api/department.rs:313:14
[INFO] [stdout]     |
[INFO] [stdout] 313 |     for (key,value) in department_mapping.into_iter() {
[INFO] [stdout]     |              ^^^^^ help: if this is intentional, prefix it with an underscore: `_value`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `json_string`
[INFO] [stdout]   --> src/api/course_finder.rs:21:9
[INFO] [stdout]    |
[INFO] [stdout] 21 |     let json_string : serde_json::Value = serde_json::from_str(&body)?;
[INFO] [stdout]    |         ^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_json_string`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `effective_end_date_placeholder`
[INFO] [stdout]   --> src/api/department.rs:72:17
[INFO] [stdout]    |
[INFO] [stdout] 72 | ...   let effective_end_date_placeholder = serde_json::from_value(course_data["effectiveEndDate"].clone()).unwrap_or("null".to_owned());
[INFO] [stdout]    |           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_effective_end_date_placeholder`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `closest_course_groupID`
[INFO] [stdout]   --> src/api/course_finder.rs:66:9
[INFO] [stdout]    |
[INFO] [stdout] 66 |     let mut closest_course_groupID = String::new();        // result will be stored here
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_closest_course_groupID`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `course_name_and_code_mapping`
[INFO] [stdout]    --> src/api/course_finder.rs:110:9
[INFO] [stdout]     |
[INFO] [stdout] 110 |     let course_name_and_code_mapping : BTreeMap<String, (i32, String)> = BTreeMap::new();     // this is where the mapping logic will be ...
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_course_name_and_code_mapping`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `department_courses`
[INFO] [stdout]   --> src/api/utils.rs:14:9
[INFO] [stdout]    |
[INFO] [stdout] 14 |     let department_courses : Vec<CourseInfo> = fetch_courses_by_department(department_name).await?;
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_department_courses`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `value`
[INFO] [stdout]   --> src/api/utils.rs:35:14
[INFO] [stdout]    |
[INFO] [stdout] 35 |     for (key,value) in hashmap_input.into_iter() {
[INFO] [stdout]    |              ^^^^^ help: if this is intentional, prefix it with an underscore: `_value`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `value`
[INFO] [stdout]    --> src/api/department.rs:313:14
[INFO] [stdout]     |
[INFO] [stdout] 313 |     for (key,value) in department_mapping.into_iter() {
[INFO] [stdout]     |              ^^^^^ help: if this is intentional, prefix it with an underscore: `_value`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `json_string`
[INFO] [stdout]   --> src/api/course_finder.rs:21:9
[INFO] [stdout]    |
[INFO] [stdout] 21 |     let json_string : serde_json::Value = serde_json::from_str(&body)?;
[INFO] [stdout]    |         ^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_json_string`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `closest_course_groupID`
[INFO] [stdout]   --> src/api/course_finder.rs:66:9
[INFO] [stdout]    |
[INFO] [stdout] 66 |     let mut closest_course_groupID = String::new();        // result will be stored here
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_closest_course_groupID`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `course_name_and_code_mapping`
[INFO] [stdout]    --> src/api/course_finder.rs:110:9
[INFO] [stdout]     |
[INFO] [stdout] 110 |     let course_name_and_code_mapping : BTreeMap<String, (i32, String)> = BTreeMap::new();     // this is where the mapping logic will be ...
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_course_name_and_code_mapping`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `DEFAULT_MAX_SIZE` is never used
[INFO] [stdout]  --> src/data_structures/custom_hashmap.rs:9:7
[INFO] [stdout]   |
[INFO] [stdout] 9 | const DEFAULT_MAX_SIZE : u64 = 256;
[INFO] [stdout]   |       ^^^^^^^^^^^^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `CustomHashMap` is never constructed
[INFO] [stdout]   --> src/data_structures/custom_hashmap.rs:13:12
[INFO] [stdout]    |
[INFO] [stdout] 13 | pub struct CustomHashMap<T,V> {
[INFO] [stdout]    |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `KeyValue` is never constructed
[INFO] [stdout]   --> src/data_structures/custom_hashmap.rs:24:12
[INFO] [stdout]    |
[INFO] [stdout] 24 | pub struct KeyValue<T,V> {
[INFO] [stdout]    |            ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `new` is never used
[INFO] [stdout]   --> src/data_structures/custom_hashmap.rs:36:12
[INFO] [stdout]    |
[INFO] [stdout] 33 | impl<T,V> KeyValue<T,V> {
[INFO] [stdout]    | ----------------------- associated function in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 36 |     pub fn new(key : T, value : V) -> KeyValue<T,V> {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `department_courses`
[INFO] [stdout]   --> src/api/utils.rs:14:9
[INFO] [stdout]    |
[INFO] [stdout] 14 |     let department_courses : Vec<CourseInfo> = fetch_courses_by_department(department_name).await?;
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_department_courses`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/data_structures/custom_hashmap.rs:58:11
[INFO] [stdout]     |
[INFO] [stdout]  57 | impl<T : Clone + Hash + PartialEq, V : Copy> CustomHashMap<T,V> {
[INFO] [stdout]     | --------------------------------------------------------------- associated items in this implementation
[INFO] [stdout]  58 |     const INIT : Option<KeyValue<T,V>> = None;      // we use const to avoid running into borrow/ownership related errors that may arise
[INFO] [stdout]     |           ^^^^
[INFO] [stdout]  59 |
[INFO] [stdout]  60 |     pub fn new() -> CustomHashMap<T,V> {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout]  68 |     pub fn insert(&mut self, key : T, val : V) -> Option<V> {
[INFO] [stdout]     |            ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  97 |     fn insert_new_value(&mut self, key : T, val : V, position : usize) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 107 |     fn update_or_link_new_val(&mut self, key : T, val : V, position : usize) -> Option<V> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 172 |     pub fn get(&self, key : T) -> Option<V> {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 186 |     fn check_list_for_key(&self, key : T, position : usize) -> Option<V> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 216 |     pub fn remove(&mut self, key : T) -> Option<V> {
[INFO] [stdout]     |            ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 230 |     fn check_item_in_list_and_remove(&mut self, key : T, position : usize) -> Option<V> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 303 |     pub fn clear(&mut self) {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 308 |     pub fn len(&self) -> usize {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 312 |     pub fn is_empty(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `hash_key` is never used
[INFO] [stdout]    --> src/data_structures/custom_hashmap.rs:322:4
[INFO] [stdout]     |
[INFO] [stdout] 322 | fn hash_key<T : Hash>(key : T) -> u64 {
[INFO] [stdout]     |    ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `Node` is never constructed
[INFO] [stdout]   --> src/data_structures/custom_lru_cache.rs:17:12
[INFO] [stdout]    |
[INFO] [stdout] 17 | pub struct Node<K,V> {
[INFO] [stdout]    |            ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `CustomLruCache` is never constructed
[INFO] [stdout]   --> src/data_structures/custom_lru_cache.rs:26:12
[INFO] [stdout]    |
[INFO] [stdout] 26 | pub struct CustomLruCache<K, V> {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/data_structures/custom_lru_cache.rs:52:12
[INFO] [stdout]     |
[INFO] [stdout]  49 | impl<K : Hash + Eq + Clone, V : Copy> CustomLruCache<K,V> {
[INFO] [stdout]     | --------------------------------------------------------- associated items in this implementation
[INFO] [stdout] ...
[INFO] [stdout]  52 |     pub fn new(capacity : usize) -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout]  69 |     pub fn get(&mut self, key : &K) -> Option<&V> {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout]  85 |     pub fn get_mut(&mut self, key : &K) -> Option<&mut V> {
[INFO] [stdout]     |            ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  93 |     pub fn insert(&mut self, key : K, value : V) {
[INFO] [stdout]     |            ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 145 |     pub fn remove(&mut self, key : &K) -> Option<V> {
[INFO] [stdout]     |            ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 154 |     pub fn clear(&mut self) {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 163 |     pub fn len(&self) -> usize {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 168 |     pub fn is_empty(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 176 |     fn move_to_front(&mut self, node_idx : usize) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 213 |     fn remove_node(&mut self, node_idx : usize) -> Option<V> {
[INFO] [stdout]     |        ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 241 |     fn evict_tail(&mut self) {
[INFO] [stdout]     |        ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `retrieve_historical_terms` is never used
[INFO] [stdout]   --> src/api/course_finder.rs:16:14
[INFO] [stdout]    |
[INFO] [stdout] 16 | pub async fn retrieve_historical_terms() -> Result<()> {
[INFO] [stdout]    |              ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `get_course_list_by_department` is never used
[INFO] [stdout]   --> src/api/utils.rs:11:14
[INFO] [stdout]    |
[INFO] [stdout] 11 | pub async fn get_course_list_by_department(department_name : &str) -> Result<Vec<String>, anyhow::Error> {
[INFO] [stdout]    |              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `print_type_of` is never used
[INFO] [stdout]   --> src/api/utils.rs:20:8
[INFO] [stdout]    |
[INFO] [stdout] 20 | pub fn print_type_of<T>(_ : &T) {
[INFO] [stdout]    |        ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `save_to_file` is never used
[INFO] [stdout]   --> src/api/utils.rs:25:8
[INFO] [stdout]    |
[INFO] [stdout] 25 | pub fn save_to_file(data: &serde_json::Value, filename: &str) -> Result<PathBuf> {
[INFO] [stdout]    |        ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `print_hashmap_keys` is never used
[INFO] [stdout]   --> src/api/utils.rs:34:8
[INFO] [stdout]    |
[INFO] [stdout] 34 | pub fn print_hashmap_keys(hashmap_input : HashMap<String, String>) {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable `CourseInfoVector` should have a snake case name
[INFO] [stdout]   --> src/api/department.rs:25:13
[INFO] [stdout]    |
[INFO] [stdout] 25 |     let mut CourseInfoVector : Vec<CourseInfo> = Vec::new();        // store results here
[INFO] [stdout]    |             ^^^^^^^^^^^^^^^^ help: convert the identifier to snake case: `course_info_vector`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(non_snake_case)]` (part of `#[warn(nonstandard_style)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable `closest_course_groupID` should have a snake case name
[INFO] [stdout]   --> src/api/course_finder.rs:66:13
[INFO] [stdout]    |
[INFO] [stdout] 66 |     let mut closest_course_groupID = String::new();        // result will be stored here
[INFO] [stdout]    |             ^^^^^^^^^^^^^^^^^^^^^^ help: convert the identifier to snake case: `closest_course_group_id`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `value`
[INFO] [stdout]   --> src/api/utils.rs:35:14
[INFO] [stdout]    |
[INFO] [stdout] 35 |     for (key,value) in hashmap_input.into_iter() {
[INFO] [stdout]    |              ^^^^^ help: if this is intentional, prefix it with an underscore: `_value`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `get_mut` and `remove` are never used
[INFO] [stdout]    --> src/data_structures/custom_lru_cache.rs:85:12
[INFO] [stdout]     |
[INFO] [stdout]  49 | impl<K : Hash + Eq + Clone, V : Copy> CustomLruCache<K,V> {
[INFO] [stdout]     | --------------------------------------------------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout]  85 |     pub fn get_mut(&mut self, key : &K) -> Option<&mut V> {
[INFO] [stdout]     |            ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 145 |     pub fn remove(&mut self, key : &K) -> Option<V> {
[INFO] [stdout]     |            ^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `retrieve_historical_terms` is never used
[INFO] [stdout]   --> src/api/course_finder.rs:16:14
[INFO] [stdout]    |
[INFO] [stdout] 16 | pub async fn retrieve_historical_terms() -> Result<()> {
[INFO] [stdout]    |              ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `get_course_list_by_department` is never used
[INFO] [stdout]   --> src/api/utils.rs:11:14
[INFO] [stdout]    |
[INFO] [stdout] 11 | pub async fn get_course_list_by_department(department_name : &str) -> Result<Vec<String>, anyhow::Error> {
[INFO] [stdout]    |              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `print_type_of` is never used
[INFO] [stdout]   --> src/api/utils.rs:20:8
[INFO] [stdout]    |
[INFO] [stdout] 20 | pub fn print_type_of<T>(_ : &T) {
[INFO] [stdout]    |        ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `save_to_file` is never used
[INFO] [stdout]   --> src/api/utils.rs:25:8
[INFO] [stdout]    |
[INFO] [stdout] 25 | pub fn save_to_file(data: &serde_json::Value, filename: &str) -> Result<PathBuf> {
[INFO] [stdout]    |        ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `print_hashmap_keys` is never used
[INFO] [stdout]   --> src/api/utils.rs:34:8
[INFO] [stdout]    |
[INFO] [stdout] 34 | pub fn print_hashmap_keys(hashmap_input : HashMap<String, String>) {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable `CourseInfoVector` should have a snake case name
[INFO] [stdout]   --> src/api/department.rs:25:13
[INFO] [stdout]    |
[INFO] [stdout] 25 |     let mut CourseInfoVector : Vec<CourseInfo> = Vec::new();        // store results here
[INFO] [stdout]    |             ^^^^^^^^^^^^^^^^ help: convert the identifier to snake case: `course_info_vector`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(non_snake_case)]` (part of `#[warn(nonstandard_style)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable `closest_course_groupID` should have a snake case name
[INFO] [stdout]   --> src/api/course_finder.rs:66:13
[INFO] [stdout]    |
[INFO] [stdout] 66 |     let mut closest_course_groupID = String::new();        // result will be stored here
[INFO] [stdout]    |             ^^^^^^^^^^^^^^^^^^^^^^ help: convert the identifier to snake case: `closest_course_group_id`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `io::Write`
[INFO] [stdout]  --> src/main.rs:6:15
[INFO] [stdout]   |
[INFO] [stdout] 6 | use std::{fs, io::Write};
[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: `std::ptr::null`
[INFO] [stdout]   --> src/main.rs:11:5
[INFO] [stdout]    |
[INFO] [stdout] 11 | use std::ptr::null;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/bin/experimental.rs:27:9
[INFO] [stdout]    |
[INFO] [stdout] 27 |     let mut course_instance = CCNYCourseCatalog::new(String::from("computer science"), Some(String::from("algorithms")));
[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/bin/experimental.rs:31:9
[INFO] [stdout]    |
[INFO] [stdout] 31 |     let mut list_of_courses = course_instance.get_courses_list().await;
[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/bin/experimental.rs:32:9
[INFO] [stdout]    |
[INFO] [stdout] 32 |     let mut course_info = course_instance.get_course_info().await;
[INFO] [stdout]    |         ----^^^^^^^^^^^
[INFO] [stdout]    |         |
[INFO] [stdout]    |         help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `list_of_courses`
[INFO] [stdout]   --> src/bin/experimental.rs:31:9
[INFO] [stdout]    |
[INFO] [stdout] 31 |     let mut list_of_courses = course_instance.get_courses_list().await;
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_list_of_courses`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `course_info`
[INFO] [stdout]   --> src/bin/experimental.rs:32:9
[INFO] [stdout]    |
[INFO] [stdout] 32 |     let mut course_info = course_instance.get_course_info().await;
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_course_info`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/bin/experimental.rs:27:9
[INFO] [stdout]    |
[INFO] [stdout] 27 |     let mut course_instance = CCNYCourseCatalog::new(String::from("computer science"), Some(String::from("algorithms")));
[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/bin/experimental.rs:31:9
[INFO] [stdout]    |
[INFO] [stdout] 31 |     let mut list_of_courses = course_instance.get_courses_list().await;
[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/bin/experimental.rs:32:9
[INFO] [stdout]    |
[INFO] [stdout] 32 |     let mut course_info = course_instance.get_course_info().await;
[INFO] [stdout]    |         ----^^^^^^^^^^^
[INFO] [stdout]    |         |
[INFO] [stdout]    |         help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `list_of_courses`
[INFO] [stdout]   --> src/bin/experimental.rs:31:9
[INFO] [stdout]    |
[INFO] [stdout] 31 |     let mut list_of_courses = course_instance.get_courses_list().await;
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_list_of_courses`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `course_info`
[INFO] [stdout]   --> src/bin/experimental.rs:32:9
[INFO] [stdout]    |
[INFO] [stdout] 32 |     let mut course_info = course_instance.get_course_info().await;
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_course_info`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/main.rs:63:9
[INFO] [stdout]    |
[INFO] [stdout] 63 |     let mut closest_course_groupID = String::new();        // result will be stored here
[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/main.rs:71:9
[INFO] [stdout]    |
[INFO] [stdout] 71 |     let mut courses_by_department = fetch_courses_by_department(&closest_department).await.unwrap();
[INFO] [stdout]    |         ----^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |         |
[INFO] [stdout]    |         help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `io::Write`
[INFO] [stdout]  --> src/main.rs:6:15
[INFO] [stdout]   |
[INFO] [stdout] 6 | use std::{fs, io::Write};
[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: `std::ptr::null`
[INFO] [stdout]   --> src/main.rs:11:5
[INFO] [stdout]    |
[INFO] [stdout] 11 | use std::ptr::null;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/main.rs:354:25
[INFO] [stdout]     |
[INFO] [stdout] 354 |                     let mut course_component_instance = CourseComponents {
[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/main.rs:399:17
[INFO] [stdout]     |
[INFO] [stdout] 399 |             let mut course_info_instance = CourseInfo {
[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/main.rs:450:13
[INFO] [stdout]     |
[INFO] [stdout] 450 |         let mut curr_dept = String::from(department);
[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/main.rs:63:9
[INFO] [stdout]    |
[INFO] [stdout] 63 |     let mut closest_course_groupID = String::new();        // result will be stored here
[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/main.rs:71:9
[INFO] [stdout]    |
[INFO] [stdout] 71 |     let mut courses_by_department = fetch_courses_by_department(&closest_department).await.unwrap();
[INFO] [stdout]    |         ----^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |         |
[INFO] [stdout]    |         help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `closest_course_groupID`
[INFO] [stdout]   --> src/main.rs:63:9
[INFO] [stdout]    |
[INFO] [stdout] 63 |     let mut closest_course_groupID = String::new();        // result will be stored here
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_closest_course_groupID`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `effective_end_date_placeholder`
[INFO] [stdout]    --> src/main.rs:377:17
[INFO] [stdout]     |
[INFO] [stdout] 377 | ...   let effective_end_date_placeholder = serde_json::from_value(course_data["effectiveEndDate"].clone()).unwrap_or("null".to_owned());
[INFO] [stdout]     |           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_effective_end_date_placeholder`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `course_name_and_code_mapping`
[INFO] [stdout]    --> src/main.rs:117:9
[INFO] [stdout]     |
[INFO] [stdout] 117 |     let course_name_and_code_mapping : BTreeMap<String, (i32, String)> = BTreeMap::new();     // this is where the mapping logic will be ...
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_course_name_and_code_mapping`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `curr_dept`
[INFO] [stdout]    --> src/main.rs:450:13
[INFO] [stdout]     |
[INFO] [stdout] 450 |         let mut curr_dept = String::from(department);
[INFO] [stdout]     |             ^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_curr_dept`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `value`
[INFO] [stdout]    --> src/main.rs:540:14
[INFO] [stdout]     |
[INFO] [stdout] 540 |     for (key,value) in hashmap_input.into_iter() {
[INFO] [stdout]     |              ^^^^^ help: if this is intentional, prefix it with an underscore: `_value`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `value`
[INFO] [stdout]    --> src/main.rs:551:14
[INFO] [stdout]     |
[INFO] [stdout] 551 |     for (key,value) in department_mapping.into_iter() {
[INFO] [stdout]     |              ^^^^^ help: if this is intentional, prefix it with an underscore: `_value`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/main.rs:354:25
[INFO] [stdout]     |
[INFO] [stdout] 354 |                     let mut course_component_instance = CourseComponents {
[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/main.rs:399:17
[INFO] [stdout]     |
[INFO] [stdout] 399 |             let mut course_info_instance = CourseInfo {
[INFO] [stdout]     |                 ----^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |                 |
[INFO] [stdout]     |                 help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable `closest_course_groupID` should have a snake case name
[INFO] [stdout]   --> src/main.rs:63:13
[INFO] [stdout]    |
[INFO] [stdout] 63 |     let mut closest_course_groupID = String::new();        // result will be stored here
[INFO] [stdout]    |             ^^^^^^^^^^^^^^^^^^^^^^ help: convert the identifier to snake case: `closest_course_group_id`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(non_snake_case)]` (part of `#[warn(nonstandard_style)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable `CourseInfoVector` should have a snake case name
[INFO] [stdout]    --> src/main.rs:310:13
[INFO] [stdout]     |
[INFO] [stdout] 310 |     let mut CourseInfoVector : Vec<CourseInfo> = Vec::new();        // store results here
[INFO] [stdout]     |             ^^^^^^^^^^^^^^^^ help: convert the identifier to snake case: `course_info_vector`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/main.rs:450:13
[INFO] [stdout]     |
[INFO] [stdout] 450 |         let mut curr_dept = String::from(department);
[INFO] [stdout]     |             ----^^^^^^^^^
[INFO] [stdout]     |             |
[INFO] [stdout]     |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `closest_course_groupID`
[INFO] [stdout]   --> src/main.rs:63:9
[INFO] [stdout]    |
[INFO] [stdout] 63 |     let mut closest_course_groupID = String::new();        // result will be stored here
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_closest_course_groupID`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `effective_end_date_placeholder`
[INFO] [stdout]    --> src/main.rs:377:17
[INFO] [stdout]     |
[INFO] [stdout] 377 | ...   let effective_end_date_placeholder = serde_json::from_value(course_data["effectiveEndDate"].clone()).unwrap_or("null".to_owned());
[INFO] [stdout]     |           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_effective_end_date_placeholder`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `course_name_and_code_mapping`
[INFO] [stdout]    --> src/main.rs:117:9
[INFO] [stdout]     |
[INFO] [stdout] 117 |     let course_name_and_code_mapping : BTreeMap<String, (i32, String)> = BTreeMap::new();     // this is where the mapping logic will be ...
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_course_name_and_code_mapping`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `curr_dept`
[INFO] [stdout]    --> src/main.rs:450:13
[INFO] [stdout]     |
[INFO] [stdout] 450 |         let mut curr_dept = String::from(department);
[INFO] [stdout]     |             ^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_curr_dept`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `value`
[INFO] [stdout]    --> src/main.rs:540:14
[INFO] [stdout]     |
[INFO] [stdout] 540 |     for (key,value) in hashmap_input.into_iter() {
[INFO] [stdout]     |              ^^^^^ help: if this is intentional, prefix it with an underscore: `_value`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `value`
[INFO] [stdout]    --> src/main.rs:551:14
[INFO] [stdout]     |
[INFO] [stdout] 551 |     for (key,value) in department_mapping.into_iter() {
[INFO] [stdout]     |              ^^^^^ help: if this is intentional, prefix it with an underscore: `_value`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable `closest_course_groupID` should have a snake case name
[INFO] [stdout]   --> src/main.rs:63:13
[INFO] [stdout]    |
[INFO] [stdout] 63 |     let mut closest_course_groupID = String::new();        // result will be stored here
[INFO] [stdout]    |             ^^^^^^^^^^^^^^^^^^^^^^ help: convert the identifier to snake case: `closest_course_group_id`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(non_snake_case)]` (part of `#[warn(nonstandard_style)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable `CourseInfoVector` should have a snake case name
[INFO] [stdout]    --> src/main.rs:310:13
[INFO] [stdout]     |
[INFO] [stdout] 310 |     let mut CourseInfoVector : Vec<CourseInfo> = Vec::new();        // store results here
[INFO] [stdout]     |             ^^^^^^^^^^^^^^^^ help: convert the identifier to snake case: `course_info_vector`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr]     Finished `dev` profile [unoptimized + debuginfo] target(s) in 30.76s
[INFO] running `Command { std: "docker" "inspect" "05b36f548720ba4e56b6db7d95c07c9aa6e0cbd2edb5c07354543f3e12c2f5dd", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "05b36f548720ba4e56b6db7d95c07c9aa6e0cbd2edb5c07354543f3e12c2f5dd", kill_on_drop: false }`
[INFO] [stdout] 05b36f548720ba4e56b6db7d95c07c9aa6e0cbd2edb5c07354543f3e12c2f5dd
