[INFO] fetching crate ccny-course-catalog 0.1.4...
[INFO] testing ccny-course-catalog-0.1.4 against try#bd7d74411512a3dd3b35d2f699c51dd2557c7e7e+cargoflags=-Zbuild-dir-new-layout for pr-149852-1
[INFO] extracting crate ccny-course-catalog 0.1.4 into /workspace/builds/worker-2-tc2/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-2-tc2/source/Cargo.toml
[INFO] validating manifest of crates.io crate ccny-course-catalog 0.1.4 on toolchain bd7d74411512a3dd3b35d2f699c51dd2557c7e7e
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+bd7d74411512a3dd3b35d2f699c51dd2557c7e7e" "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" "+bd7d74411512a3dd3b35d2f699c51dd2557c7e7e" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-2-tc2/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-2-tc2/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:98afbf2d16093dec2546ff8915fddc74e65664aa03fc460b3712b1c2c54a33e4" "/opt/rustwide/cargo-home/bin/cargo" "+bd7d74411512a3dd3b35d2f699c51dd2557c7e7e" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }`
[INFO] [stdout] 9c7483e00b40e84c8b4fca62ccf2a1fc565d31c6dcfffc07bae2a778e7e164d4
[INFO] running `Command { std: "docker" "start" "-a" "9c7483e00b40e84c8b4fca62ccf2a1fc565d31c6dcfffc07bae2a778e7e164d4", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "9c7483e00b40e84c8b4fca62ccf2a1fc565d31c6dcfffc07bae2a778e7e164d4", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "9c7483e00b40e84c8b4fca62ccf2a1fc565d31c6dcfffc07bae2a778e7e164d4", kill_on_drop: false }`
[INFO] [stdout] 9c7483e00b40e84c8b4fca62ccf2a1fc565d31c6dcfffc07bae2a778e7e164d4
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-2-tc2/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-2-tc2/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "RUSTDOCFLAGS=--cap-lints=forbid" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:98afbf2d16093dec2546ff8915fddc74e65664aa03fc460b3712b1c2c54a33e4" "/opt/rustwide/cargo-home/bin/cargo" "+bd7d74411512a3dd3b35d2f699c51dd2557c7e7e" "build" "--frozen" "--message-format=json" "-Zbuild-dir-new-layout", kill_on_drop: false }`
[INFO] [stdout] 72b91ba989fafc40f256999fd4eef48aaf7d304ae74c9d4bc3e7ee4ddf7e80e8
[INFO] running `Command { std: "docker" "start" "-a" "72b91ba989fafc40f256999fd4eef48aaf7d304ae74c9d4bc3e7ee4ddf7e80e8", kill_on_drop: false }`
[INFO] [stderr]    Compiling unicode-ident v1.0.14
[INFO] [stderr]    Compiling bytes v1.9.0
[INFO] [stderr]    Compiling libc v0.2.169
[INFO] [stderr]    Compiling cc v1.2.9
[INFO] [stderr]    Compiling once_cell v1.20.2
[INFO] [stderr]    Compiling httparse v1.9.5
[INFO] [stderr]    Compiling openssl v0.10.68
[INFO] [stderr]    Compiling bitflags v2.8.0
[INFO] [stderr]    Compiling native-tls v0.2.12
[INFO] [stderr]    Compiling indexmap v2.7.0
[INFO] [stderr]    Compiling serde v1.0.217
[INFO] [stderr]    Compiling log v0.4.25
[INFO] [stderr]    Compiling miniz_oxide v0.8.3
[INFO] [stderr]    Compiling serde_json v1.0.135
[INFO] [stderr]    Compiling rustls-pki-types v1.10.1
[INFO] [stderr]    Compiling rayon v0.7.1
[INFO] [stderr]    Compiling proc-macro2 v1.0.93
[INFO] [stderr]    Compiling tracing-core v0.1.33
[INFO] [stderr]    Compiling ipnet v2.10.1
[INFO] [stderr]    Compiling lru v0.13.0
[INFO] [stderr]    Compiling filepath v0.2.0
[INFO] [stderr]    Compiling rustls-pemfile v2.2.0
[INFO] [stderr]    Compiling tracing v0.1.41
[INFO] [stderr]    Compiling http v1.2.0
[INFO] [stderr]    Compiling quote v1.0.38
[INFO] [stderr]    Compiling closestmatch v0.1.2
[INFO] [stderr]    Compiling flate2 v1.0.35
[INFO] [stderr]    Compiling syn v2.0.96
[INFO] [stderr]    Compiling parking_lot_core v0.9.10
[INFO] [stderr]    Compiling mio v1.0.3
[INFO] [stderr]    Compiling socket2 v0.5.8
[INFO] [stderr]    Compiling signal-hook-registry v1.4.2
[INFO] [stderr]    Compiling parking_lot v0.12.3
[INFO] [stderr]    Compiling openssl-sys v0.9.104
[INFO] [stderr]    Compiling http-body v1.0.1
[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]    Compiling tokio v1.43.0
[INFO] [stderr]    Compiling futures-util v0.3.31
[INFO] [stderr]    Compiling zerofrom v0.1.5
[INFO] [stderr]    Compiling yoke v0.7.5
[INFO] [stderr]    Compiling zerovec v0.10.4
[INFO] [stderr]    Compiling tinystr v0.7.6
[INFO] [stderr]    Compiling icu_collections v1.5.0
[INFO] [stderr]    Compiling icu_locid v1.5.0
[INFO] [stderr]    Compiling icu_provider v1.5.0
[INFO] [stderr]    Compiling icu_locid_transform v1.5.0
[INFO] [stderr]    Compiling http-body-util v0.1.2
[INFO] [stderr]    Compiling futures-executor v0.3.31
[INFO] [stderr]    Compiling futures v0.3.31
[INFO] [stderr]    Compiling icu_properties v1.5.1
[INFO] [stderr]    Compiling serde_urlencoded v0.7.1
[INFO] [stderr]    Compiling tokio-util v0.7.13
[INFO] [stderr]    Compiling tokio-native-tls v0.3.1
[INFO] [stderr]    Compiling async-compression v0.4.18
[INFO] [stderr]    Compiling tower v0.5.2
[INFO] [stderr]    Compiling h2 v0.4.7
[INFO] [stderr]    Compiling icu_normalizer v1.5.0
[INFO] [stderr]    Compiling idna_adapter v1.2.0
[INFO] [stderr]    Compiling idna v1.0.3
[INFO] [stderr]    Compiling url v2.5.4
[INFO] [stderr]    Compiling hyper v1.5.2
[INFO] [stderr]    Compiling hyper-util v0.1.10
[INFO] [stderr]    Compiling hyper-tls v0.6.0
[INFO] [stderr]    Compiling reqwest v0.12.12
[INFO] [stderr]    Compiling 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: 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: 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...
[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: value assigned to `result_string` is never read
[INFO] [stdout]    --> src/api/department.rs:122:38
[INFO] [stdout]     |
[INFO] [stdout] 122 |     let mut result_string : String = String::new();
[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: `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: value assigned to `result_string` is never read
[INFO] [stdout]   --> src/api/course_finder.rs:29:38
[INFO] [stdout]    |
[INFO] [stdout] 29 |     let mut result_string : String = String::new();
[INFO] [stdout]    |                                      ^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = help: maybe it is overwritten before being read?
[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 wi...
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_course_name_and_code_mapping`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: value assigned to `complete_course_group_id` is never read
[INFO] [stdout]    --> src/api/course_finder.rs:112:49
[INFO] [stdout]     |
[INFO] [stdout] 112 |     let mut complete_course_group_id : String = String::new();
[INFO] [stdout]     |                                                 ^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = help: maybe it is overwritten before being read?
[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: 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: 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 ...
[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: 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: 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: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: 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: 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".t...
[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 wi...
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_course_name_and_code_mapping`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: value assigned to `complete_course_group_id` is never read
[INFO] [stdout]    --> src/main.rs:119:49
[INFO] [stdout]     |
[INFO] [stdout] 119 |     let mut complete_course_group_id : String = String::new();
[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: `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: value assigned to `result_string` is never read
[INFO] [stdout]    --> src/main.rs:572:38
[INFO] [stdout]     |
[INFO] [stdout] 572 |     let mut result_string : String = String::new();
[INFO] [stdout]     |                                      ^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = help: maybe it is overwritten before being read?
[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 35.04s
[INFO] running `Command { std: "docker" "inspect" "72b91ba989fafc40f256999fd4eef48aaf7d304ae74c9d4bc3e7ee4ddf7e80e8", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "72b91ba989fafc40f256999fd4eef48aaf7d304ae74c9d4bc3e7ee4ddf7e80e8", kill_on_drop: false }`
[INFO] [stdout] 72b91ba989fafc40f256999fd4eef48aaf7d304ae74c9d4bc3e7ee4ddf7e80e8
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-2-tc2/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-2-tc2/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "RUSTDOCFLAGS=--cap-lints=forbid" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:98afbf2d16093dec2546ff8915fddc74e65664aa03fc460b3712b1c2c54a33e4" "/opt/rustwide/cargo-home/bin/cargo" "+bd7d74411512a3dd3b35d2f699c51dd2557c7e7e" "test" "--frozen" "--no-run" "--message-format=json" "-Zbuild-dir-new-layout", kill_on_drop: false }`
[INFO] [stdout] 4c262404d6d2c1ca45e009a6ff3e02f1cc9278d89f9069b19d239cf30b0f45cb
[INFO] running `Command { std: "docker" "start" "-a" "4c262404d6d2c1ca45e009a6ff3e02f1cc9278d89f9069b19d239cf30b0f45cb", kill_on_drop: false }`
[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/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...
[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: value assigned to `result_string` is never read
[INFO] [stdout]    --> src/api/department.rs:122:38
[INFO] [stdout]     |
[INFO] [stdout] 122 |     let mut result_string : String = String::new();
[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: `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: value assigned to `result_string` is never read
[INFO] [stdout]   --> src/api/course_finder.rs:29:38
[INFO] [stdout]    |
[INFO] [stdout] 29 |     let mut result_string : String = String::new();
[INFO] [stdout]    |                                      ^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = help: maybe it is overwritten before being read?
[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 wi...
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_course_name_and_code_mapping`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: value assigned to `complete_course_group_id` is never read
[INFO] [stdout]    --> src/api/course_finder.rs:112:49
[INFO] [stdout]     |
[INFO] [stdout] 112 |     let mut complete_course_group_id : String = String::new();
[INFO] [stdout]     |                                                 ^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = help: maybe it is overwritten before being read?
[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: 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: 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 ...
[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] [stderr]    Compiling ccny-course-catalog v0.1.4 (/opt/rustwide/workdir)
[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: 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: 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: `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: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: 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/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: 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".t...
[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 wi...
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_course_name_and_code_mapping`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: value assigned to `complete_course_group_id` is never read
[INFO] [stdout]    --> src/main.rs:119:49
[INFO] [stdout]     |
[INFO] [stdout] 119 |     let mut complete_course_group_id : String = String::new();
[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: `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...
[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: `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: value assigned to `result_string` is never read
[INFO] [stdout]    --> src/api/department.rs:122:38
[INFO] [stdout]     |
[INFO] [stdout] 122 |     let mut result_string : String = String::new();
[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: `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/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: `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: 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: value assigned to `result_string` is never read
[INFO] [stdout]    --> src/main.rs:572:38
[INFO] [stdout]     |
[INFO] [stdout] 572 |     let mut result_string : String = String::new();
[INFO] [stdout]     |                                      ^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = help: maybe it is overwritten before being read?
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: value assigned to `result_string` is never read
[INFO] [stdout]   --> src/api/course_finder.rs:29:38
[INFO] [stdout]    |
[INFO] [stdout] 29 |     let mut result_string : String = String::new();
[INFO] [stdout]    |                                      ^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = help: maybe it is overwritten before being read?
[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: 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: 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 wi...
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_course_name_and_code_mapping`
[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: value assigned to `complete_course_group_id` is never read
[INFO] [stdout]    --> src/api/course_finder.rs:112:49
[INFO] [stdout]     |
[INFO] [stdout] 112 |     let mut complete_course_group_id : String = String::new();
[INFO] [stdout]     |                                                 ^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = help: maybe it is overwritten before being read?
[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: 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] [stderr]     Finished `test` profile [unoptimized + debuginfo] target(s) in 2.31s
[INFO] running `Command { std: "docker" "inspect" "4c262404d6d2c1ca45e009a6ff3e02f1cc9278d89f9069b19d239cf30b0f45cb", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "4c262404d6d2c1ca45e009a6ff3e02f1cc9278d89f9069b19d239cf30b0f45cb", kill_on_drop: false }`
[INFO] [stdout] 4c262404d6d2c1ca45e009a6ff3e02f1cc9278d89f9069b19d239cf30b0f45cb
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-2-tc2/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-2-tc2/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "RUSTDOCFLAGS=--cap-lints=forbid" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:98afbf2d16093dec2546ff8915fddc74e65664aa03fc460b3712b1c2c54a33e4" "/opt/rustwide/cargo-home/bin/cargo" "+bd7d74411512a3dd3b35d2f699c51dd2557c7e7e" "test" "--frozen" "-Zbuild-dir-new-layout", kill_on_drop: false }`
[INFO] [stdout] 3c2f40a1ea71c4ef65431aa8cf23a1122c7230b7b97e358357f6831a8afa921b
[INFO] running `Command { std: "docker" "start" "-a" "3c2f40a1ea71c4ef65431aa8cf23a1122c7230b7b97e358357f6831a8afa921b", kill_on_drop: false }`
[INFO] [stderr] warning: unused import: `std::mem`
[INFO] [stderr]   --> src/data_structures/custom_lru_cache.rs:10:5
[INFO] [stderr]    |
[INFO] [stderr] 10 | use std::mem;
[INFO] [stderr]    |     ^^^^^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stderr] 
[INFO] [stderr] warning: unused imports: `ACCEPT`, `CONTENT_TYPE`, `HeaderMap`, `HeaderValue`, `ORIGIN`, and `REFERER`
[INFO] [stderr]  --> src/api/course_finder.rs:6:23
[INFO] [stderr]   |
[INFO] [stderr] 6 | use reqwest::header::{HeaderMap, HeaderValue, ACCEPT, CONTENT_TYPE, ORIGIN, REFERER};
[INFO] [stderr]   |                       ^^^^^^^^^  ^^^^^^^^^^^  ^^^^^^  ^^^^^^^^^^^^  ^^^^^^  ^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `serde_json::json`
[INFO] [stderr]  --> src/api/course_finder.rs:7:5
[INFO] [stderr]   |
[INFO] [stderr] 7 | use serde_json::json;
[INFO] [stderr]   |     ^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused imports: `fs` and `io::Write`
[INFO] [stderr]  --> src/api/course_finder.rs:8:11
[INFO] [stderr]   |
[INFO] [stderr] 8 | use std::{fs, io::Write};
[INFO] [stderr]   |           ^^  ^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `std::path::PathBuf`
[INFO] [stderr]  --> src/api/course_finder.rs:9:5
[INFO] [stderr]   |
[INFO] [stderr] 9 | use std::path::PathBuf;
[INFO] [stderr]   |     ^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `std::borrow::Borrow`
[INFO] [stderr]   --> src/api/course_finder.rs:11:5
[INFO] [stderr]    |
[INFO] [stderr] 11 | use std::borrow::Borrow;
[INFO] [stderr]    |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused imports: `Deserialize` and `Serialize`
[INFO] [stderr]   --> src/api/course_finder.rs:12:13
[INFO] [stderr]    |
[INFO] [stderr] 12 | use serde::{Deserialize, Serialize};
[INFO] [stderr]    |             ^^^^^^^^^^^  ^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `std::ptr::null`
[INFO] [stderr]   --> src/api/course_finder.rs:13:5
[INFO] [stderr]    |
[INFO] [stderr] 13 | use std::ptr::null;
[INFO] [stderr]    |     ^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `crate::api::course_finder`
[INFO] [stderr]  --> src/api/utils.rs:3:5
[INFO] [stderr]   |
[INFO] [stderr] 3 | use crate::api::course_finder;
[INFO] [stderr]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `io::Write`
[INFO] [stderr]  --> src/api/utils.rs:7:15
[INFO] [stderr]   |
[INFO] [stderr] 7 | use std::{fs, io::Write};
[INFO] [stderr]   |               ^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused imports: `CourseComponents` and `CourseInfo`
[INFO] [stderr]   --> src/lib.rs:18:22
[INFO] [stderr]    |
[INFO] [stderr] 18 | use models::course::{CourseComponents, CourseInfo};
[INFO] [stderr]    |                      ^^^^^^^^^^^^^^^^  ^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: variable does not need to be mutable
[INFO] [stderr]   --> src/api/department.rs:53:25
[INFO] [stderr]    |
[INFO] [stderr] 53 |                     let mut course_component_instance = CourseComponents {
[INFO] [stderr]    |                         ----^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr]    |                         |
[INFO] [stderr]    |                         help: remove this `mut`
[INFO] [stderr]    |
[INFO] [stderr]    = note: `#[warn(unused_mut)]` (part of `#[warn(unused)]`) on by default
[INFO] [stderr] 
[INFO] [stderr] warning: variable does not need to be mutable
[INFO] [stderr]   --> src/api/department.rs:87:17
[INFO] [stderr]    |
[INFO] [stderr] 87 |             let mut course_info_instance = CourseInfo {
[INFO] [stderr]    |                 ----^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr]    |                 |
[INFO] [stderr]    |                 help: remove this `mut`
[INFO] [stderr] 
[INFO] [stderr] warning: variable does not need to be mutable
[INFO] [stderr]   --> src/api/course_finder.rs:66:9
[INFO] [stderr]    |
[INFO] [stderr] 66 |     let mut closest_course_groupID = String::new();        // result will be stored here
[INFO] [stderr]    |         ----^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr]    |         |
[INFO] [stderr]    |         help: remove this `mut`
[INFO] [stderr] 
[INFO] [stderr] warning: variable does not need to be mutable
[INFO] [stderr]   --> src/api/course_finder.rs:73:9
[INFO] [stderr]    |
[INFO] [stderr] 73 |     let mut courses_by_department = fetch_courses_by_department(&closest_department).await.unwrap();
[INFO] [stderr]    |         ----^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr]    |         |
[INFO] [stderr]    |         help: remove this `mut`
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `effective_end_date_placeholder`
[INFO] [stderr]   --> src/api/department.rs:72:17
[INFO] [stderr]    |
[INFO] [stderr] 72 |             let effective_end_date_placeholder = serde_json::from_value(course_data["effectiveEndDate"].clone()).unwrap_or("null".to...
[INFO] [stderr]    |                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_effective_end_date_placeholder`
[INFO] [stderr]    |
[INFO] [stderr]    = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stderr] 
[INFO] [stderr] warning: value assigned to `result_string` is never read
[INFO] [stderr]    --> src/api/department.rs:122:38
[INFO] [stderr]     |
[INFO] [stderr] 122 |     let mut result_string : String = String::new();
[INFO] [stderr]     |                                      ^^^^^^^^^^^^^
[INFO] [stderr]     |
[INFO] [stderr]     = help: maybe it is overwritten before being read?
[INFO] [stderr]     = note: `#[warn(unused_assignments)]` (part of `#[warn(unused)]`) on by default
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `value`
[INFO] [stderr]    --> src/api/department.rs:313:14
[INFO] [stderr]     |
[INFO] [stderr] 313 |     for (key,value) in department_mapping.into_iter() {
[INFO] [stderr]     |              ^^^^^ help: if this is intentional, prefix it with an underscore: `_value`
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `json_string`
[INFO] [stderr]   --> src/api/course_finder.rs:21:9
[INFO] [stderr]    |
[INFO] [stderr] 21 |     let json_string : serde_json::Value = serde_json::from_str(&body)?;
[INFO] [stderr]    |         ^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_json_string`
[INFO] [stderr] 
[INFO] [stderr] warning: value assigned to `result_string` is never read
[INFO] [stderr]   --> src/api/course_finder.rs:29:38
[INFO] [stderr]    |
[INFO] [stderr] 29 |     let mut result_string : String = String::new();
[INFO] [stderr]    |                                      ^^^^^^^^^^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = help: maybe it is overwritten before being read?
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `closest_course_groupID`
[INFO] [stderr]   --> src/api/course_finder.rs:66:9
[INFO] [stderr]    |
[INFO] [stderr] 66 |     let mut closest_course_groupID = String::new();        // result will be stored here
[INFO] [stderr]    |         ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_closest_course_groupID`
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `course_name_and_code_mapping`
[INFO] [stderr]    --> src/api/course_finder.rs:110:9
[INFO] [stderr]     |
[INFO] [stderr] 110 |     let course_name_and_code_mapping : BTreeMap<String, (i32, String)> = BTreeMap::new();     // this is where the mapping logic wi...
[INFO] [stderr]     |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_course_name_and_code_mapping`
[INFO] [stderr] 
[INFO] [stderr] warning: value assigned to `complete_course_group_id` is never read
[INFO] [stderr]    --> src/api/course_finder.rs:112:49
[INFO] [stderr]     |
[INFO] [stderr] 112 |     let mut complete_course_group_id : String = String::new();
[INFO] [stderr]     |                                                 ^^^^^^^^^^^^^
[INFO] [stderr]     |
[INFO] [stderr]     = help: maybe it is overwritten before being read?
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `department_courses`
[INFO] [stderr]   --> src/api/utils.rs:14:9
[INFO] [stderr]    |
[INFO] [stderr] 14 |     let department_courses : Vec<CourseInfo> = fetch_courses_by_department(department_name).await?;
[INFO] [stderr]    |         ^^^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_department_courses`
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `value`
[INFO] [stderr]   --> src/api/utils.rs:35:14
[INFO] [stderr]    |
[INFO] [stderr] 35 |     for (key,value) in hashmap_input.into_iter() {
[INFO] [stderr]    |              ^^^^^ help: if this is intentional, prefix it with an underscore: `_value`
[INFO] [stderr] 
[INFO] [stderr] warning: constant `DEFAULT_MAX_SIZE` is never used
[INFO] [stderr]  --> src/data_structures/custom_hashmap.rs:9:7
[INFO] [stderr]   |
[INFO] [stderr] 9 | const DEFAULT_MAX_SIZE : u64 = 256;
[INFO] [stderr]   |       ^^^^^^^^^^^^^^^^
[INFO] [stderr]   |
[INFO] [stderr]   = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stderr] 
[INFO] [stderr] warning: struct `CustomHashMap` is never constructed
[INFO] [stderr]   --> src/data_structures/custom_hashmap.rs:13:12
[INFO] [stderr]    |
[INFO] [stderr] 13 | pub struct CustomHashMap<T,V> {
[INFO] [stderr]    |            ^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: struct `KeyValue` is never constructed
[INFO] [stderr]   --> src/data_structures/custom_hashmap.rs:24:12
[INFO] [stderr]    |
[INFO] [stderr] 24 | pub struct KeyValue<T,V> {
[INFO] [stderr]    |            ^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: associated function `new` is never used
[INFO] [stderr]   --> src/data_structures/custom_hashmap.rs:36:12
[INFO] [stderr]    |
[INFO] [stderr] 33 | impl<T,V> KeyValue<T,V> {
[INFO] [stderr]    | ----------------------- associated function in this implementation
[INFO] [stderr] ...
[INFO] [stderr] 36 |     pub fn new(key : T, value : V) -> KeyValue<T,V> {
[INFO] [stderr]    |            ^^^
[INFO] [stderr] 
[INFO] [stderr] warning: multiple associated items are never used
[INFO] [stderr]    --> src/data_structures/custom_hashmap.rs:58:11
[INFO] [stderr]     |
[INFO] [stderr]  57 | impl<T : Clone + Hash + PartialEq, V : Copy> CustomHashMap<T,V> {
[INFO] [stderr]     | --------------------------------------------------------------- associated items in this implementation
[INFO] [stderr]  58 |     const INIT : Option<KeyValue<T,V>> = None;      // we use const to avoid running into borrow/ownership related errors that may ...
[INFO] [stderr]     |           ^^^^
[INFO] [stderr]  59 |
[INFO] [stderr]  60 |     pub fn new() -> CustomHashMap<T,V> {
[INFO] [stderr]     |            ^^^
[INFO] [stderr] ...
[INFO] [stderr]  68 |     pub fn insert(&mut self, key : T, val : V) -> Option<V> {
[INFO] [stderr]     |            ^^^^^^
[INFO] [stderr] ...
[INFO] [stderr]  97 |     fn insert_new_value(&mut self, key : T, val : V, position : usize) {
[INFO] [stderr]     |        ^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 107 |     fn update_or_link_new_val(&mut self, key : T, val : V, position : usize) -> Option<V> {
[INFO] [stderr]     |        ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 172 |     pub fn get(&self, key : T) -> Option<V> {
[INFO] [stderr]     |            ^^^
[INFO] [stderr] ...
[INFO] [stderr] 186 |     fn check_list_for_key(&self, key : T, position : usize) -> Option<V> {
[INFO] [stderr]     |        ^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 216 |     pub fn remove(&mut self, key : T) -> Option<V> {
[INFO] [stderr]     |            ^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 230 |     fn check_item_in_list_and_remove(&mut self, key : T, position : usize) -> Option<V> {
[INFO] [stderr]     |        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 303 |     pub fn clear(&mut self) {
[INFO] [stderr]     |            ^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 308 |     pub fn len(&self) -> usize {
[INFO] [stderr]     |            ^^^
[INFO] [stderr] ...
[INFO] [stderr] 312 |     pub fn is_empty(&self) -> bool {
[INFO] [stderr]     |            ^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `hash_key` is never used
[INFO] [stderr]    --> src/data_structures/custom_hashmap.rs:322:4
[INFO] [stderr]     |
[INFO] [stderr] 322 | fn hash_key<T : Hash>(key : T) -> u64 {
[INFO] [stderr]     |    ^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: struct `Node` is never constructed
[INFO] [stderr]   --> src/data_structures/custom_lru_cache.rs:17:12
[INFO] [stderr]    |
[INFO] [stderr] 17 | pub struct Node<K,V> {
[INFO] [stderr]    |            ^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: struct `CustomLruCache` is never constructed
[INFO] [stderr]   --> src/data_structures/custom_lru_cache.rs:26:12
[INFO] [stderr]    |
[INFO] [stderr] 26 | pub struct CustomLruCache<K, V> {
[INFO] [stderr]    |            ^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: multiple associated items are never used
[INFO] [stderr]    --> src/data_structures/custom_lru_cache.rs:52:12
[INFO] [stderr]     |
[INFO] [stderr]  49 | impl<K : Hash + Eq + Clone, V : Copy> CustomLruCache<K,V> {
[INFO] [stderr]     | --------------------------------------------------------- associated items in this implementation
[INFO] [stderr] ...
[INFO] [stderr]  52 |     pub fn new(capacity : usize) -> Self {
[INFO] [stderr]     |            ^^^
[INFO] [stderr] ...
[INFO] [stderr]  69 |     pub fn get(&mut self, key : &K) -> Option<&V> {
[INFO] [stderr]     |            ^^^
[INFO] [stderr] ...
[INFO] [stderr]  85 |     pub fn get_mut(&mut self, key : &K) -> Option<&mut V> {
[INFO] [stderr]     |            ^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr]  93 |     pub fn insert(&mut self, key : K, value : V) {
[INFO] [stderr]     |            ^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 145 |     pub fn remove(&mut self, key : &K) -> Option<V> {
[INFO] [stderr]     |            ^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 154 |     pub fn clear(&mut self) {
[INFO] [stderr]     |            ^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 163 |     pub fn len(&self) -> usize {
[INFO] [stderr]     |            ^^^
[INFO] [stderr] ...
[INFO] [stderr] 168 |     pub fn is_empty(&self) -> bool {
[INFO] [stderr]     |            ^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 176 |     fn move_to_front(&mut self, node_idx : usize) {
[INFO] [stderr]     |        ^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 213 |     fn remove_node(&mut self, node_idx : usize) -> Option<V> {
[INFO] [stderr]     |        ^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 241 |     fn evict_tail(&mut self) {
[INFO] [stderr]     |        ^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `retrieve_historical_terms` is never used
[INFO] [stderr]   --> src/api/course_finder.rs:16:14
[INFO] [stderr]    |
[INFO] [stderr] 16 | pub async fn retrieve_historical_terms() -> Result<()> {
[INFO] [stderr]    |              ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `get_course_list_by_department` is never used
[INFO] [stderr]   --> src/api/utils.rs:11:14
[INFO] [stderr]    |
[INFO] [stderr] 11 | pub async fn get_course_list_by_department(department_name : &str) -> Result<Vec<String>, anyhow::Error> {
[INFO] [stderr]    |              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `print_type_of` is never used
[INFO] [stderr]   --> src/api/utils.rs:20:8
[INFO] [stderr]    |
[INFO] [stderr] 20 | pub fn print_type_of<T>(_ : &T) {
[INFO] [stderr]    |        ^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `save_to_file` is never used
[INFO] [stderr]   --> src/api/utils.rs:25:8
[INFO] [stderr]    |
[INFO] [stderr] 25 | pub fn save_to_file(data: &serde_json::Value, filename: &str) -> Result<PathBuf> {
[INFO] [stderr]    |        ^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `print_hashmap_keys` is never used
[INFO] [stderr]   --> src/api/utils.rs:34:8
[INFO] [stderr]    |
[INFO] [stderr] 34 | pub fn print_hashmap_keys(hashmap_input : HashMap<String, String>) {
[INFO] [stderr]    |        ^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: variable `CourseInfoVector` should have a snake case name
[INFO] [stderr]   --> src/api/department.rs:25:13
[INFO] [stderr]    |
[INFO] [stderr] 25 |     let mut CourseInfoVector : Vec<CourseInfo> = Vec::new();        // store results here
[INFO] [stderr]    |             ^^^^^^^^^^^^^^^^ help: convert the identifier to snake case: `course_info_vector`
[INFO] [stderr]    |
[INFO] [stderr]    = note: `#[warn(non_snake_case)]` (part of `#[warn(nonstandard_style)]`) on by default
[INFO] [stderr] 
[INFO] [stderr] warning: variable `closest_course_groupID` should have a snake case name
[INFO] [stderr]   --> src/api/course_finder.rs:66:13
[INFO] [stderr]    |
[INFO] [stderr] 66 |     let mut closest_course_groupID = String::new();        // result will be stored here
[INFO] [stderr]    |             ^^^^^^^^^^^^^^^^^^^^^^ help: convert the identifier to snake case: `closest_course_group_id`
[INFO] [stderr] 
[INFO] [stderr] warning: methods `get_mut` and `remove` are never used
[INFO] [stderr]    --> src/data_structures/custom_lru_cache.rs:85:12
[INFO] [stderr]     |
[INFO] [stderr]  49 | impl<K : Hash + Eq + Clone, V : Copy> CustomLruCache<K,V> {
[INFO] [stderr]     | --------------------------------------------------------- methods in this implementation
[INFO] [stderr] ...
[INFO] [stderr]  85 |     pub fn get_mut(&mut self, key : &K) -> Option<&mut V> {
[INFO] [stderr]     |            ^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 145 |     pub fn remove(&mut self, key : &K) -> Option<V> {
[INFO] [stderr]     |            ^^^^^^
[INFO] [stderr]     |
[INFO] [stderr]     = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stderr] 
[INFO] [stderr] warning: `ccny-course-catalog` (lib) generated 41 warnings (run `cargo fix --lib -p ccny-course-catalog` to apply 22 suggestions)
[INFO] [stderr] warning: `ccny-course-catalog` (lib test) generated 33 warnings (32 duplicates)
[INFO] [stderr] warning: unused import: `io::Write`
[INFO] [stderr]  --> src/main.rs:6:15
[INFO] [stderr]   |
[INFO] [stderr] 6 | use std::{fs, io::Write};
[INFO] [stderr]   |               ^^^^^^^^^
[INFO] [stderr]   |
[INFO] [stderr]   = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `std::ptr::null`
[INFO] [stderr]   --> src/main.rs:11:5
[INFO] [stderr]    |
[INFO] [stderr] 11 | use std::ptr::null;
[INFO] [stderr]    |     ^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: variable does not need to be mutable
[INFO] [stderr]   --> src/main.rs:63:9
[INFO] [stderr]    |
[INFO] [stderr] 63 |     let mut closest_course_groupID = String::new();        // result will be stored here
[INFO] [stderr]    |         ----^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr]    |         |
[INFO] [stderr]    |         help: remove this `mut`
[INFO] [stderr]    |
[INFO] [stderr]    = note: `#[warn(unused_mut)]` (part of `#[warn(unused)]`) on by default
[INFO] [stderr] 
[INFO] [stderr] warning: variable does not need to be mutable
[INFO] [stderr]   --> src/main.rs:71:9
[INFO] [stderr]    |
[INFO] [stderr] 71 |     let mut courses_by_department = fetch_courses_by_department(&closest_department).await.unwrap();
[INFO] [stderr]    |         ----^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr]    |         |
[INFO] [stderr]    |         help: remove this `mut`
[INFO] [stderr] 
[INFO] [stderr] warning: variable does not need to be mutable
[INFO] [stderr]    --> src/main.rs:354:25
[INFO] [stderr]     |
[INFO] [stderr] 354 |                     let mut course_component_instance = CourseComponents {
[INFO] [stderr]     |                         ----^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr]     |                         |
[INFO] [stderr]     |                         help: remove this `mut`
[INFO] [stderr] 
[INFO] [stderr] warning: variable does not need to be mutable
[INFO] [stderr]    --> src/main.rs:399:17
[INFO] [stderr]     |
[INFO] [stderr] 399 |             let mut course_info_instance = CourseInfo {
[INFO] [stderr]     |                 ----^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr]     |                 |
[INFO] [stderr]     |                 help: remove this `mut`
[INFO] [stderr] 
[INFO] [stderr] warning: variable does not need to be mutable
[INFO] [stderr]    --> src/main.rs:450:13
[INFO] [stderr]     |
[INFO] [stderr] 450 |         let mut curr_dept = String::from(department);
[INFO] [stderr]     |             ----^^^^^^^^^
[INFO] [stderr]     |             |
[INFO] [stderr]     |             help: remove this `mut`
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `closest_course_groupID`
[INFO] [stderr]   --> src/main.rs:63:9
[INFO] [stderr]    |
[INFO] [stderr] 63 |     let mut closest_course_groupID = String::new();        // result will be stored here
[INFO] [stderr]    |         ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_closest_course_groupID`
[INFO] [stderr]    |
[INFO] [stderr]    = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `effective_end_date_placeholder`
[INFO] [stderr]    --> src/main.rs:377:17
[INFO] [stderr]     |
[INFO] [stderr] 377 |             let effective_end_date_placeholder = serde_json::from_value(course_data["effectiveEndDate"].clone()).unwrap_or("null".t...
[INFO] [stderr]     |                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_effective_end_date_placeholder`
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `course_name_and_code_mapping`
[INFO] [stderr]    --> src/main.rs:117:9
[INFO] [stderr]     |
[INFO] [stderr] 117 |     let course_name_and_code_mapping : BTreeMap<String, (i32, String)> = BTreeMap::new();     // this is where the mapping logic wi...
[INFO] [stderr]     |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_course_name_and_code_mapping`
[INFO] [stderr] 
[INFO] [stderr] warning: value assigned to `complete_course_group_id` is never read
[INFO] [stderr]    --> src/main.rs:119:49
[INFO] [stderr]     |
[INFO] [stderr] 119 |     let mut complete_course_group_id : String = String::new();
[INFO] [stderr]     |                                                 ^^^^^^^^^^^^^
[INFO] [stderr]     |
[INFO] [stderr]     = help: maybe it is overwritten before being read?
[INFO] [stderr]     = note: `#[warn(unused_assignments)]` (part of `#[warn(unused)]`) on by default
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `curr_dept`
[INFO] [stderr]    --> src/main.rs:450:13
[INFO] [stderr]     |
[INFO] [stderr] 450 |         let mut curr_dept = String::from(department);
[INFO] [stderr]     |             ^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_curr_dept`
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `value`
[INFO] [stderr]    --> src/main.rs:540:14
[INFO] [stderr]     |
[INFO] [stderr] 540 |     for (key,value) in hashmap_input.into_iter() {
[INFO] [stderr]     |              ^^^^^ help: if this is intentional, prefix it with an underscore: `_value`
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `value`
[INFO] [stderr]    --> src/main.rs:551:14
[INFO] [stderr]     |
[INFO] [stderr] 551 |     for (key,value) in department_mapping.into_iter() {
[INFO] [stderr]     |              ^^^^^ help: if this is intentional, prefix it with an underscore: `_value`
[INFO] [stderr] 
[INFO] [stderr] warning: value assigned to `result_string` is never read
[INFO] [stderr]    --> src/main.rs:572:38
[INFO] [stderr]     |
[INFO] [stderr] 572 |     let mut result_string : String = String::new();
[INFO] [stderr]     |                                      ^^^^^^^^^^^^^
[INFO] [stderr]     |
[INFO] [stderr]     = help: maybe it is overwritten before being read?
[INFO] [stderr] 
[INFO] [stderr] warning: variable `closest_course_groupID` should have a snake case name
[INFO] [stderr]   --> src/main.rs:63:13
[INFO] [stderr]    |
[INFO] [stderr] 63 |     let mut closest_course_groupID = String::new();        // result will be stored here
[INFO] [stderr]    |             ^^^^^^^^^^^^^^^^^^^^^^ help: convert the identifier to snake case: `closest_course_group_id`
[INFO] [stderr]    |
[INFO] [stderr]    = note: `#[warn(non_snake_case)]` (part of `#[warn(nonstandard_style)]`) on by default
[INFO] [stderr] 
[INFO] [stderr] warning: variable `CourseInfoVector` should have a snake case name
[INFO] [stderr]    --> src/main.rs:310:13
[INFO] [stderr]     |
[INFO] [stderr] 310 |     let mut CourseInfoVector : Vec<CourseInfo> = Vec::new();        // store results here
[INFO] [stderr]     |             ^^^^^^^^^^^^^^^^ help: convert the identifier to snake case: `course_info_vector`
[INFO] [stderr] 
[INFO] [stderr] warning: variable does not need to be mutable
[INFO] [stderr]   --> src/bin/experimental.rs:27:9
[INFO] [stderr]    |
[INFO] [stderr] 27 |     let mut course_instance = CCNYCourseCatalog::new(String::from("computer science"), Some(String::from("algorithms")));
[INFO] [stderr]    |         ----^^^^^^^^^^^^^^^
[INFO] [stderr]    |         |
[INFO] [stderr]    |         help: remove this `mut`
[INFO] [stderr]    |
[INFO] [stderr]    = note: `#[warn(unused_mut)]` (part of `#[warn(unused)]`) on by default
[INFO] [stderr] 
[INFO] [stderr] warning: variable does not need to be mutable
[INFO] [stderr]   --> src/bin/experimental.rs:31:9
[INFO] [stderr]    |
[INFO] [stderr] 31 |     let mut list_of_courses = course_instance.get_courses_list().await;
[INFO] [stderr]    |         ----^^^^^^^^^^^^^^^
[INFO] [stderr]    |         |
[INFO] [stderr]    |         help: remove this `mut`
[INFO] [stderr] 
[INFO] [stderr] warning: variable does not need to be mutable
[INFO] [stderr]   --> src/bin/experimental.rs:32:9
[INFO] [stderr]    |
[INFO] [stderr] 32 |     let mut course_info = course_instance.get_course_info().await;
[INFO] [stderr]    |         ----^^^^^^^^^^^
[INFO] [stderr]    |         |
[INFO] [stderr]    |         help: remove this `mut`
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `list_of_courses`
[INFO] [stderr]   --> src/bin/experimental.rs:31:9
[INFO] [stderr]    |
[INFO] [stderr] 31 |     let mut list_of_courses = course_instance.get_courses_list().await;
[INFO] [stderr]    |         ^^^^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_list_of_courses`
[INFO] [stderr]    |
[INFO] [stderr]    = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `course_info`
[INFO] [stderr]   --> src/bin/experimental.rs:32:9
[INFO] [stderr]    |
[INFO] [stderr] 32 |     let mut course_info = course_instance.get_course_info().await;
[INFO] [stderr]    |         ^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_course_info`
[INFO] [stderr] 
[INFO] [stderr] warning: `ccny-course-catalog` (bin "ccny-course-catalog" test) generated 17 warnings (run `cargo fix --bin "ccny-course-catalog" -p ccny-course-catalog --tests` to apply 13 suggestions)
[INFO] [stderr] warning: `ccny-course-catalog` (bin "experimental" test) generated 5 warnings (run `cargo fix --bin "experimental" -p ccny-course-catalog --tests` to apply 5 suggestions)
[INFO] [stderr]     Finished `test` profile [unoptimized + debuginfo] target(s) in 0.35s
[INFO] [stderr]      Running unittests src/lib.rs (/opt/rustwide/target/debug/build/ccny-course-catalog/82d6a82527c6bf4c/deps/ccny_course_catalog-82d6a82527c6bf4c)
[INFO] [stdout] 
[INFO] [stdout] running 4 tests
[INFO] [stdout] test data_structures::custom_hashmap::test_can_get_item ... ok
[INFO] [stdout] test data_structures::custom_lru_cache::tests::test_basic_operations ... ok
[INFO] [stderr]      Running unittests src/main.rs (/opt/rustwide/target/debug/build/ccny-course-catalog/f31408b87223186b/deps/ccny_course_catalog-f31408b87223186b)
[INFO] [stdout] test data_structures::custom_lru_cache::tests::test_clear ... ok
[INFO] [stderr]      Running unittests src/bin/experimental.rs (/opt/rustwide/target/debug/build/ccny-course-catalog/6fda8f2a68d7269e/deps/experimental-6fda8f2a68d7269e)
[INFO] [stdout] test data_structures::custom_lru_cache::tests::test_update_existing ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 4 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] running 0 tests
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] running 0 tests
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
[INFO] [stdout] 
[INFO] [stderr]    Doc-tests ccny_course_catalog
[INFO] [stdout] 
[INFO] [stdout] running 6 tests
[INFO] [stdout] test src/ccny_course_catalog.rs - ccny_course_catalog::CCNYCourseCatalog::set_department_name (line 327) ... FAILED
[INFO] [stdout] test src/ccny_course_catalog.rs - ccny_course_catalog::CCNYCourseCatalog::get_department_list (line 316) ... FAILED
[INFO] [stdout] test src/ccny_course_catalog.rs - ccny_course_catalog::CCNYCourseCatalog::get_course_info (line 168) ... FAILED
[INFO] [stdout] test src/ccny_course_catalog.rs - ccny_course_catalog::CCNYCourseCatalog::get_courses_list (line 44) ... FAILED
[INFO] [stdout] test src/api/department.rs - api::department::fetch_courses_by_department (line 20) ... FAILED
[INFO] [stdout] test src/ccny_course_catalog.rs - ccny_course_catalog::CCNYCourseCatalog::new (line 19) ... ok
[INFO] [stdout] 
[INFO] [stdout] failures:
[INFO] [stdout] 
[INFO] [stdout] ---- src/ccny_course_catalog.rs - ccny_course_catalog::CCNYCourseCatalog::set_department_name (line 327) stdout ----
[INFO] [stdout] error[E0425]: cannot find value `course_instance` in this scope
[INFO] [stdout]    --> src/ccny_course_catalog.rs:328:1
[INFO] [stdout]     |
[INFO] [stdout] 328 | course_instance.set_department_name("electrical engineering");
[INFO] [stdout]     | ^^^^^^^^^^^^^^^ not found in this scope
[INFO] [stdout] 
[INFO] [stdout] error[E0425]: cannot find value `course_instance` in this scope
[INFO] [stdout]    --> src/ccny_course_catalog.rs:329:1
[INFO] [stdout]     |
[INFO] [stdout] 329 | course_instance.set_course_name("statistics");
[INFO] [stdout]     | ^^^^^^^^^^^^^^^ not found in this scope
[INFO] [stdout] 
[INFO] [stdout] error: aborting due to 2 previous errors
[INFO] [stdout] 
[INFO] [stdout] For more information about this error, try `rustc --explain E0425`.
[INFO] [stdout] Couldn't compile the test.
[INFO] [stdout] ---- src/ccny_course_catalog.rs - ccny_course_catalog::CCNYCourseCatalog::get_department_list (line 316) stdout ----
[INFO] [stdout] error[E0433]: failed to resolve: use of undeclared type `CCNYCourseCatalog`
[INFO] [stdout]    --> src/ccny_course_catalog.rs:319:23
[INFO] [stdout]     |
[INFO] [stdout] 319 | let department_list = CCNYCourseCatalog::get_department_list();
[INFO] [stdout]     |                       ^^^^^^^^^^^^^^^^^ use of undeclared type `CCNYCourseCatalog`
[INFO] [stdout]     |
[INFO] [stdout] help: consider importing this struct
[INFO] [stdout]     |
[INFO] [stdout] 316 + use ccny_course_catalog::CCNYCourseCatalog;
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] error: aborting due to 1 previous error
[INFO] [stdout] 
[INFO] [stdout] For more information about this error, try `rustc --explain E0433`.
[INFO] [stdout] Couldn't compile the test.
[INFO] [stdout] ---- src/ccny_course_catalog.rs - ccny_course_catalog::CCNYCourseCatalog::get_course_info (line 168) stdout ----
[INFO] [stdout] error[E0433]: failed to resolve: use of undeclared type `CCNYCourseCatalog`
[INFO] [stdout]    --> src/ccny_course_catalog.rs:171:31
[INFO] [stdout]     |
[INFO] [stdout] 171 |     let mut course_instance = CCNYCourseCatalog::new(String::from("computer science"), Some(String::from("data structures")));
[INFO] [stdout]     |                               ^^^^^^^^^^^^^^^^^ use of undeclared type `CCNYCourseCatalog`
[INFO] [stdout]     |
[INFO] [stdout] help: consider importing this struct
[INFO] [stdout]     |
[INFO] [stdout] 169 + use ccny_course_catalog::CCNYCourseCatalog;
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] error[E0107]: enum takes 2 generic arguments but 1 generic argument was supplied
[INFO] [stdout]    --> src/ccny_course_catalog.rs:170:20
[INFO] [stdout]     |
[INFO] [stdout] 170 | async fn main() -> Result<()> {
[INFO] [stdout]     |                    ^^^^^^ -- supplied 1 generic argument
[INFO] [stdout]     |                    |
[INFO] [stdout]     |                    expected 2 generic arguments
[INFO] [stdout]     |
[INFO] [stdout] help: add missing generic argument
[INFO] [stdout]     |
[INFO] [stdout] 170 | async fn main() -> Result<(), E> {
[INFO] [stdout]     |                             +++
[INFO] [stdout] 
[INFO] [stdout] error: aborting due to 2 previous errors
[INFO] [stdout] 
[INFO] [stdout] Some errors have detailed explanations: E0107, E0433.
[INFO] [stdout] For more information about an error, try `rustc --explain E0107`.
[INFO] [stdout] Couldn't compile the test.
[INFO] [stdout] ---- src/ccny_course_catalog.rs - ccny_course_catalog::CCNYCourseCatalog::get_courses_list (line 44) stdout ----
[INFO] [stdout] error[E0433]: failed to resolve: use of undeclared type `CCNYCourseCatalog`
[INFO] [stdout]   --> src/ccny_course_catalog.rs:47:31
[INFO] [stdout]    |
[INFO] [stdout] 47 |     let mut course_instance = CCNYCourseCatalog::new(String::from("computer science"), Some(String::from("data structures")));
[INFO] [stdout]    |                               ^^^^^^^^^^^^^^^^^ use of undeclared type `CCNYCourseCatalog`
[INFO] [stdout]    |
[INFO] [stdout] help: consider importing this struct
[INFO] [stdout]    |
[INFO] [stdout] 45 + use ccny_course_catalog::CCNYCourseCatalog;
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] error[E0107]: enum takes 2 generic arguments but 1 generic argument was supplied
[INFO] [stdout]   --> src/ccny_course_catalog.rs:46:20
[INFO] [stdout]    |
[INFO] [stdout] 46 | async fn main() -> Result<()> {
[INFO] [stdout]    |                    ^^^^^^ -- supplied 1 generic argument
[INFO] [stdout]    |                    |
[INFO] [stdout]    |                    expected 2 generic arguments
[INFO] [stdout]    |
[INFO] [stdout] help: add missing generic argument
[INFO] [stdout]    |
[INFO] [stdout] 46 | async fn main() -> Result<(), E> {
[INFO] [stdout]    |                             +++
[INFO] [stdout] 
[INFO] [stdout] error: aborting due to 2 previous errors
[INFO] [stdout] 
[INFO] [stdout] Some errors have detailed explanations: E0107, E0433.
[INFO] [stdout] For more information about an error, try `rustc --explain E0107`.
[INFO] [stdout] Couldn't compile the test.
[INFO] [stdout] ---- src/api/department.rs - api::department::fetch_courses_by_department (line 20) stdout ----
[INFO] [stdout] error[E0728]: `await` is only allowed inside `async` functions and blocks
[INFO] [stdout]   --> src/api/department.rs:21:63
[INFO] [stdout]    |
[INFO] [stdout] 20 | fn main() { #[allow(non_snake_case)] fn _doctest_main_src_api_department_rs_20_0() {
[INFO] [stdout]    |                                      --------------------------------------------- this is not `async`
[INFO] [stdout] 21 | let courses = fetch_courses_by_department("computer science").await?;
[INFO] [stdout]    |                                                               ^^^^^ only allowed inside `async` functions and blocks
[INFO] [stdout] 
[INFO] [stdout] error[E0425]: cannot find function `fetch_courses_by_department` in this scope
[INFO] [stdout]   --> src/api/department.rs:21:15
[INFO] [stdout]    |
[INFO] [stdout] 21 | let courses = fetch_courses_by_department("computer science").await?;
[INFO] [stdout]    |               ^^^^^^^^^^^^^^^^^^^^^^^^^^^ not found in this scope
[INFO] [stdout] 
[INFO] [stdout] error: aborting due to 2 previous errors
[INFO] [stdout] 
[INFO] [stdout] Some errors have detailed explanations: E0425, E0728.
[INFO] [stdout] For more information about an error, try `rustc --explain E0425`.
[INFO] [stdout] Couldn't compile the test.
[INFO] [stdout] 
[INFO] [stdout] failures:
[INFO] [stdout]     src/api/department.rs - api::department::fetch_courses_by_department (line 20)
[INFO] [stdout]     src/ccny_course_catalog.rs - ccny_course_catalog::CCNYCourseCatalog::get_course_info (line 168)
[INFO] [stdout]     src/ccny_course_catalog.rs - ccny_course_catalog::CCNYCourseCatalog::get_courses_list (line 44)
[INFO] [stdout]     src/ccny_course_catalog.rs - ccny_course_catalog::CCNYCourseCatalog::get_department_list (line 316)
[INFO] [stdout]     src/ccny_course_catalog.rs - ccny_course_catalog::CCNYCourseCatalog::set_department_name (line 327)
[INFO] [stdout] 
[INFO] [stdout] test result: FAILED. 1 passed; 5 failed; 0 ignored; 0 measured; 0 filtered out; finished in 1.71s
[INFO] [stdout] 
[INFO] [stderr] error: doctest failed, to rerun pass `--doc`
[INFO] running `Command { std: "docker" "inspect" "3c2f40a1ea71c4ef65431aa8cf23a1122c7230b7b97e358357f6831a8afa921b", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "3c2f40a1ea71c4ef65431aa8cf23a1122c7230b7b97e358357f6831a8afa921b", kill_on_drop: false }`
[INFO] [stdout] 3c2f40a1ea71c4ef65431aa8cf23a1122c7230b7b97e358357f6831a8afa921b
