diff --git a/Cargo.lock b/Cargo.lock index d740269..122aff8 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4829,6 +4829,7 @@ dependencies = [ "pin-project-lite", "sync_wrapper", "tokio", + "tokio-util", "tower-layer", "tower-service", "tracing", diff --git a/cli/src/main.rs b/cli/src/main.rs index 0af7f1d..c0500e5 100644 --- a/cli/src/main.rs +++ b/cli/src/main.rs @@ -5,6 +5,7 @@ use indicatif::{ProgressBar, ProgressStyle}; use qr_core::qr::{QrCode, QrConfig, VersionMode}; use qr_core::text_builder; use qr_core::version::EcLevel; +use qr_core::QrError; use serde::Deserialize; use std::io::{self, Read}; use std::path::Path; @@ -183,7 +184,7 @@ fn cmd_encode(content: &str, output: &Option, opts: &EncodeOpts) -> Resu text }; - let level: EcLevel = opts.level.parse().map_err(|e: String| anyhow::anyhow!(e))?; + let level: EcLevel = opts.level.parse().map_err(|e: QrError| anyhow::anyhow!(e))?; // --logo 文件路径也需安全检查 if let Some(logo_path) = &opts.logo { check_path(logo_path)?; @@ -261,10 +262,11 @@ fn build_mode(mode: &str, opts: &EncodeOpts, fb: &str) -> Result { .as_deref() .ok_or_else(|| anyhow::anyhow!("WiFi 模式需要 --ssid"))?; // 密码优先从 --password 读取,未提供时尝试环境变量 QRGEN_WIFI_PASSWORD + let env_pwd = std::env::var("QRGEN_WIFI_PASSWORD").ok(); let pwd = opts .password .as_deref() - .or_else(|| std::env::var("QRGEN_WIFI_PASSWORD").ok().as_deref()) + .or_else(|| env_pwd.as_deref()) .unwrap_or(""); Ok(text_builder::build_wifi_text( s, @@ -364,7 +366,7 @@ fn do_batch(file: &str, opts: &EncodeOpts) -> Result<()> { .as_deref() .map(|s| s.parse()) .unwrap_or(Ok(EcLevel::M)) - .map_err(|e: String| anyhow::anyhow!(e))?; + .map_err(|e: QrError| anyhow::anyhow!(e))?; let cfg = QrConfig { level: lvl, version: VersionMode::Auto, diff --git a/web/Cargo.toml b/web/Cargo.toml index 7a13ed9..480ef3d 100644 --- a/web/Cargo.toml +++ b/web/Cargo.toml @@ -12,4 +12,4 @@ tokio = { version = "1", features = ["full"] } serde = { version = "1", features = ["derive"] } serde_json = "1" tower-http = { version = "0.6", features = ["cors", "limit", "set-header"] } -tower = "0.5" +tower = { version = "0.5", features = ["limit"] } diff --git a/web/src/main.rs b/web/src/main.rs index 413652d..226fad4 100644 --- a/web/src/main.rs +++ b/web/src/main.rs @@ -62,7 +62,7 @@ async fn index() -> Html<&'static str> { fn generate_qr_inner(text: &str, level_str: &str, margin: u8, size: u8, fmt: &str) -> impl IntoResponse { let level = match EcLevel::from_str(level_str) { Ok(l) => l, - Err(e) => return (StatusCode::BAD_REQUEST, e).into_response(), + Err(e) => return (StatusCode::BAD_REQUEST, e.to_string()).into_response(), }; // 验证参数范围