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:
Generated
+1
@@ -4829,6 +4829,7 @@ dependencies = [
|
|||||||
"pin-project-lite",
|
"pin-project-lite",
|
||||||
"sync_wrapper",
|
"sync_wrapper",
|
||||||
"tokio",
|
"tokio",
|
||||||
|
"tokio-util",
|
||||||
"tower-layer",
|
"tower-layer",
|
||||||
"tower-service",
|
"tower-service",
|
||||||
"tracing",
|
"tracing",
|
||||||
|
|||||||
+5
-3
@@ -5,6 +5,7 @@ use indicatif::{ProgressBar, ProgressStyle};
|
|||||||
use qr_core::qr::{QrCode, QrConfig, VersionMode};
|
use qr_core::qr::{QrCode, QrConfig, VersionMode};
|
||||||
use qr_core::text_builder;
|
use qr_core::text_builder;
|
||||||
use qr_core::version::EcLevel;
|
use qr_core::version::EcLevel;
|
||||||
|
use qr_core::QrError;
|
||||||
use serde::Deserialize;
|
use serde::Deserialize;
|
||||||
use std::io::{self, Read};
|
use std::io::{self, Read};
|
||||||
use std::path::Path;
|
use std::path::Path;
|
||||||
@@ -183,7 +184,7 @@ fn cmd_encode(content: &str, output: &Option<String>, opts: &EncodeOpts) -> Resu
|
|||||||
text
|
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 文件路径也需安全检查
|
// --logo 文件路径也需安全检查
|
||||||
if let Some(logo_path) = &opts.logo {
|
if let Some(logo_path) = &opts.logo {
|
||||||
check_path(logo_path)?;
|
check_path(logo_path)?;
|
||||||
@@ -261,10 +262,11 @@ fn build_mode(mode: &str, opts: &EncodeOpts, fb: &str) -> Result<String> {
|
|||||||
.as_deref()
|
.as_deref()
|
||||||
.ok_or_else(|| anyhow::anyhow!("WiFi 模式需要 --ssid"))?;
|
.ok_or_else(|| anyhow::anyhow!("WiFi 模式需要 --ssid"))?;
|
||||||
// 密码优先从 --password 读取,未提供时尝试环境变量 QRGEN_WIFI_PASSWORD
|
// 密码优先从 --password 读取,未提供时尝试环境变量 QRGEN_WIFI_PASSWORD
|
||||||
|
let env_pwd = std::env::var("QRGEN_WIFI_PASSWORD").ok();
|
||||||
let pwd = opts
|
let pwd = opts
|
||||||
.password
|
.password
|
||||||
.as_deref()
|
.as_deref()
|
||||||
.or_else(|| std::env::var("QRGEN_WIFI_PASSWORD").ok().as_deref())
|
.or_else(|| env_pwd.as_deref())
|
||||||
.unwrap_or("");
|
.unwrap_or("");
|
||||||
Ok(text_builder::build_wifi_text(
|
Ok(text_builder::build_wifi_text(
|
||||||
s,
|
s,
|
||||||
@@ -364,7 +366,7 @@ fn do_batch(file: &str, opts: &EncodeOpts) -> Result<()> {
|
|||||||
.as_deref()
|
.as_deref()
|
||||||
.map(|s| s.parse())
|
.map(|s| s.parse())
|
||||||
.unwrap_or(Ok(EcLevel::M))
|
.unwrap_or(Ok(EcLevel::M))
|
||||||
.map_err(|e: String| anyhow::anyhow!(e))?;
|
.map_err(|e: QrError| anyhow::anyhow!(e))?;
|
||||||
let cfg = QrConfig {
|
let cfg = QrConfig {
|
||||||
level: lvl,
|
level: lvl,
|
||||||
version: VersionMode::Auto,
|
version: VersionMode::Auto,
|
||||||
|
|||||||
+1
-1
@@ -12,4 +12,4 @@ tokio = { version = "1", features = ["full"] }
|
|||||||
serde = { version = "1", features = ["derive"] }
|
serde = { version = "1", features = ["derive"] }
|
||||||
serde_json = "1"
|
serde_json = "1"
|
||||||
tower-http = { version = "0.6", features = ["cors", "limit", "set-header"] }
|
tower-http = { version = "0.6", features = ["cors", "limit", "set-header"] }
|
||||||
tower = "0.5"
|
tower = { version = "0.5", features = ["limit"] }
|
||||||
|
|||||||
+1
-1
@@ -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 {
|
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) {
|
let level = match EcLevel::from_str(level_str) {
|
||||||
Ok(l) => l,
|
Ok(l) => l,
|
||||||
Err(e) => return (StatusCode::BAD_REQUEST, e).into_response(),
|
Err(e) => return (StatusCode::BAD_REQUEST, e.to_string()).into_response(),
|
||||||
};
|
};
|
||||||
|
|
||||||
// 验证参数范围
|
// 验证参数范围
|
||||||
|
|||||||
Reference in New Issue
Block a user