Files
GopherGate/target/debug/.fingerprint/llm-proxy-94074c1f3cf0b0ab/output-bin-llm-proxy
2026-02-26 12:47:43 -05:00

55 lines
88 KiB
Plaintext

{"$message_type":"diagnostic","message":"use of deprecated field `async_openai::types::chat::ChatCompletionRequestAssistantMessage::function_call`","code":{"code":"deprecated","explanation":null},"level":"warning","spans":[{"file_name":"src/providers/openai.rs","byte_start":4023,"byte_end":4042,"line_start":100,"line_end":100,"column_start":29,"column_end":48,"is_primary":true,"text":[{"text":" function_call: None,","highlight_start":29,"highlight_end":48}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[{"message":"`#[warn(deprecated)]` on by default","code":null,"level":"note","spans":[],"children":[],"rendered":null}],"rendered":"\u001b[1m\u001b[33mwarning\u001b[0m\u001b[1m: use of deprecated field `async_openai::types::chat::ChatCompletionRequestAssistantMessage::function_call`\u001b[0m\n \u001b[1m\u001b[94m--> \u001b[0msrc/providers/openai.rs:100:29\n \u001b[1m\u001b[94m|\u001b[0m\n\u001b[1m\u001b[94m100\u001b[0m \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[94m...\u001b[0m function_call: None,\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[33m^^^^^^^^^^^^^^^^^^^\u001b[0m\n \u001b[1m\u001b[94m|\u001b[0m\n \u001b[1m\u001b[94m= \u001b[0m\u001b[1mnote\u001b[0m: `#[warn(deprecated)]` on by default\n\n"}
{"$message_type":"diagnostic","message":"use of deprecated field `async_openai::types::chat::ChatCompletionRequestAssistantMessage::function_call`","code":{"code":"deprecated","explanation":null},"level":"warning","spans":[{"file_name":"src/providers/openai.rs","byte_start":9062,"byte_end":9081,"line_start":222,"line_end":222,"column_start":29,"column_end":48,"is_primary":true,"text":[{"text":" function_call: None,","highlight_start":29,"highlight_end":48}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[],"rendered":"\u001b[1m\u001b[33mwarning\u001b[0m\u001b[1m: use of deprecated field `async_openai::types::chat::ChatCompletionRequestAssistantMessage::function_call`\u001b[0m\n \u001b[1m\u001b[94m--> \u001b[0msrc/providers/openai.rs:222:29\n \u001b[1m\u001b[94m|\u001b[0m\n\u001b[1m\u001b[94m222\u001b[0m \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[94m...\u001b[0m function_call: None,\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[33m^^^^^^^^^^^^^^^^^^^\u001b[0m\n\n"}
{"$message_type":"diagnostic","message":"use of deprecated field `async_openai::types::chat::ChatCompletionRequestAssistantMessage::function_call`","code":{"code":"deprecated","explanation":null},"level":"warning","spans":[{"file_name":"src/providers/deepseek.rs","byte_start":3739,"byte_end":3758,"line_start":93,"line_end":93,"column_start":29,"column_end":48,"is_primary":true,"text":[{"text":" function_call: None,","highlight_start":29,"highlight_end":48}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[],"rendered":"\u001b[1m\u001b[33mwarning\u001b[0m\u001b[1m: use of deprecated field `async_openai::types::chat::ChatCompletionRequestAssistantMessage::function_call`\u001b[0m\n \u001b[1m\u001b[94m--> \u001b[0msrc/providers/deepseek.rs:93:29\n \u001b[1m\u001b[94m|\u001b[0m\n\u001b[1m\u001b[94m93\u001b[0m \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[94m...\u001b[0m function_call: None,\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[33m^^^^^^^^^^^^^^^^^^^\u001b[0m\n\n"}
{"$message_type":"diagnostic","message":"use of deprecated field `async_openai::types::chat::ChatCompletionRequestAssistantMessage::function_call`","code":{"code":"deprecated","explanation":null},"level":"warning","spans":[{"file_name":"src/providers/deepseek.rs","byte_start":8801,"byte_end":8820,"line_start":215,"line_end":215,"column_start":29,"column_end":48,"is_primary":true,"text":[{"text":" function_call: None,","highlight_start":29,"highlight_end":48}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[],"rendered":"\u001b[1m\u001b[33mwarning\u001b[0m\u001b[1m: use of deprecated field `async_openai::types::chat::ChatCompletionRequestAssistantMessage::function_call`\u001b[0m\n \u001b[1m\u001b[94m--> \u001b[0msrc/providers/deepseek.rs:215:29\n \u001b[1m\u001b[94m|\u001b[0m\n\u001b[1m\u001b[94m215\u001b[0m \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[94m...\u001b[0m function_call: None,\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[33m^^^^^^^^^^^^^^^^^^^\u001b[0m\n\n"}
{"$message_type":"diagnostic","message":"unused variable: `request`","code":{"code":"unused_variables","explanation":null},"level":"warning","spans":[{"file_name":"src/providers/gemini.rs","byte_start":6571,"byte_end":6578,"line_start":216,"line_end":216,"column_start":9,"column_end":16,"is_primary":true,"text":[{"text":" request: UnifiedRequest,","highlight_start":9,"highlight_end":16}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[{"message":"`#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default","code":null,"level":"note","spans":[],"children":[],"rendered":null},{"message":"if this is intentional, prefix it with an underscore","code":null,"level":"help","spans":[{"file_name":"src/providers/gemini.rs","byte_start":6571,"byte_end":6578,"line_start":216,"line_end":216,"column_start":9,"column_end":16,"is_primary":true,"text":[{"text":" request: UnifiedRequest,","highlight_start":9,"highlight_end":16}],"label":null,"suggested_replacement":"_request","suggestion_applicability":"MachineApplicable","expansion":null}],"children":[],"rendered":null}],"rendered":"\u001b[1m\u001b[33mwarning\u001b[0m\u001b[1m: unused variable: `request`\u001b[0m\n \u001b[1m\u001b[94m--> \u001b[0msrc/providers/gemini.rs:216:9\n \u001b[1m\u001b[94m|\u001b[0m\n\u001b[1m\u001b[94m216\u001b[0m \u001b[1m\u001b[94m|\u001b[0m request: UnifiedRequest,\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[33m^^^^^^^\u001b[0m \u001b[1m\u001b[33mhelp: if this is intentional, prefix it with an underscore: `_request`\u001b[0m\n \u001b[1m\u001b[94m|\u001b[0m\n \u001b[1m\u001b[94m= \u001b[0m\u001b[1mnote\u001b[0m: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default\n\n"}
{"$message_type":"diagnostic","message":"unused variable: `client_refill_rate`","code":{"code":"unused_variables","explanation":null},"level":"warning","spans":[{"file_name":"src/rate_limiting/mod.rs","byte_start":7100,"byte_end":7118,"line_start":222,"line_end":222,"column_start":13,"column_end":31,"is_primary":true,"text":[{"text":" let client_refill_rate = config.requests_per_minute as f64 / 60.0;","highlight_start":13,"highlight_end":31}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[{"message":"if this is intentional, prefix it with an underscore","code":null,"level":"help","spans":[{"file_name":"src/rate_limiting/mod.rs","byte_start":7100,"byte_end":7118,"line_start":222,"line_end":222,"column_start":13,"column_end":31,"is_primary":true,"text":[{"text":" let client_refill_rate = config.requests_per_minute as f64 / 60.0;","highlight_start":13,"highlight_end":31}],"label":null,"suggested_replacement":"_client_refill_rate","suggestion_applicability":"MachineApplicable","expansion":null}],"children":[],"rendered":null}],"rendered":"\u001b[1m\u001b[33mwarning\u001b[0m\u001b[1m: unused variable: `client_refill_rate`\u001b[0m\n \u001b[1m\u001b[94m--> \u001b[0msrc/rate_limiting/mod.rs:222:13\n \u001b[1m\u001b[94m|\u001b[0m\n\u001b[1m\u001b[94m222\u001b[0m \u001b[1m\u001b[94m|\u001b[0m let client_refill_rate = config.requests_per_minute as f64 / 60.0;\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[33m^^^^^^^^^^^^^^^^^^\u001b[0m \u001b[1m\u001b[33mhelp: if this is intentional, prefix it with an underscore: `_client_refill_rate`\u001b[0m\n\n"}
{"$message_type":"diagnostic","message":"fields `model_mapping` and `pricing` are never read","code":{"code":"dead_code","explanation":null},"level":"warning","spans":[{"file_name":"src/config/mod.rs","byte_start":1930,"byte_end":1939,"line_start":81,"line_end":81,"column_start":12,"column_end":21,"is_primary":false,"text":[{"text":"pub struct AppConfig {","highlight_start":12,"highlight_end":21}],"label":"fields in this struct","suggested_replacement":null,"suggestion_applicability":null,"expansion":null},{"file_name":"src/config/mod.rs","byte_start":2049,"byte_end":2062,"line_start":85,"line_end":85,"column_start":9,"column_end":22,"is_primary":true,"text":[{"text":" pub model_mapping: ModelMappingConfig,","highlight_start":9,"highlight_end":22}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null},{"file_name":"src/config/mod.rs","byte_start":2092,"byte_end":2099,"line_start":86,"line_end":86,"column_start":9,"column_end":16,"is_primary":true,"text":[{"text":" pub pricing: PricingConfig,","highlight_start":9,"highlight_end":16}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[{"message":"`AppConfig` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis","code":null,"level":"note","spans":[],"children":[],"rendered":null},{"message":"`#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default","code":null,"level":"note","spans":[],"children":[],"rendered":null}],"rendered":"\u001b[1m\u001b[33mwarning\u001b[0m\u001b[1m: fields `model_mapping` and `pricing` are never read\u001b[0m\n \u001b[1m\u001b[94m--> \u001b[0msrc/config/mod.rs:85:9\n \u001b[1m\u001b[94m|\u001b[0m\n\u001b[1m\u001b[94m81\u001b[0m \u001b[1m\u001b[94m|\u001b[0m pub struct AppConfig {\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[94m---------\u001b[0m \u001b[1m\u001b[94mfields in this struct\u001b[0m\n\u001b[1m\u001b[94m...\u001b[0m\n\u001b[1m\u001b[94m85\u001b[0m \u001b[1m\u001b[94m|\u001b[0m pub model_mapping: ModelMappingConfig,\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[33m^^^^^^^^^^^^^\u001b[0m\n\u001b[1m\u001b[94m86\u001b[0m \u001b[1m\u001b[94m|\u001b[0m pub pricing: PricingConfig,\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[33m^^^^^^^\u001b[0m\n \u001b[1m\u001b[94m|\u001b[0m\n \u001b[1m\u001b[94m= \u001b[0m\u001b[1mnote\u001b[0m: `AppConfig` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis\n \u001b[1m\u001b[94m= \u001b[0m\u001b[1mnote\u001b[0m: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default\n\n"}
{"$message_type":"diagnostic","message":"field `token` is never read","code":{"code":"dead_code","explanation":null},"level":"warning","spans":[{"file_name":"src/auth/mod.rs","byte_start":208,"byte_end":227,"line_start":8,"line_end":8,"column_start":12,"column_end":31,"is_primary":false,"text":[{"text":"pub struct AuthenticatedClient {","highlight_start":12,"highlight_end":31}],"label":"field in this struct","suggested_replacement":null,"suggestion_applicability":null,"expansion":null},{"file_name":"src/auth/mod.rs","byte_start":238,"byte_end":243,"line_start":9,"line_end":9,"column_start":9,"column_end":14,"is_primary":true,"text":[{"text":" pub token: String,","highlight_start":9,"highlight_end":14}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[],"rendered":"\u001b[1m\u001b[33mwarning\u001b[0m\u001b[1m: field `token` is never read\u001b[0m\n \u001b[1m\u001b[94m--> \u001b[0msrc/auth/mod.rs:9:9\n \u001b[1m\u001b[94m|\u001b[0m\n\u001b[1m\u001b[94m8\u001b[0m \u001b[1m\u001b[94m|\u001b[0m pub struct AuthenticatedClient {\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[94m-------------------\u001b[0m \u001b[1m\u001b[94mfield in this struct\u001b[0m\n\u001b[1m\u001b[94m9\u001b[0m \u001b[1m\u001b[94m|\u001b[0m pub token: String,\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[33m^^^^^\u001b[0m\n\n"}
{"$message_type":"diagnostic","message":"function `validate_token` is never used","code":{"code":"dead_code","explanation":null},"level":"warning","spans":[{"file_name":"src/auth/mod.rs","byte_start":1394,"byte_end":1408,"line_start":42,"line_end":42,"column_start":8,"column_end":22,"is_primary":true,"text":[{"text":"pub fn validate_token(token: &str, valid_tokens: &[String]) -> bool {","highlight_start":8,"highlight_end":22}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[],"rendered":"\u001b[1m\u001b[33mwarning\u001b[0m\u001b[1m: function `validate_token` is never used\u001b[0m\n \u001b[1m\u001b[94m--> \u001b[0msrc/auth/mod.rs:42:8\n \u001b[1m\u001b[94m|\u001b[0m\n\u001b[1m\u001b[94m42\u001b[0m \u001b[1m\u001b[94m|\u001b[0m pub fn validate_token(token: &str, valid_tokens: &[String]) -> bool {\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[33m^^^^^^^^^^^^^^\u001b[0m\n\n"}
{"$message_type":"diagnostic","message":"function `test_connection` is never used","code":{"code":"dead_code","explanation":null},"level":"warning","spans":[{"file_name":"src/database/mod.rs","byte_start":3372,"byte_end":3387,"line_start":125,"line_end":125,"column_start":14,"column_end":29,"is_primary":true,"text":[{"text":"pub async fn test_connection(pool: &DbPool) -> Result<()> {","highlight_start":14,"highlight_end":29}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[],"rendered":"\u001b[1m\u001b[33mwarning\u001b[0m\u001b[1m: function `test_connection` is never used\u001b[0m\n \u001b[1m\u001b[94m--> \u001b[0msrc/database/mod.rs:125:14\n \u001b[1m\u001b[94m|\u001b[0m\n\u001b[1m\u001b[94m125\u001b[0m \u001b[1m\u001b[94m|\u001b[0m pub async fn test_connection(pool: &DbPool) -> Result<()> {\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[33m^^^^^^^^^^^^^^^\u001b[0m\n\n"}
{"$message_type":"diagnostic","message":"field `has_images` is never read","code":{"code":"dead_code","explanation":null},"level":"warning","spans":[{"file_name":"src/models/mod.rs","byte_start":2453,"byte_end":2467,"line_start":97,"line_end":97,"column_start":12,"column_end":26,"is_primary":false,"text":[{"text":"pub struct UnifiedRequest {","highlight_start":12,"highlight_end":26}],"label":"field in this struct","suggested_replacement":null,"suggestion_applicability":null,"expansion":null},{"file_name":"src/models/mod.rs","byte_start":2656,"byte_end":2666,"line_start":104,"line_end":104,"column_start":9,"column_end":19,"is_primary":true,"text":[{"text":" pub has_images: bool,","highlight_start":9,"highlight_end":19}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[{"message":"`UnifiedRequest` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis","code":null,"level":"note","spans":[],"children":[],"rendered":null}],"rendered":"\u001b[1m\u001b[33mwarning\u001b[0m\u001b[1m: field `has_images` is never read\u001b[0m\n \u001b[1m\u001b[94m--> \u001b[0msrc/models/mod.rs:104:9\n \u001b[1m\u001b[94m|\u001b[0m\n \u001b[1m\u001b[94m97\u001b[0m \u001b[1m\u001b[94m|\u001b[0m pub struct UnifiedRequest {\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[94m--------------\u001b[0m \u001b[1m\u001b[94mfield in this struct\u001b[0m\n\u001b[1m\u001b[94m...\u001b[0m\n\u001b[1m\u001b[94m104\u001b[0m \u001b[1m\u001b[94m|\u001b[0m pub has_images: bool,\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[33m^^^^^^^^^^\u001b[0m\n \u001b[1m\u001b[94m|\u001b[0m\n \u001b[1m\u001b[94m= \u001b[0m\u001b[1mnote\u001b[0m: `UnifiedRequest` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis\n\n"}
{"$message_type":"diagnostic","message":"fields `data`, `mime_type`, and `format` are never read","code":{"code":"dead_code","explanation":null},"level":"warning","spans":[{"file_name":"src/models/mod.rs","byte_start":2880,"byte_end":2885,"line_start":118,"line_end":118,"column_start":5,"column_end":10,"is_primary":false,"text":[{"text":" Image {","highlight_start":5,"highlight_end":10}],"label":"fields in this variant","suggested_replacement":null,"suggestion_applicability":null,"expansion":null},{"file_name":"src/models/mod.rs","byte_start":2896,"byte_end":2900,"line_start":119,"line_end":119,"column_start":9,"column_end":13,"is_primary":true,"text":[{"text":" data: Vec<u8>,","highlight_start":9,"highlight_end":13}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null},{"file_name":"src/models/mod.rs","byte_start":2919,"byte_end":2928,"line_start":120,"line_end":120,"column_start":9,"column_end":18,"is_primary":true,"text":[{"text":" mime_type: String,","highlight_start":9,"highlight_end":18}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null},{"file_name":"src/models/mod.rs","byte_start":2946,"byte_end":2952,"line_start":121,"line_end":121,"column_start":9,"column_end":15,"is_primary":true,"text":[{"text":" format: ImageFormat,","highlight_start":9,"highlight_end":15}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[{"message":"`ContentPart` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis","code":null,"level":"note","spans":[],"children":[],"rendered":null}],"rendered":"\u001b[1m\u001b[33mwarning\u001b[0m\u001b[1m: fields `data`, `mime_type`, and `format` are never read\u001b[0m\n \u001b[1m\u001b[94m--> \u001b[0msrc/models/mod.rs:119:9\n \u001b[1m\u001b[94m|\u001b[0m\n\u001b[1m\u001b[94m118\u001b[0m \u001b[1m\u001b[94m|\u001b[0m Image {\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[94m-----\u001b[0m \u001b[1m\u001b[94mfields in this variant\u001b[0m\n\u001b[1m\u001b[94m119\u001b[0m \u001b[1m\u001b[94m|\u001b[0m data: Vec<u8>,\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[33m^^^^\u001b[0m\n\u001b[1m\u001b[94m120\u001b[0m \u001b[1m\u001b[94m|\u001b[0m mime_type: String,\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[33m^^^^^^^^^\u001b[0m\n\u001b[1m\u001b[94m121\u001b[0m \u001b[1m\u001b[94m|\u001b[0m format: ImageFormat,\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[33m^^^^^^\u001b[0m\n \u001b[1m\u001b[94m|\u001b[0m\n \u001b[1m\u001b[94m= \u001b[0m\u001b[1mnote\u001b[0m: `ContentPart` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis\n\n"}
{"$message_type":"diagnostic","message":"field `0` is never read","code":{"code":"dead_code","explanation":null},"level":"warning","spans":[{"file_name":"src/models/mod.rs","byte_start":3040,"byte_end":3043,"line_start":128,"line_end":128,"column_start":5,"column_end":8,"is_primary":false,"text":[{"text":" Url(String),","highlight_start":5,"highlight_end":8}],"label":"field in this variant","suggested_replacement":null,"suggestion_applicability":null,"expansion":null},{"file_name":"src/models/mod.rs","byte_start":3044,"byte_end":3050,"line_start":128,"line_end":128,"column_start":9,"column_end":15,"is_primary":true,"text":[{"text":" Url(String),","highlight_start":9,"highlight_end":15}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[{"message":"`ImageFormat` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis","code":null,"level":"note","spans":[],"children":[],"rendered":null},{"message":"consider changing the field to be of unit type to suppress this warning while preserving the field numbering, or remove the field","code":null,"level":"help","spans":[{"file_name":"src/models/mod.rs","byte_start":3044,"byte_end":3050,"line_start":128,"line_end":128,"column_start":9,"column_end":15,"is_primary":true,"text":[{"text":" Url(String),","highlight_start":9,"highlight_end":15}],"label":null,"suggested_replacement":"()","suggestion_applicability":"HasPlaceholders","expansion":null}],"children":[],"rendered":null}],"rendered":"\u001b[1m\u001b[33mwarning\u001b[0m\u001b[1m: field `0` is never read\u001b[0m\n \u001b[1m\u001b[94m--> \u001b[0msrc/models/mod.rs:128:9\n \u001b[1m\u001b[94m|\u001b[0m\n\u001b[1m\u001b[94m128\u001b[0m \u001b[1m\u001b[94m|\u001b[0m Url(String),\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[94m---\u001b[0m \u001b[1m\u001b[33m^^^^^^\u001b[0m\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[94m|\u001b[0m\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[94mfield in this variant\u001b[0m\n \u001b[1m\u001b[94m|\u001b[0m\n \u001b[1m\u001b[94m= \u001b[0m\u001b[1mnote\u001b[0m: `ImageFormat` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis\n\u001b[1m\u001b[96mhelp\u001b[0m: consider changing the field to be of unit type to suppress this warning while preserving the field numbering, or remove the field\n \u001b[1m\u001b[94m|\u001b[0m\n\u001b[1m\u001b[94m128\u001b[0m \u001b[91m- \u001b[0m Url(\u001b[91mString\u001b[0m),\n\u001b[1m\u001b[94m128\u001b[0m \u001b[92m+ \u001b[0m Url(\u001b[92m()\u001b[0m),\n \u001b[1m\u001b[94m|\u001b[0m\n\n"}
{"$message_type":"diagnostic","message":"variants `Base64`, `CloudUri`, and `Multipart` are never constructed","code":{"code":"dead_code","explanation":null},"level":"warning","spans":[{"file_name":"src/models/mod.rs","byte_start":3010,"byte_end":3021,"line_start":126,"line_end":126,"column_start":10,"column_end":21,"is_primary":false,"text":[{"text":"pub enum ImageFormat {","highlight_start":10,"highlight_end":21}],"label":"variants in this enum","suggested_replacement":null,"suggestion_applicability":null,"expansion":null},{"file_name":"src/models/mod.rs","byte_start":3028,"byte_end":3034,"line_start":127,"line_end":127,"column_start":5,"column_end":11,"is_primary":true,"text":[{"text":" Base64,","highlight_start":5,"highlight_end":11}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null},{"file_name":"src/models/mod.rs","byte_start":3057,"byte_end":3065,"line_start":129,"line_end":129,"column_start":5,"column_end":13,"is_primary":true,"text":[{"text":" CloudUri(String),","highlight_start":5,"highlight_end":13}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null},{"file_name":"src/models/mod.rs","byte_start":3079,"byte_end":3088,"line_start":130,"line_end":130,"column_start":5,"column_end":14,"is_primary":true,"text":[{"text":" Multipart,","highlight_start":5,"highlight_end":14}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[{"message":"`ImageFormat` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis","code":null,"level":"note","spans":[],"children":[],"rendered":null}],"rendered":"\u001b[1m\u001b[33mwarning\u001b[0m\u001b[1m: variants `Base64`, `CloudUri`, and `Multipart` are never constructed\u001b[0m\n \u001b[1m\u001b[94m--> \u001b[0msrc/models/mod.rs:127:5\n \u001b[1m\u001b[94m|\u001b[0m\n\u001b[1m\u001b[94m126\u001b[0m \u001b[1m\u001b[94m|\u001b[0m pub enum ImageFormat {\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[94m-----------\u001b[0m \u001b[1m\u001b[94mvariants in this enum\u001b[0m\n\u001b[1m\u001b[94m127\u001b[0m \u001b[1m\u001b[94m|\u001b[0m Base64,\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[33m^^^^^^\u001b[0m\n\u001b[1m\u001b[94m128\u001b[0m \u001b[1m\u001b[94m|\u001b[0m Url(String),\n\u001b[1m\u001b[94m129\u001b[0m \u001b[1m\u001b[94m|\u001b[0m CloudUri(String),\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[33m^^^^^^^^\u001b[0m\n\u001b[1m\u001b[94m130\u001b[0m \u001b[1m\u001b[94m|\u001b[0m Multipart,\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[33m^^^^^^^^^\u001b[0m\n \u001b[1m\u001b[94m|\u001b[0m\n \u001b[1m\u001b[94m= \u001b[0m\u001b[1mnote\u001b[0m: `ImageFormat` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis\n\n"}
{"$message_type":"diagnostic","message":"struct `OpenAIRequest` is never constructed","code":{"code":"dead_code","explanation":null},"level":"warning","spans":[{"file_name":"src/models/mod.rs","byte_start":3191,"byte_end":3204,"line_start":136,"line_end":136,"column_start":12,"column_end":25,"is_primary":true,"text":[{"text":"pub struct OpenAIRequest {","highlight_start":12,"highlight_end":25}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[],"rendered":"\u001b[1m\u001b[33mwarning\u001b[0m\u001b[1m: struct `OpenAIRequest` is never constructed\u001b[0m\n \u001b[1m\u001b[94m--> \u001b[0msrc/models/mod.rs:136:12\n \u001b[1m\u001b[94m|\u001b[0m\n\u001b[1m\u001b[94m136\u001b[0m \u001b[1m\u001b[94m|\u001b[0m pub struct OpenAIRequest {\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[33m^^^^^^^^^^^^^\u001b[0m\n\n"}
{"$message_type":"diagnostic","message":"struct `OpenAIMessage` is never constructed","code":{"code":"dead_code","explanation":null},"level":"warning","spans":[{"file_name":"src/models/mod.rs","byte_start":3414,"byte_end":3427,"line_start":145,"line_end":145,"column_start":12,"column_end":25,"is_primary":true,"text":[{"text":"pub struct OpenAIMessage {","highlight_start":12,"highlight_end":25}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[],"rendered":"\u001b[1m\u001b[33mwarning\u001b[0m\u001b[1m: struct `OpenAIMessage` is never constructed\u001b[0m\n \u001b[1m\u001b[94m--> \u001b[0msrc/models/mod.rs:145:12\n \u001b[1m\u001b[94m|\u001b[0m\n\u001b[1m\u001b[94m145\u001b[0m \u001b[1m\u001b[94m|\u001b[0m pub struct OpenAIMessage {\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[33m^^^^^^^^^^^^^\u001b[0m\n\n"}
{"$message_type":"diagnostic","message":"enum `OpenAIContentPart` is never used","code":{"code":"dead_code","explanation":null},"level":"warning","spans":[{"file_name":"src/models/mod.rs","byte_start":3590,"byte_end":3607,"line_start":152,"line_end":152,"column_start":10,"column_end":27,"is_primary":true,"text":[{"text":"pub enum OpenAIContentPart {","highlight_start":10,"highlight_end":27}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[],"rendered":"\u001b[1m\u001b[33mwarning\u001b[0m\u001b[1m: enum `OpenAIContentPart` is never used\u001b[0m\n \u001b[1m\u001b[94m--> \u001b[0msrc/models/mod.rs:152:10\n \u001b[1m\u001b[94m|\u001b[0m\n\u001b[1m\u001b[94m152\u001b[0m \u001b[1m\u001b[94m|\u001b[0m pub enum OpenAIContentPart {\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[33m^^^^^^^^^^^^^^^^^\u001b[0m\n\n"}
{"$message_type":"diagnostic","message":"trait `ToOpenAI` is never used","code":{"code":"dead_code","explanation":null},"level":"warning","spans":[{"file_name":"src/models/mod.rs","byte_start":3789,"byte_end":3797,"line_start":161,"line_end":161,"column_start":11,"column_end":19,"is_primary":true,"text":[{"text":"pub trait ToOpenAI {","highlight_start":11,"highlight_end":19}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[],"rendered":"\u001b[1m\u001b[33mwarning\u001b[0m\u001b[1m: trait `ToOpenAI` is never used\u001b[0m\n \u001b[1m\u001b[94m--> \u001b[0msrc/models/mod.rs:161:11\n \u001b[1m\u001b[94m|\u001b[0m\n\u001b[1m\u001b[94m161\u001b[0m \u001b[1m\u001b[94m|\u001b[0m pub trait ToOpenAI {\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[33m^^^^^^^^\u001b[0m\n\n"}
{"$message_type":"diagnostic","message":"trait `FromOpenAI` is never used","code":{"code":"dead_code","explanation":null},"level":"warning","spans":[{"file_name":"src/models/mod.rs","byte_start":3878,"byte_end":3888,"line_start":165,"line_end":165,"column_start":11,"column_end":21,"is_primary":true,"text":[{"text":"pub trait FromOpenAI {","highlight_start":11,"highlight_end":21}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[],"rendered":"\u001b[1m\u001b[33mwarning\u001b[0m\u001b[1m: trait `FromOpenAI` is never used\u001b[0m\n \u001b[1m\u001b[94m--> \u001b[0msrc/models/mod.rs:165:11\n \u001b[1m\u001b[94m|\u001b[0m\n\u001b[1m\u001b[94m165\u001b[0m \u001b[1m\u001b[94m|\u001b[0m pub trait FromOpenAI {\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[33m^^^^^^^^^^\u001b[0m\n\n"}
{"$message_type":"diagnostic","message":"methods `supports_multimodal`, `estimate_tokens`, and `calculate_cost` are never used","code":{"code":"dead_code","explanation":null},"level":"warning","spans":[{"file_name":"src/providers/mod.rs","byte_start":258,"byte_end":266,"line_start":15,"line_end":15,"column_start":11,"column_end":19,"is_primary":false,"text":[{"text":"pub trait Provider: Send + Sync {","highlight_start":11,"highlight_end":19}],"label":"methods in this trait","suggested_replacement":null,"suggestion_applicability":null,"expansion":null},{"file_name":"src/providers/mod.rs","byte_start":536,"byte_end":555,"line_start":23,"line_end":23,"column_start":8,"column_end":27,"is_primary":true,"text":[{"text":" fn supports_multimodal(&self) -> bool;","highlight_start":8,"highlight_end":27}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null},{"file_name":"src/providers/mod.rs","byte_start":1036,"byte_end":1051,"line_start":38,"line_end":38,"column_start":8,"column_end":23,"is_primary":true,"text":[{"text":" fn estimate_tokens(&self, request: &UnifiedRequest) -> Result<u32>;","highlight_start":8,"highlight_end":23}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null},{"file_name":"src/providers/mod.rs","byte_start":1153,"byte_end":1167,"line_start":41,"line_end":41,"column_start":8,"column_end":22,"is_primary":true,"text":[{"text":" fn calculate_cost(&self, prompt_tokens: u32, completion_tokens: u32) -> f64;","highlight_start":8,"highlight_end":22}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[],"rendered":"\u001b[1m\u001b[33mwarning\u001b[0m\u001b[1m: methods `supports_multimodal`, `estimate_tokens`, and `calculate_cost` are never used\u001b[0m\n \u001b[1m\u001b[94m--> \u001b[0msrc/providers/mod.rs:23:8\n \u001b[1m\u001b[94m|\u001b[0m\n\u001b[1m\u001b[94m15\u001b[0m \u001b[1m\u001b[94m|\u001b[0m pub trait Provider: Send + Sync {\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[94m--------\u001b[0m \u001b[1m\u001b[94mmethods in this trait\u001b[0m\n\u001b[1m\u001b[94m...\u001b[0m\n\u001b[1m\u001b[94m23\u001b[0m \u001b[1m\u001b[94m|\u001b[0m fn supports_multimodal(&self) -> bool;\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[33m^^^^^^^^^^^^^^^^^^^\u001b[0m\n\u001b[1m\u001b[94m...\u001b[0m\n\u001b[1m\u001b[94m38\u001b[0m \u001b[1m\u001b[94m|\u001b[0m fn estimate_tokens(&self, request: &UnifiedRequest) -> Result<u32>;\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[33m^^^^^^^^^^^^^^^\u001b[0m\n\u001b[1m\u001b[94m...\u001b[0m\n\u001b[1m\u001b[94m41\u001b[0m \u001b[1m\u001b[94m|\u001b[0m fn calculate_cost(&self, prompt_tokens: u32, completion_tokens: u32) -> f64;\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[33m^^^^^^^^^^^^^^\u001b[0m\n\n"}
{"$message_type":"diagnostic","message":"method `get_provider` is never used","code":{"code":"dead_code","explanation":null},"level":"warning","spans":[{"file_name":"src/providers/mod.rs","byte_start":1633,"byte_end":1653,"line_start":64,"line_end":64,"column_start":1,"column_end":21,"is_primary":false,"text":[{"text":"impl ProviderManager {","highlight_start":1,"highlight_end":21}],"label":"method in this implementation","suggested_replacement":null,"suggestion_applicability":null,"expansion":null},{"file_name":"src/providers/mod.rs","byte_start":2078,"byte_end":2090,"line_start":81,"line_end":81,"column_start":12,"column_end":24,"is_primary":true,"text":[{"text":" pub fn get_provider(&self, name: &str) -> Option<Arc<dyn Provider>> {","highlight_start":12,"highlight_end":24}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[],"rendered":"\u001b[1m\u001b[33mwarning\u001b[0m\u001b[1m: method `get_provider` is never used\u001b[0m\n \u001b[1m\u001b[94m--> \u001b[0msrc/providers/mod.rs:81:12\n \u001b[1m\u001b[94m|\u001b[0m\n\u001b[1m\u001b[94m64\u001b[0m \u001b[1m\u001b[94m|\u001b[0m impl ProviderManager {\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[94m--------------------\u001b[0m \u001b[1m\u001b[94mmethod in this implementation\u001b[0m\n\u001b[1m\u001b[94m...\u001b[0m\n\u001b[1m\u001b[94m81\u001b[0m \u001b[1m\u001b[94m|\u001b[0m pub fn get_provider(&self, name: &str) -> Option<Arc<dyn Provider>> {\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[33m^^^^^^^^^^^^\u001b[0m\n\n"}
{"$message_type":"diagnostic","message":"field `config` is never read","code":{"code":"dead_code","explanation":null},"level":"warning","spans":[{"file_name":"src/providers/openai.rs","byte_start":634,"byte_end":648,"line_start":14,"line_end":14,"column_start":12,"column_end":26,"is_primary":false,"text":[{"text":"pub struct OpenAIProvider {","highlight_start":12,"highlight_end":26}],"label":"field in this struct","suggested_replacement":null,"suggestion_applicability":null,"expansion":null},{"file_name":"src/providers/openai.rs","byte_start":689,"byte_end":695,"line_start":16,"line_end":16,"column_start":5,"column_end":11,"is_primary":true,"text":[{"text":" config: crate::config::OpenAIConfig,","highlight_start":5,"highlight_end":11}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[],"rendered":"\u001b[1m\u001b[33mwarning\u001b[0m\u001b[1m: field `config` is never read\u001b[0m\n \u001b[1m\u001b[94m--> \u001b[0msrc/providers/openai.rs:16:5\n \u001b[1m\u001b[94m|\u001b[0m\n\u001b[1m\u001b[94m14\u001b[0m \u001b[1m\u001b[94m|\u001b[0m pub struct OpenAIProvider {\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[94m--------------\u001b[0m \u001b[1m\u001b[94mfield in this struct\u001b[0m\n\u001b[1m\u001b[94m15\u001b[0m \u001b[1m\u001b[94m|\u001b[0m client: Client<OpenAIConfig>,\n\u001b[1m\u001b[94m16\u001b[0m \u001b[1m\u001b[94m|\u001b[0m config: crate::config::OpenAIConfig,\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[33m^^^^^^\u001b[0m\n\n"}
{"$message_type":"diagnostic","message":"field `finish_reason` is never read","code":{"code":"dead_code","explanation":null},"level":"warning","spans":[{"file_name":"src/providers/gemini.rs","byte_start":766,"byte_end":781,"line_start":37,"line_end":37,"column_start":8,"column_end":23,"is_primary":false,"text":[{"text":"struct GeminiCandidate {","highlight_start":8,"highlight_end":23}],"label":"field in this struct","suggested_replacement":null,"suggestion_applicability":null,"expansion":null},{"file_name":"src/providers/gemini.rs","byte_start":816,"byte_end":829,"line_start":39,"line_end":39,"column_start":5,"column_end":18,"is_primary":true,"text":[{"text":" finish_reason: Option<String>,","highlight_start":5,"highlight_end":18}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[{"message":"`GeminiCandidate` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis","code":null,"level":"note","spans":[],"children":[],"rendered":null}],"rendered":"\u001b[1m\u001b[33mwarning\u001b[0m\u001b[1m: field `finish_reason` is never read\u001b[0m\n \u001b[1m\u001b[94m--> \u001b[0msrc/providers/gemini.rs:39:5\n \u001b[1m\u001b[94m|\u001b[0m\n\u001b[1m\u001b[94m37\u001b[0m \u001b[1m\u001b[94m|\u001b[0m struct GeminiCandidate {\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[94m---------------\u001b[0m \u001b[1m\u001b[94mfield in this struct\u001b[0m\n\u001b[1m\u001b[94m38\u001b[0m \u001b[1m\u001b[94m|\u001b[0m content: GeminiContent,\n\u001b[1m\u001b[94m39\u001b[0m \u001b[1m\u001b[94m|\u001b[0m finish_reason: Option<String>,\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[33m^^^^^^^^^^^^^\u001b[0m\n \u001b[1m\u001b[94m|\u001b[0m\n \u001b[1m\u001b[94m= \u001b[0m\u001b[1mnote\u001b[0m: `GeminiCandidate` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis\n\n"}
{"$message_type":"diagnostic","message":"field `config` is never read","code":{"code":"dead_code","explanation":null},"level":"warning","spans":[{"file_name":"src/providers/deepseek.rs","byte_start":634,"byte_end":650,"line_start":14,"line_end":14,"column_start":12,"column_end":28,"is_primary":false,"text":[{"text":"pub struct DeepSeekProvider {","highlight_start":12,"highlight_end":28}],"label":"field in this struct","suggested_replacement":null,"suggestion_applicability":null,"expansion":null},{"file_name":"src/providers/deepseek.rs","byte_start":731,"byte_end":737,"line_start":16,"line_end":16,"column_start":5,"column_end":11,"is_primary":true,"text":[{"text":" config: crate::config::DeepSeekConfig,","highlight_start":5,"highlight_end":11}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[],"rendered":"\u001b[1m\u001b[33mwarning\u001b[0m\u001b[1m: field `config` is never read\u001b[0m\n \u001b[1m\u001b[94m--> \u001b[0msrc/providers/deepseek.rs:16:5\n \u001b[1m\u001b[94m|\u001b[0m\n\u001b[1m\u001b[94m14\u001b[0m \u001b[1m\u001b[94m|\u001b[0m pub struct DeepSeekProvider {\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[94m----------------\u001b[0m \u001b[1m\u001b[94mfield in this struct\u001b[0m\n\u001b[1m\u001b[94m15\u001b[0m \u001b[1m\u001b[94m|\u001b[0m client: Client<OpenAIConfig>, // DeepSeek uses OpenAI-compatible API\n\u001b[1m\u001b[94m16\u001b[0m \u001b[1m\u001b[94m|\u001b[0m config: crate::config::DeepSeekConfig,\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[33m^^^^^^\u001b[0m\n\n"}
{"$message_type":"diagnostic","message":"fields `client`, `config`, and `api_key` are never read","code":{"code":"dead_code","explanation":null},"level":"warning","spans":[{"file_name":"src/providers/grok.rs","byte_start":236,"byte_end":248,"line_start":12,"line_end":12,"column_start":12,"column_end":24,"is_primary":false,"text":[{"text":"pub struct GrokProvider {","highlight_start":12,"highlight_end":24}],"label":"fields in this struct","suggested_replacement":null,"suggestion_applicability":null,"expansion":null},{"file_name":"src/providers/grok.rs","byte_start":255,"byte_end":261,"line_start":13,"line_end":13,"column_start":5,"column_end":11,"is_primary":true,"text":[{"text":" client: reqwest::Client,","highlight_start":5,"highlight_end":11}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null},{"file_name":"src/providers/grok.rs","byte_start":284,"byte_end":290,"line_start":14,"line_end":14,"column_start":5,"column_end":11,"is_primary":true,"text":[{"text":" config: crate::config::GrokConfig,","highlight_start":5,"highlight_end":11}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null},{"file_name":"src/providers/grok.rs","byte_start":323,"byte_end":330,"line_start":15,"line_end":15,"column_start":5,"column_end":12,"is_primary":true,"text":[{"text":" api_key: String,","highlight_start":5,"highlight_end":12}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[],"rendered":"\u001b[1m\u001b[33mwarning\u001b[0m\u001b[1m: fields `client`, `config`, and `api_key` are never read\u001b[0m\n \u001b[1m\u001b[94m--> \u001b[0msrc/providers/grok.rs:13:5\n \u001b[1m\u001b[94m|\u001b[0m\n\u001b[1m\u001b[94m12\u001b[0m \u001b[1m\u001b[94m|\u001b[0m pub struct GrokProvider {\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[94m------------\u001b[0m \u001b[1m\u001b[94mfields in this struct\u001b[0m\n\u001b[1m\u001b[94m13\u001b[0m \u001b[1m\u001b[94m|\u001b[0m client: reqwest::Client,\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[33m^^^^^^\u001b[0m\n\u001b[1m\u001b[94m14\u001b[0m \u001b[1m\u001b[94m|\u001b[0m config: crate::config::GrokConfig,\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[33m^^^^^^\u001b[0m\n\u001b[1m\u001b[94m15\u001b[0m \u001b[1m\u001b[94m|\u001b[0m api_key: String,\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[33m^^^^^^^\u001b[0m\n\n"}
{"$message_type":"diagnostic","message":"struct `PlaceholderProvider` is never constructed","code":{"code":"dead_code","explanation":null},"level":"warning","spans":[{"file_name":"src/providers/mod.rs","byte_start":2359,"byte_end":2378,"line_start":92,"line_end":92,"column_start":16,"column_end":35,"is_primary":true,"text":[{"text":" pub struct PlaceholderProvider {","highlight_start":16,"highlight_end":35}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[],"rendered":"\u001b[1m\u001b[33mwarning\u001b[0m\u001b[1m: struct `PlaceholderProvider` is never constructed\u001b[0m\n \u001b[1m\u001b[94m--> \u001b[0msrc/providers/mod.rs:92:16\n \u001b[1m\u001b[94m|\u001b[0m\n\u001b[1m\u001b[94m92\u001b[0m \u001b[1m\u001b[94m|\u001b[0m pub struct PlaceholderProvider {\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[33m^^^^^^^^^^^^^^^^^^^\u001b[0m\n\n"}
{"$message_type":"diagnostic","message":"associated function `new` is never used","code":{"code":"dead_code","explanation":null},"level":"warning","spans":[{"file_name":"src/providers/mod.rs","byte_start":2414,"byte_end":2438,"line_start":96,"line_end":96,"column_start":5,"column_end":29,"is_primary":false,"text":[{"text":" impl PlaceholderProvider {","highlight_start":5,"highlight_end":29}],"label":"associated function in this implementation","suggested_replacement":null,"suggestion_applicability":null,"expansion":null},{"file_name":"src/providers/mod.rs","byte_start":2456,"byte_end":2459,"line_start":97,"line_end":97,"column_start":16,"column_end":19,"is_primary":true,"text":[{"text":" pub fn new(name: &str) -> Self {","highlight_start":16,"highlight_end":19}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[],"rendered":"\u001b[1m\u001b[33mwarning\u001b[0m\u001b[1m: associated function `new` is never used\u001b[0m\n \u001b[1m\u001b[94m--> \u001b[0msrc/providers/mod.rs:97:16\n \u001b[1m\u001b[94m|\u001b[0m\n\u001b[1m\u001b[94m96\u001b[0m \u001b[1m\u001b[94m|\u001b[0m impl PlaceholderProvider {\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[94m------------------------\u001b[0m \u001b[1m\u001b[94massociated function in this implementation\u001b[0m\n\u001b[1m\u001b[94m97\u001b[0m \u001b[1m\u001b[94m|\u001b[0m pub fn new(name: &str) -> Self {\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[33m^^^\u001b[0m\n\n"}
{"$message_type":"diagnostic","message":"variants `ConfigError` and `MultimodalError` are never constructed","code":{"code":"dead_code","explanation":null},"level":"warning","spans":[{"file_name":"src/errors/mod.rs","byte_start":63,"byte_end":71,"line_start":4,"line_end":4,"column_start":10,"column_end":18,"is_primary":false,"text":[{"text":"pub enum AppError {","highlight_start":10,"highlight_end":18}],"label":"variants in this enum","suggested_replacement":null,"suggestion_applicability":null,"expansion":null},{"file_name":"src/errors/mod.rs","byte_start":186,"byte_end":197,"line_start":9,"line_end":9,"column_start":5,"column_end":16,"is_primary":true,"text":[{"text":" ConfigError(String),","highlight_start":5,"highlight_end":16}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null},{"file_name":"src/errors/mod.rs","byte_start":457,"byte_end":472,"line_start":21,"line_end":21,"column_start":5,"column_end":20,"is_primary":true,"text":[{"text":" MultimodalError(String),","highlight_start":5,"highlight_end":20}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[{"message":"`AppError` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis","code":null,"level":"note","spans":[],"children":[],"rendered":null}],"rendered":"\u001b[1m\u001b[33mwarning\u001b[0m\u001b[1m: variants `ConfigError` and `MultimodalError` are never constructed\u001b[0m\n \u001b[1m\u001b[94m--> \u001b[0msrc/errors/mod.rs:9:5\n \u001b[1m\u001b[94m|\u001b[0m\n \u001b[1m\u001b[94m4\u001b[0m \u001b[1m\u001b[94m|\u001b[0m pub enum AppError {\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[94m--------\u001b[0m \u001b[1m\u001b[94mvariants in this enum\u001b[0m\n\u001b[1m\u001b[94m...\u001b[0m\n \u001b[1m\u001b[94m9\u001b[0m \u001b[1m\u001b[94m|\u001b[0m ConfigError(String),\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[33m^^^^^^^^^^^\u001b[0m\n\u001b[1m\u001b[94m...\u001b[0m\n\u001b[1m\u001b[94m21\u001b[0m \u001b[1m\u001b[94m|\u001b[0m MultimodalError(String),\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[33m^^^^^^^^^^^^^^^\u001b[0m\n \u001b[1m\u001b[94m|\u001b[0m\n \u001b[1m\u001b[94m= \u001b[0m\u001b[1mnote\u001b[0m: `AppError` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis\n\n"}
{"$message_type":"diagnostic","message":"struct `DashboardCache` is never constructed","code":{"code":"dead_code","explanation":null},"level":"warning","spans":[{"file_name":"src/dashboard/mod.rs","byte_start":655,"byte_end":669,"line_start":28,"line_end":28,"column_start":8,"column_end":22,"is_primary":true,"text":[{"text":"struct DashboardCache {","highlight_start":8,"highlight_end":22}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[],"rendered":"\u001b[1m\u001b[33mwarning\u001b[0m\u001b[1m: struct `DashboardCache` is never constructed\u001b[0m\n \u001b[1m\u001b[94m--> \u001b[0msrc/dashboard/mod.rs:28:8\n \u001b[1m\u001b[94m|\u001b[0m\n\u001b[1m\u001b[94m28\u001b[0m \u001b[1m\u001b[94m|\u001b[0m struct DashboardCache {\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[33m^^^^^^^^^^^^^^\u001b[0m\n\n"}
{"$message_type":"diagnostic","message":"struct `DashboardClient` is never constructed","code":{"code":"dead_code","explanation":null},"level":"warning","spans":[{"file_name":"src/dashboard/mod.rs","byte_start":887,"byte_end":902,"line_start":36,"line_end":36,"column_start":8,"column_end":23,"is_primary":true,"text":[{"text":"struct DashboardClient {","highlight_start":8,"highlight_end":23}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[],"rendered":"\u001b[1m\u001b[33mwarning\u001b[0m\u001b[1m: struct `DashboardClient` is never constructed\u001b[0m\n \u001b[1m\u001b[94m--> \u001b[0msrc/dashboard/mod.rs:36:8\n \u001b[1m\u001b[94m|\u001b[0m\n\u001b[1m\u001b[94m36\u001b[0m \u001b[1m\u001b[94m|\u001b[0m struct DashboardClient {\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[33m^^^^^^^^^^^^^^^\u001b[0m\n\n"}
{"$message_type":"diagnostic","message":"struct `DashboardProvider` is never constructed","code":{"code":"dead_code","explanation":null},"level":"warning","spans":[{"file_name":"src/dashboard/mod.rs","byte_start":1109,"byte_end":1126,"line_start":47,"line_end":47,"column_start":8,"column_end":25,"is_primary":true,"text":[{"text":"struct DashboardProvider {","highlight_start":8,"highlight_end":25}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[],"rendered":"\u001b[1m\u001b[33mwarning\u001b[0m\u001b[1m: struct `DashboardProvider` is never constructed\u001b[0m\n \u001b[1m\u001b[94m--> \u001b[0msrc/dashboard/mod.rs:47:8\n \u001b[1m\u001b[94m|\u001b[0m\n\u001b[1m\u001b[94m47\u001b[0m \u001b[1m\u001b[94m|\u001b[0m struct DashboardProvider {\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[33m^^^^^^^^^^^^^^^^^\u001b[0m\n\n"}
{"$message_type":"diagnostic","message":"struct `DashboardRequest` is never constructed","code":{"code":"dead_code","explanation":null},"level":"warning","spans":[{"file_name":"src/dashboard/mod.rs","byte_start":1314,"byte_end":1330,"line_start":57,"line_end":57,"column_start":8,"column_end":24,"is_primary":true,"text":[{"text":"struct DashboardRequest {","highlight_start":8,"highlight_end":24}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[],"rendered":"\u001b[1m\u001b[33mwarning\u001b[0m\u001b[1m: struct `DashboardRequest` is never constructed\u001b[0m\n \u001b[1m\u001b[94m--> \u001b[0msrc/dashboard/mod.rs:57:8\n \u001b[1m\u001b[94m|\u001b[0m\n\u001b[1m\u001b[94m57\u001b[0m \u001b[1m\u001b[94m|\u001b[0m struct DashboardRequest {\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[33m^^^^^^^^^^^^^^^^\u001b[0m\n\n"}
{"$message_type":"diagnostic","message":"struct `DashboardLog` is never constructed","code":{"code":"dead_code","explanation":null},"level":"warning","spans":[{"file_name":"src/dashboard/mod.rs","byte_start":1543,"byte_end":1555,"line_start":69,"line_end":69,"column_start":8,"column_end":20,"is_primary":true,"text":[{"text":"struct DashboardLog {","highlight_start":8,"highlight_end":20}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[],"rendered":"\u001b[1m\u001b[33mwarning\u001b[0m\u001b[1m: struct `DashboardLog` is never constructed\u001b[0m\n \u001b[1m\u001b[94m--> \u001b[0msrc/dashboard/mod.rs:69:8\n \u001b[1m\u001b[94m|\u001b[0m\n\u001b[1m\u001b[94m69\u001b[0m \u001b[1m\u001b[94m|\u001b[0m struct DashboardLog {\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[33m^^^^^^^^^^^^\u001b[0m\n\n"}
{"$message_type":"diagnostic","message":"function `mask_token` is never used","code":{"code":"dead_code","explanation":null},"level":"warning","spans":[{"file_name":"src/dashboard/mod.rs","byte_start":19759,"byte_end":19769,"line_start":635,"line_end":635,"column_start":4,"column_end":14,"is_primary":true,"text":[{"text":"fn mask_token(token: &str) -> String {","highlight_start":4,"highlight_end":14}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[],"rendered":"\u001b[1m\u001b[33mwarning\u001b[0m\u001b[1m: function `mask_token` is never used\u001b[0m\n \u001b[1m\u001b[94m--> \u001b[0msrc/dashboard/mod.rs:635:4\n \u001b[1m\u001b[94m|\u001b[0m\n\u001b[1m\u001b[94m635\u001b[0m \u001b[1m\u001b[94m|\u001b[0m fn mask_token(token: &str) -> String {\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[33m^^^^^^^^^^\u001b[0m\n\n"}
{"$message_type":"diagnostic","message":"struct `RequestLog` is never constructed","code":{"code":"dead_code","explanation":null},"level":"warning","spans":[{"file_name":"src/logging/mod.rs","byte_start":172,"byte_end":182,"line_start":9,"line_end":9,"column_start":12,"column_end":22,"is_primary":true,"text":[{"text":"pub struct RequestLog {","highlight_start":12,"highlight_end":22}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[],"rendered":"\u001b[1m\u001b[33mwarning\u001b[0m\u001b[1m: struct `RequestLog` is never constructed\u001b[0m\n \u001b[1m\u001b[94m--> \u001b[0msrc/logging/mod.rs:9:12\n \u001b[1m\u001b[94m|\u001b[0m\n\u001b[1m\u001b[94m9\u001b[0m \u001b[1m\u001b[94m|\u001b[0m pub struct RequestLog {\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[33m^^^^^^^^^^\u001b[0m\n\n"}
{"$message_type":"diagnostic","message":"struct `RequestLogger` is never constructed","code":{"code":"dead_code","explanation":null},"level":"warning","spans":[{"file_name":"src/logging/mod.rs","byte_start":596,"byte_end":609,"line_start":25,"line_end":25,"column_start":12,"column_end":25,"is_primary":true,"text":[{"text":"pub struct RequestLogger {","highlight_start":12,"highlight_end":25}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[],"rendered":"\u001b[1m\u001b[33mwarning\u001b[0m\u001b[1m: struct `RequestLogger` is never constructed\u001b[0m\n \u001b[1m\u001b[94m--> \u001b[0msrc/logging/mod.rs:25:12\n \u001b[1m\u001b[94m|\u001b[0m\n\u001b[1m\u001b[94m25\u001b[0m \u001b[1m\u001b[94m|\u001b[0m pub struct RequestLogger {\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[33m^^^^^^^^^^^^^\u001b[0m\n\n"}
{"$message_type":"diagnostic","message":"associated items `new`, `log_request`, and `insert_log` are never used","code":{"code":"dead_code","explanation":null},"level":"warning","spans":[{"file_name":"src/logging/mod.rs","byte_start":640,"byte_end":658,"line_start":29,"line_end":29,"column_start":1,"column_end":19,"is_primary":false,"text":[{"text":"impl RequestLogger {","highlight_start":1,"highlight_end":19}],"label":"associated items in this implementation","suggested_replacement":null,"suggestion_applicability":null,"expansion":null},{"file_name":"src/logging/mod.rs","byte_start":672,"byte_end":675,"line_start":30,"line_end":30,"column_start":12,"column_end":15,"is_primary":true,"text":[{"text":" pub fn new(db_pool: SqlitePool) -> Self {","highlight_start":12,"highlight_end":15}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null},{"file_name":"src/logging/mod.rs","byte_start":811,"byte_end":822,"line_start":35,"line_end":35,"column_start":12,"column_end":23,"is_primary":true,"text":[{"text":" pub fn log_request(&self, log: RequestLog) {","highlight_start":12,"highlight_end":23}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null},{"file_name":"src/logging/mod.rs","byte_start":1217,"byte_end":1227,"line_start":47,"line_end":47,"column_start":14,"column_end":24,"is_primary":true,"text":[{"text":" async fn insert_log(pool: &SqlitePool, log: RequestLog) -> Result<(), sqlx::Error> {","highlight_start":14,"highlight_end":24}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[],"rendered":"\u001b[1m\u001b[33mwarning\u001b[0m\u001b[1m: associated items `new`, `log_request`, and `insert_log` are never used\u001b[0m\n \u001b[1m\u001b[94m--> \u001b[0msrc/logging/mod.rs:30:12\n \u001b[1m\u001b[94m|\u001b[0m\n\u001b[1m\u001b[94m29\u001b[0m \u001b[1m\u001b[94m|\u001b[0m impl RequestLogger {\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[94m------------------\u001b[0m \u001b[1m\u001b[94massociated items in this implementation\u001b[0m\n\u001b[1m\u001b[94m30\u001b[0m \u001b[1m\u001b[94m|\u001b[0m pub fn new(db_pool: SqlitePool) -> Self {\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[33m^^^\u001b[0m\n\u001b[1m\u001b[94m...\u001b[0m\n\u001b[1m\u001b[94m35\u001b[0m \u001b[1m\u001b[94m|\u001b[0m pub fn log_request(&self, log: RequestLog) {\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[33m^^^^^^^^^^^\u001b[0m\n\u001b[1m\u001b[94m...\u001b[0m\n\u001b[1m\u001b[94m47\u001b[0m \u001b[1m\u001b[94m|\u001b[0m async fn insert_log(pool: &SqlitePool, log: RequestLog) -> Result<(), sqlx::Error> {\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[33m^^^^^^^^^^\u001b[0m\n\n"}
{"$message_type":"diagnostic","message":"struct `LoggingContext` is never constructed","code":{"code":"dead_code","explanation":null},"level":"warning","spans":[{"file_name":"src/logging/mod.rs","byte_start":4002,"byte_end":4016,"line_start":125,"line_end":125,"column_start":12,"column_end":26,"is_primary":true,"text":[{"text":"pub struct LoggingContext {","highlight_start":12,"highlight_end":26}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[],"rendered":"\u001b[1m\u001b[33mwarning\u001b[0m\u001b[1m: struct `LoggingContext` is never constructed\u001b[0m\n \u001b[1m\u001b[94m--> \u001b[0msrc/logging/mod.rs:125:12\n \u001b[1m\u001b[94m|\u001b[0m\n\u001b[1m\u001b[94m125\u001b[0m \u001b[1m\u001b[94m|\u001b[0m pub struct LoggingContext {\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[33m^^^^^^^^^^^^^^\u001b[0m\n\n"}
{"$message_type":"diagnostic","message":"associated items `new`, `with_token_counts`, `with_cost`, `with_images`, and `with_error` are never used","code":{"code":"dead_code","explanation":null},"level":"warning","spans":[{"file_name":"src/logging/mod.rs","byte_start":4268,"byte_end":4287,"line_start":137,"line_end":137,"column_start":1,"column_end":20,"is_primary":false,"text":[{"text":"impl LoggingContext {","highlight_start":1,"highlight_end":20}],"label":"associated items in this implementation","suggested_replacement":null,"suggestion_applicability":null,"expansion":null},{"file_name":"src/logging/mod.rs","byte_start":4301,"byte_end":4304,"line_start":138,"line_end":138,"column_start":12,"column_end":15,"is_primary":true,"text":[{"text":" pub fn new(client_id: String, provider_name: String, model: String) -> Self {","highlight_start":12,"highlight_end":15}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null},{"file_name":"src/logging/mod.rs","byte_start":4660,"byte_end":4677,"line_start":152,"line_end":152,"column_start":12,"column_end":29,"is_primary":true,"text":[{"text":" pub fn with_token_counts(mut self, prompt_tokens: u32, completion_tokens: u32) -> Self {","highlight_start":12,"highlight_end":29}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null},{"file_name":"src/logging/mod.rs","byte_start":4936,"byte_end":4945,"line_start":159,"line_end":159,"column_start":12,"column_end":21,"is_primary":true,"text":[{"text":" pub fn with_cost(mut self, cost: f64) -> Self {","highlight_start":12,"highlight_end":21}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null},{"file_name":"src/logging/mod.rs","byte_start":5038,"byte_end":5049,"line_start":164,"line_end":164,"column_start":12,"column_end":23,"is_primary":true,"text":[{"text":" pub fn with_images(mut self, has_images: bool) -> Self {","highlight_start":12,"highlight_end":23}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null},{"file_name":"src/logging/mod.rs","byte_start":5161,"byte_end":5171,"line_start":169,"line_end":169,"column_start":12,"column_end":22,"is_primary":true,"text":[{"text":" pub fn with_error(mut self, error: AppError) -> Self {","highlight_start":12,"highlight_end":22}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[],"rendered":"\u001b[1m\u001b[33mwarning\u001b[0m\u001b[1m: associated items `new`, `with_token_counts`, `with_cost`, `with_images`, and `with_error` are never used\u001b[0m\n \u001b[1m\u001b[94m--> \u001b[0msrc/logging/mod.rs:138:12\n \u001b[1m\u001b[94m|\u001b[0m\n\u001b[1m\u001b[94m137\u001b[0m \u001b[1m\u001b[94m|\u001b[0m impl LoggingContext {\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[94m-------------------\u001b[0m \u001b[1m\u001b[94massociated items in this implementation\u001b[0m\n\u001b[1m\u001b[94m138\u001b[0m \u001b[1m\u001b[94m|\u001b[0m pub fn new(client_id: String, provider_name: String, model: String) -> Self {\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[33m^^^\u001b[0m\n\u001b[1m\u001b[94m...\u001b[0m\n\u001b[1m\u001b[94m152\u001b[0m \u001b[1m\u001b[94m|\u001b[0m pub fn with_token_counts(mut self, prompt_tokens: u32, completion_tokens: u32) -> Self {\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[33m^^^^^^^^^^^^^^^^^\u001b[0m\n\u001b[1m\u001b[94m...\u001b[0m\n\u001b[1m\u001b[94m159\u001b[0m \u001b[1m\u001b[94m|\u001b[0m pub fn with_cost(mut self, cost: f64) -> Self {\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[33m^^^^^^^^^\u001b[0m\n\u001b[1m\u001b[94m...\u001b[0m\n\u001b[1m\u001b[94m164\u001b[0m \u001b[1m\u001b[94m|\u001b[0m pub fn with_images(mut self, has_images: bool) -> Self {\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[33m^^^^^^^^^^^\u001b[0m\n\u001b[1m\u001b[94m...\u001b[0m\n\u001b[1m\u001b[94m169\u001b[0m \u001b[1m\u001b[94m|\u001b[0m pub fn with_error(mut self, error: AppError) -> Self {\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[33m^^^^^^^^^^\u001b[0m\n\n"}
{"$message_type":"diagnostic","message":"field `client_manager` is never read","code":{"code":"dead_code","explanation":null},"level":"warning","spans":[{"file_name":"src/state/mod.rs","byte_start":205,"byte_end":213,"line_start":10,"line_end":10,"column_start":12,"column_end":20,"is_primary":false,"text":[{"text":"pub struct AppState {","highlight_start":12,"highlight_end":20}],"label":"field in this struct","suggested_replacement":null,"suggestion_applicability":null,"expansion":null},{"file_name":"src/state/mod.rs","byte_start":343,"byte_end":357,"line_start":14,"line_end":14,"column_start":9,"column_end":23,"is_primary":true,"text":[{"text":" pub client_manager: Arc<ClientManager>,","highlight_start":9,"highlight_end":23}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[{"message":"`AppState` has a derived impl for the trait `Clone`, but this is intentionally ignored during dead code analysis","code":null,"level":"note","spans":[],"children":[],"rendered":null}],"rendered":"\u001b[1m\u001b[33mwarning\u001b[0m\u001b[1m: field `client_manager` is never read\u001b[0m\n \u001b[1m\u001b[94m--> \u001b[0msrc/state/mod.rs:14:9\n \u001b[1m\u001b[94m|\u001b[0m\n\u001b[1m\u001b[94m10\u001b[0m \u001b[1m\u001b[94m|\u001b[0m pub struct AppState {\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[94m--------\u001b[0m \u001b[1m\u001b[94mfield in this struct\u001b[0m\n\u001b[1m\u001b[94m...\u001b[0m\n\u001b[1m\u001b[94m14\u001b[0m \u001b[1m\u001b[94m|\u001b[0m pub client_manager: Arc<ClientManager>,\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[33m^^^^^^^^^^^^^^\u001b[0m\n \u001b[1m\u001b[94m|\u001b[0m\n \u001b[1m\u001b[94m= \u001b[0m\u001b[1mnote\u001b[0m: `AppState` has a derived impl for the trait `Clone`, but this is intentionally ignored during dead code analysis\n\n"}
{"$message_type":"diagnostic","message":"enum `ImageInput` is never used","code":{"code":"dead_code","explanation":null},"level":"warning","spans":[{"file_name":"src/multimodal/mod.rs","byte_start":440,"byte_end":450,"line_start":15,"line_end":15,"column_start":10,"column_end":20,"is_primary":true,"text":[{"text":"pub enum ImageInput {","highlight_start":10,"highlight_end":20}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[],"rendered":"\u001b[1m\u001b[33mwarning\u001b[0m\u001b[1m: enum `ImageInput` is never used\u001b[0m\n \u001b[1m\u001b[94m--> \u001b[0msrc/multimodal/mod.rs:15:10\n \u001b[1m\u001b[94m|\u001b[0m\n\u001b[1m\u001b[94m15\u001b[0m \u001b[1m\u001b[94m|\u001b[0m pub enum ImageInput {\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[33m^^^^^^^^^^\u001b[0m\n\n"}
{"$message_type":"diagnostic","message":"multiple associated items are never used","code":{"code":"dead_code","explanation":null},"level":"warning","spans":[{"file_name":"src/multimodal/mod.rs","byte_start":725,"byte_end":740,"line_start":30,"line_end":30,"column_start":1,"column_end":16,"is_primary":false,"text":[{"text":"impl ImageInput {","highlight_start":1,"highlight_end":16}],"label":"associated items in this implementation","suggested_replacement":null,"suggestion_applicability":null,"expansion":null},{"file_name":"src/multimodal/mod.rs","byte_start":799,"byte_end":810,"line_start":32,"line_end":32,"column_start":12,"column_end":23,"is_primary":true,"text":[{"text":" pub fn from_base64(data: String, mime_type: String) -> Self {","highlight_start":12,"highlight_end":23}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null},{"file_name":"src/multimodal/mod.rs","byte_start":952,"byte_end":960,"line_start":37,"line_end":37,"column_start":12,"column_end":20,"is_primary":true,"text":[{"text":" pub fn from_url(url: String) -> Self {","highlight_start":12,"highlight_end":20}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null},{"file_name":"src/multimodal/mod.rs","byte_start":1070,"byte_end":1080,"line_start":42,"line_end":42,"column_start":12,"column_end":22,"is_primary":true,"text":[{"text":" pub fn from_bytes(data: Vec<u8>, mime_type: String) -> Self {","highlight_start":12,"highlight_end":22}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null},{"file_name":"src/multimodal/mod.rs","byte_start":1222,"byte_end":1231,"line_start":47,"line_end":47,"column_start":12,"column_end":21,"is_primary":true,"text":[{"text":" pub fn mime_type(&self) -> Option<&str> {","highlight_start":12,"highlight_end":21}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null},{"file_name":"src/multimodal/mod.rs","byte_start":1516,"byte_end":1525,"line_start":56,"line_end":56,"column_start":18,"column_end":27,"is_primary":true,"text":[{"text":" pub async fn to_base64(&self) -> Result<(String, String)> {","highlight_start":18,"highlight_end":27}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null},{"file_name":"src/multimodal/mod.rs","byte_start":2927,"byte_end":2941,"line_start":90,"line_end":90,"column_start":18,"column_end":32,"is_primary":true,"text":[{"text":" pub async fn get_dimensions(&self) -> Result<(u32, u32)> {","highlight_start":18,"highlight_end":32}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null},{"file_name":"src/multimodal/mod.rs","byte_start":3637,"byte_end":3645,"line_start":107,"line_end":107,"column_start":18,"column_end":26,"is_primary":true,"text":[{"text":" pub async fn validate(&self, max_size_mb: f64) -> Result<()> {","highlight_start":18,"highlight_end":26}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[],"rendered":"\u001b[1m\u001b[33mwarning\u001b[0m\u001b[1m: multiple associated items are never used\u001b[0m\n \u001b[1m\u001b[94m--> \u001b[0msrc/multimodal/mod.rs:32:12\n \u001b[1m\u001b[94m|\u001b[0m\n \u001b[1m\u001b[94m30\u001b[0m \u001b[1m\u001b[94m|\u001b[0m impl ImageInput {\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[94m---------------\u001b[0m \u001b[1m\u001b[94massociated items in this implementation\u001b[0m\n \u001b[1m\u001b[94m31\u001b[0m \u001b[1m\u001b[94m|\u001b[0m /// Create ImageInput from base64 string\n \u001b[1m\u001b[94m32\u001b[0m \u001b[1m\u001b[94m|\u001b[0m pub fn from_base64(data: String, mime_type: String) -> Self {\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[33m^^^^^^^^^^^\u001b[0m\n\u001b[1m\u001b[94m...\u001b[0m\n \u001b[1m\u001b[94m37\u001b[0m \u001b[1m\u001b[94m|\u001b[0m pub fn from_url(url: String) -> Self {\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[33m^^^^^^^^\u001b[0m\n\u001b[1m\u001b[94m...\u001b[0m\n \u001b[1m\u001b[94m42\u001b[0m \u001b[1m\u001b[94m|\u001b[0m pub fn from_bytes(data: Vec<u8>, mime_type: String) -> Self {\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[33m^^^^^^^^^^\u001b[0m\n\u001b[1m\u001b[94m...\u001b[0m\n \u001b[1m\u001b[94m47\u001b[0m \u001b[1m\u001b[94m|\u001b[0m pub fn mime_type(&self) -> Option<&str> {\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[33m^^^^^^^^^\u001b[0m\n\u001b[1m\u001b[94m...\u001b[0m\n \u001b[1m\u001b[94m56\u001b[0m \u001b[1m\u001b[94m|\u001b[0m pub async fn to_base64(&self) -> Result<(String, String)> {\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[33m^^^^^^^^^\u001b[0m\n\u001b[1m\u001b[94m...\u001b[0m\n \u001b[1m\u001b[94m90\u001b[0m \u001b[1m\u001b[94m|\u001b[0m pub async fn get_dimensions(&self) -> Result<(u32, u32)> {\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[33m^^^^^^^^^^^^^^\u001b[0m\n\u001b[1m\u001b[94m...\u001b[0m\n\u001b[1m\u001b[94m107\u001b[0m \u001b[1m\u001b[94m|\u001b[0m pub async fn validate(&self, max_size_mb: f64) -> Result<()> {\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[33m^^^^^^^^\u001b[0m\n\n"}
{"$message_type":"diagnostic","message":"struct `ImageConverter` is never constructed","code":{"code":"dead_code","explanation":null},"level":"warning","spans":[{"file_name":"src/multimodal/mod.rs","byte_start":4740,"byte_end":4754,"line_start":140,"line_end":140,"column_start":12,"column_end":26,"is_primary":true,"text":[{"text":"pub struct ImageConverter;","highlight_start":12,"highlight_end":26}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[],"rendered":"\u001b[1m\u001b[33mwarning\u001b[0m\u001b[1m: struct `ImageConverter` is never constructed\u001b[0m\n \u001b[1m\u001b[94m--> \u001b[0msrc/multimodal/mod.rs:140:12\n \u001b[1m\u001b[94m|\u001b[0m\n\u001b[1m\u001b[94m140\u001b[0m \u001b[1m\u001b[94m|\u001b[0m pub struct ImageConverter;\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[33m^^^^^^^^^^^^^^\u001b[0m\n\n"}
{"$message_type":"diagnostic","message":"associated functions `to_openai_format`, `to_gemini_format`, `to_deepseek_format`, and `model_supports_multimodal` are never used","code":{"code":"dead_code","explanation":null},"level":"warning","spans":[{"file_name":"src/multimodal/mod.rs","byte_start":4757,"byte_end":4776,"line_start":142,"line_end":142,"column_start":1,"column_end":20,"is_primary":false,"text":[{"text":"impl ImageConverter {","highlight_start":1,"highlight_end":20}],"label":"associated functions in this implementation","suggested_replacement":null,"suggestion_applicability":null,"expansion":null},{"file_name":"src/multimodal/mod.rs","byte_start":4846,"byte_end":4862,"line_start":144,"line_end":144,"column_start":18,"column_end":34,"is_primary":true,"text":[{"text":" pub async fn to_openai_format(image: &ImageInput) -> Result<serde_json::Value> {","highlight_start":18,"highlight_end":34}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null},{"file_name":"src/multimodal/mod.rs","byte_start":5446,"byte_end":5462,"line_start":160,"line_end":160,"column_start":18,"column_end":34,"is_primary":true,"text":[{"text":" pub async fn to_gemini_format(image: &ImageInput) -> Result<serde_json::Value> {","highlight_start":18,"highlight_end":34}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null},{"file_name":"src/multimodal/mod.rs","byte_start":5875,"byte_end":5893,"line_start":173,"line_end":173,"column_start":18,"column_end":36,"is_primary":true,"text":[{"text":" pub async fn to_deepseek_format(image: &ImageInput) -> Result<serde_json::Value> {","highlight_start":18,"highlight_end":36}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null},{"file_name":"src/multimodal/mod.rs","byte_start":6131,"byte_end":6156,"line_start":179,"line_end":179,"column_start":12,"column_end":37,"is_primary":true,"text":[{"text":" pub fn model_supports_multimodal(model: &str) -> bool {","highlight_start":12,"highlight_end":37}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[],"rendered":"\u001b[1m\u001b[33mwarning\u001b[0m\u001b[1m: associated functions `to_openai_format`, `to_gemini_format`, `to_deepseek_format`, and `model_supports_multimodal` are never used\u001b[0m\n \u001b[1m\u001b[94m--> \u001b[0msrc/multimodal/mod.rs:144:18\n \u001b[1m\u001b[94m|\u001b[0m\n\u001b[1m\u001b[94m142\u001b[0m \u001b[1m\u001b[94m|\u001b[0m impl ImageConverter {\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[94m-------------------\u001b[0m \u001b[1m\u001b[94massociated functions in this implementation\u001b[0m\n\u001b[1m\u001b[94m143\u001b[0m \u001b[1m\u001b[94m|\u001b[0m /// Convert image to OpenAI-compatible format\n\u001b[1m\u001b[94m144\u001b[0m \u001b[1m\u001b[94m|\u001b[0m pub async fn to_openai_format(image: &ImageInput) -> Result<serde_json::Value> {\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[33m^^^^^^^^^^^^^^^^\u001b[0m\n\u001b[1m\u001b[94m...\u001b[0m\n\u001b[1m\u001b[94m160\u001b[0m \u001b[1m\u001b[94m|\u001b[0m pub async fn to_gemini_format(image: &ImageInput) -> Result<serde_json::Value> {\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[33m^^^^^^^^^^^^^^^^\u001b[0m\n\u001b[1m\u001b[94m...\u001b[0m\n\u001b[1m\u001b[94m173\u001b[0m \u001b[1m\u001b[94m|\u001b[0m pub async fn to_deepseek_format(image: &ImageInput) -> Result<serde_json::Value> {\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[33m^^^^^^^^^^^^^^^^^^\u001b[0m\n\u001b[1m\u001b[94m...\u001b[0m\n\u001b[1m\u001b[94m179\u001b[0m \u001b[1m\u001b[94m|\u001b[0m pub fn model_supports_multimodal(model: &str) -> bool {\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[33m^^^^^^^^^^^^^^^^^^^^^^^^^\u001b[0m\n\n"}
{"$message_type":"diagnostic","message":"function `parse_openai_content` is never used","code":{"code":"dead_code","explanation":null},"level":"warning","spans":[{"file_name":"src/multimodal/mod.rs","byte_start":6713,"byte_end":6733,"line_start":200,"line_end":200,"column_start":8,"column_end":28,"is_primary":true,"text":[{"text":"pub fn parse_openai_content(content: &serde_json::Value) -> Result<Vec<(String, Option<ImageInput>)>> {","highlight_start":8,"highlight_end":28}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[],"rendered":"\u001b[1m\u001b[33mwarning\u001b[0m\u001b[1m: function `parse_openai_content` is never used\u001b[0m\n \u001b[1m\u001b[94m--> \u001b[0msrc/multimodal/mod.rs:200:8\n \u001b[1m\u001b[94m|\u001b[0m\n\u001b[1m\u001b[94m200\u001b[0m \u001b[1m\u001b[94m|\u001b[0m pub fn parse_openai_content(content: &serde_json::Value) -> Result<Vec<(String, Option<ImageInput>)>> {\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[33m^^^^^^^^^^^^^^^^^^^^\u001b[0m\n\n"}
{"$message_type":"diagnostic","message":"function `parse_data_url` is never used","code":{"code":"dead_code","explanation":null},"level":"warning","spans":[{"file_name":"src/multimodal/mod.rs","byte_start":8984,"byte_end":8998,"line_start":247,"line_end":247,"column_start":4,"column_end":18,"is_primary":true,"text":[{"text":"fn parse_data_url(data_url: &str) -> Option<(String, String)> {","highlight_start":4,"highlight_end":18}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[],"rendered":"\u001b[1m\u001b[33mwarning\u001b[0m\u001b[1m: function `parse_data_url` is never used\u001b[0m\n \u001b[1m\u001b[94m--> \u001b[0msrc/multimodal/mod.rs:247:4\n \u001b[1m\u001b[94m|\u001b[0m\n\u001b[1m\u001b[94m247\u001b[0m \u001b[1m\u001b[94m|\u001b[0m fn parse_data_url(data_url: &str) -> Option<(String, String)> {\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[33m^^^^^^^^^^^^^^\u001b[0m\n\n"}
{"$message_type":"diagnostic","message":"method `state` is never used","code":{"code":"dead_code","explanation":null},"level":"warning","spans":[{"file_name":"src/rate_limiting/mod.rs","byte_start":3325,"byte_end":3352,"line_start":119,"line_end":119,"column_start":1,"column_end":28,"is_primary":false,"text":[{"text":"impl ProviderCircuitBreaker {","highlight_start":1,"highlight_end":28}],"label":"method in this implementation","suggested_replacement":null,"suggestion_applicability":null,"expansion":null},{"file_name":"src/rate_limiting/mod.rs","byte_start":6501,"byte_end":6506,"line_start":204,"line_end":204,"column_start":12,"column_end":17,"is_primary":true,"text":[{"text":" pub fn state(&self) -> CircuitState {","highlight_start":12,"highlight_end":17}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[],"rendered":"\u001b[1m\u001b[33mwarning\u001b[0m\u001b[1m: method `state` is never used\u001b[0m\n \u001b[1m\u001b[94m--> \u001b[0msrc/rate_limiting/mod.rs:204:12\n \u001b[1m\u001b[94m|\u001b[0m\n\u001b[1m\u001b[94m119\u001b[0m \u001b[1m\u001b[94m|\u001b[0m impl ProviderCircuitBreaker {\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[94m---------------------------\u001b[0m \u001b[1m\u001b[94mmethod in this implementation\u001b[0m\n\u001b[1m\u001b[94m...\u001b[0m\n\u001b[1m\u001b[94m204\u001b[0m \u001b[1m\u001b[94m|\u001b[0m pub fn state(&self) -> CircuitState {\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[33m^^^^^\u001b[0m\n\n"}
{"$message_type":"diagnostic","message":"method `get_provider_state` is never used","code":{"code":"dead_code","explanation":null},"level":"warning","spans":[{"file_name":"src/rate_limiting/mod.rs","byte_start":6914,"byte_end":6935,"line_start":219,"line_end":219,"column_start":1,"column_end":22,"is_primary":false,"text":[{"text":"impl RateLimitManager {","highlight_start":1,"highlight_end":22}],"label":"method in this implementation","suggested_replacement":null,"suggestion_applicability":null,"expansion":null},{"file_name":"src/rate_limiting/mod.rs","byte_start":9672,"byte_end":9690,"line_start":291,"line_end":291,"column_start":18,"column_end":36,"is_primary":true,"text":[{"text":" pub async fn get_provider_state(&self, provider_name: &str) -> CircuitState {","highlight_start":18,"highlight_end":36}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[],"rendered":"\u001b[1m\u001b[33mwarning\u001b[0m\u001b[1m: method `get_provider_state` is never used\u001b[0m\n \u001b[1m\u001b[94m--> \u001b[0msrc/rate_limiting/mod.rs:291:18\n \u001b[1m\u001b[94m|\u001b[0m\n\u001b[1m\u001b[94m219\u001b[0m \u001b[1m\u001b[94m|\u001b[0m impl RateLimitManager {\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[94m---------------------\u001b[0m \u001b[1m\u001b[94mmethod in this implementation\u001b[0m\n\u001b[1m\u001b[94m...\u001b[0m\n\u001b[1m\u001b[94m291\u001b[0m \u001b[1m\u001b[94m|\u001b[0m pub async fn get_provider_state(&self, provider_name: &str) -> CircuitState {\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[33m^^^^^^^^^^^^^^^^^^\u001b[0m\n\n"}
{"$message_type":"diagnostic","message":"struct `Client` is never constructed","code":{"code":"dead_code","explanation":null},"level":"warning","spans":[{"file_name":"src/client/mod.rs","byte_start":401,"byte_end":407,"line_start":16,"line_end":16,"column_start":12,"column_end":18,"is_primary":true,"text":[{"text":"pub struct Client {","highlight_start":12,"highlight_end":18}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[],"rendered":"\u001b[1m\u001b[33mwarning\u001b[0m\u001b[1m: struct `Client` is never constructed\u001b[0m\n \u001b[1m\u001b[94m--> \u001b[0msrc/client/mod.rs:16:12\n \u001b[1m\u001b[94m|\u001b[0m\n\u001b[1m\u001b[94m16\u001b[0m \u001b[1m\u001b[94m|\u001b[0m pub struct Client {\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[33m^^^^^^\u001b[0m\n\n"}
{"$message_type":"diagnostic","message":"struct `CreateClientRequest` is never constructed","code":{"code":"dead_code","explanation":null},"level":"warning","spans":[{"file_name":"src/client/mod.rs","byte_start":807,"byte_end":826,"line_start":32,"line_end":32,"column_start":12,"column_end":31,"is_primary":true,"text":[{"text":"pub struct CreateClientRequest {","highlight_start":12,"highlight_end":31}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[],"rendered":"\u001b[1m\u001b[33mwarning\u001b[0m\u001b[1m: struct `CreateClientRequest` is never constructed\u001b[0m\n \u001b[1m\u001b[94m--> \u001b[0msrc/client/mod.rs:32:12\n \u001b[1m\u001b[94m|\u001b[0m\n\u001b[1m\u001b[94m32\u001b[0m \u001b[1m\u001b[94m|\u001b[0m pub struct CreateClientRequest {\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[33m^^^^^^^^^^^^^^^^^^^\u001b[0m\n\n"}
{"$message_type":"diagnostic","message":"struct `UpdateClientRequest` is never constructed","code":{"code":"dead_code","explanation":null},"level":"warning","spans":[{"file_name":"src/client/mod.rs","byte_start":1039,"byte_end":1058,"line_start":41,"line_end":41,"column_start":12,"column_end":31,"is_primary":true,"text":[{"text":"pub struct UpdateClientRequest {","highlight_start":12,"highlight_end":31}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[],"rendered":"\u001b[1m\u001b[33mwarning\u001b[0m\u001b[1m: struct `UpdateClientRequest` is never constructed\u001b[0m\n \u001b[1m\u001b[94m--> \u001b[0msrc/client/mod.rs:41:12\n \u001b[1m\u001b[94m|\u001b[0m\n\u001b[1m\u001b[94m41\u001b[0m \u001b[1m\u001b[94m|\u001b[0m pub struct UpdateClientRequest {\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[33m^^^^^^^^^^^^^^^^^^^\u001b[0m\n\n"}
{"$message_type":"diagnostic","message":"field `db_pool` is never read","code":{"code":"dead_code","explanation":null},"level":"warning","spans":[{"file_name":"src/client/mod.rs","byte_start":1262,"byte_end":1275,"line_start":49,"line_end":49,"column_start":12,"column_end":25,"is_primary":false,"text":[{"text":"pub struct ClientManager {","highlight_start":12,"highlight_end":25}],"label":"field in this struct","suggested_replacement":null,"suggestion_applicability":null,"expansion":null},{"file_name":"src/client/mod.rs","byte_start":1282,"byte_end":1289,"line_start":50,"line_end":50,"column_start":5,"column_end":12,"is_primary":true,"text":[{"text":" db_pool: SqlitePool,","highlight_start":5,"highlight_end":12}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[],"rendered":"\u001b[1m\u001b[33mwarning\u001b[0m\u001b[1m: field `db_pool` is never read\u001b[0m\n \u001b[1m\u001b[94m--> \u001b[0msrc/client/mod.rs:50:5\n \u001b[1m\u001b[94m|\u001b[0m\n\u001b[1m\u001b[94m49\u001b[0m \u001b[1m\u001b[94m|\u001b[0m pub struct ClientManager {\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[94m-------------\u001b[0m \u001b[1m\u001b[94mfield in this struct\u001b[0m\n\u001b[1m\u001b[94m50\u001b[0m \u001b[1m\u001b[94m|\u001b[0m db_pool: SqlitePool,\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[33m^^^^^^^\u001b[0m\n\n"}
{"$message_type":"diagnostic","message":"multiple methods are never used","code":{"code":"dead_code","explanation":null},"level":"warning","spans":[{"file_name":"src/client/mod.rs","byte_start":1306,"byte_end":1324,"line_start":53,"line_end":53,"column_start":1,"column_end":19,"is_primary":false,"text":[{"text":"impl ClientManager {","highlight_start":1,"highlight_end":19}],"label":"methods in this implementation","suggested_replacement":null,"suggestion_applicability":null,"expansion":null},{"file_name":"src/client/mod.rs","byte_start":1450,"byte_end":1463,"line_start":59,"line_end":59,"column_start":18,"column_end":31,"is_primary":true,"text":[{"text":" pub async fn create_client(&self, request: CreateClientRequest) -> Result<Client> {","highlight_start":18,"highlight_end":31}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null},{"file_name":"src/client/mod.rs","byte_start":2339,"byte_end":2349,"line_start":85,"line_end":85,"column_start":18,"column_end":28,"is_primary":true,"text":[{"text":" pub async fn get_client(&self, client_id: &str) -> Result<Option<Client>> {","highlight_start":18,"highlight_end":28}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null},{"file_name":"src/client/mod.rs","byte_start":4121,"byte_end":4134,"line_start":129,"line_end":129,"column_start":18,"column_end":31,"is_primary":true,"text":[{"text":" pub async fn update_client(&self, client_id: &str, request: UpdateClientRequest) -> Result<Option<Client>> {","highlight_start":18,"highlight_end":31}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null},{"file_name":"src/client/mod.rs","byte_start":6529,"byte_end":6541,"line_start":202,"line_end":202,"column_start":18,"column_end":30,"is_primary":true,"text":[{"text":" pub async fn list_clients(&self, limit: Option<i64>, offset: Option<i64>) -> Result<Vec<Client>> {","highlight_start":18,"highlight_end":30}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null},{"file_name":"src/client/mod.rs","byte_start":8501,"byte_end":8514,"line_start":252,"line_end":252,"column_start":18,"column_end":31,"is_primary":true,"text":[{"text":" pub async fn delete_client(&self, client_id: &str) -> Result<bool> {","highlight_start":18,"highlight_end":31}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null},{"file_name":"src/client/mod.rs","byte_start":9072,"byte_end":9091,"line_start":272,"line_end":272,"column_start":18,"column_end":37,"is_primary":true,"text":[{"text":" pub async fn update_client_usage(","highlight_start":18,"highlight_end":37}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null},{"file_name":"src/client/mod.rs","byte_start":9728,"byte_end":9744,"line_start":299,"line_end":299,"column_start":18,"column_end":34,"is_primary":true,"text":[{"text":" pub async fn get_client_usage(&self, client_id: &str) -> Result<Option<(i64, i64, f64)>> {","highlight_start":18,"highlight_end":34}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null},{"file_name":"src/client/mod.rs","byte_start":10485,"byte_end":10500,"line_start":322,"line_end":322,"column_start":18,"column_end":33,"is_primary":true,"text":[{"text":" pub async fn validate_client(&self, client_id: &str) -> Result<bool> {","highlight_start":18,"highlight_end":33}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[],"rendered":"\u001b[1m\u001b[33mwarning\u001b[0m\u001b[1m: multiple methods are never used\u001b[0m\n \u001b[1m\u001b[94m--> \u001b[0msrc/client/mod.rs:59:18\n \u001b[1m\u001b[94m|\u001b[0m\n \u001b[1m\u001b[94m53\u001b[0m \u001b[1m\u001b[94m|\u001b[0m impl ClientManager {\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[94m------------------\u001b[0m \u001b[1m\u001b[94mmethods in this implementation\u001b[0m\n\u001b[1m\u001b[94m...\u001b[0m\n \u001b[1m\u001b[94m59\u001b[0m \u001b[1m\u001b[94m|\u001b[0m pub async fn create_client(&self, request: CreateClientRequest) -> Result<Client> {\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[33m^^^^^^^^^^^^^\u001b[0m\n\u001b[1m\u001b[94m...\u001b[0m\n \u001b[1m\u001b[94m85\u001b[0m \u001b[1m\u001b[94m|\u001b[0m pub async fn get_client(&self, client_id: &str) -> Result<Option<Client>> {\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[33m^^^^^^^^^^\u001b[0m\n\u001b[1m\u001b[94m...\u001b[0m\n\u001b[1m\u001b[94m129\u001b[0m \u001b[1m\u001b[94m|\u001b[0m pub async fn update_client(&self, client_id: &str, request: UpdateClientRequest) -> Result<Option<Client>> {\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[33m^^^^^^^^^^^^^\u001b[0m\n\u001b[1m\u001b[94m...\u001b[0m\n\u001b[1m\u001b[94m202\u001b[0m \u001b[1m\u001b[94m|\u001b[0m pub async fn list_clients(&self, limit: Option<i64>, offset: Option<i64>) -> Result<Vec<Client>> {\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[33m^^^^^^^^^^^^\u001b[0m\n\u001b[1m\u001b[94m...\u001b[0m\n\u001b[1m\u001b[94m252\u001b[0m \u001b[1m\u001b[94m|\u001b[0m pub async fn delete_client(&self, client_id: &str) -> Result<bool> {\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[33m^^^^^^^^^^^^^\u001b[0m\n\u001b[1m\u001b[94m...\u001b[0m\n\u001b[1m\u001b[94m272\u001b[0m \u001b[1m\u001b[94m|\u001b[0m pub async fn update_client_usage(\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[33m^^^^^^^^^^^^^^^^^^^\u001b[0m\n\u001b[1m\u001b[94m...\u001b[0m\n\u001b[1m\u001b[94m299\u001b[0m \u001b[1m\u001b[94m|\u001b[0m pub async fn get_client_usage(&self, client_id: &str) -> Result<Option<(i64, i64, f64)>> {\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[33m^^^^^^^^^^^^^^^^\u001b[0m\n\u001b[1m\u001b[94m...\u001b[0m\n\u001b[1m\u001b[94m322\u001b[0m \u001b[1m\u001b[94m|\u001b[0m pub async fn validate_client(&self, client_id: &str) -> Result<bool> {\n \u001b[1m\u001b[94m|\u001b[0m \u001b[1m\u001b[33m^^^^^^^^^^^^^^^\u001b[0m\n\n"}
{"$message_type":"diagnostic","message":"53 warnings emitted","code":null,"level":"warning","spans":[],"children":[],"rendered":"\u001b[1m\u001b[33mwarning\u001b[0m\u001b[1m: 53 warnings emitted\u001b[0m\n\n"}