fix: release 编译修复 — FromStr类型 + env borrow + tower limit feature

- CLI: EcLevel::from_str 返回 QrError 而非 String, 修正 map_err 类型注解
- CLI: 密码环境变量 or_else 闭包 borrow 修复 (临时值生命周期)
- Web: tower 添加 limit feature, ConcurrencyLimitLayer 替代不存在的 RateLimitLayer
- Web: QrError 转为 .to_string() 适配 IntoResponse
This commit is contained in:
2026-06-21 16:22:05 +08:00
parent b053272825
commit 5651dbf732
4 changed files with 8 additions and 5 deletions
+5 -3
View File
@@ -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<String>, 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<String> {
.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,