我們實際使用二維碼生成庫時, 多數的二維碼都是網址, 而且不會很短。發生標題所報的錯誤, 主要是因爲扒的都是官網上的demo, 沒有看裡面限定了複雜度參數。
這裡我們拿一個用於web接口的rust代碼案例舉例:
use fast_qr::{QRBuilder, ECL, Version};
use serde_json::json;
pub async fn some_func(url: String) {
if url.len() > 255 {
return Json(json!({
"code": 31,
"msg": "非法參數"
}));
}
let qrcode = QRBuilder::new(url)
.ecl(ECL::H)
.version(Version::V03)
.build()
.unwrap();
let _svg = SvgBuilder::default()
.shape(Shape::RoundedSquare)
.to_str(&qrcode);
// let str: String = qrcode.to_str();
Json(json!({
"code": 1,
"msg": _svg
}))
}將這段類似的代碼開放出去的話, 雖然能跑通編譯過程, 但只要傳了url字符串超過一定的長度, 就會報錯
Specified version too low to contain data
這裡所說的Specified version (指定版本), 指的就是代碼當中的這一行:
.version(Version::V03)
實際場景中我們無需強行限制, 請去掉版本限制, 那麽健康的代碼如下:
use fast_qr::{QRBuilder, ECL};
use serde_json::json;
pub async fn some_func(url: String) {
if url.len() > 255 {
return Json(json!({
"code": 31,
"msg": "非法參數"
}));
}
let qrcode = QRBuilder::new(url)
.ecl(ECL::H)
// .version(Version::V03) # 注釋掉
.build()
.unwrap();
let _svg = SvgBuilder::default()
.shape(Shape::RoundedSquare)
.to_str(&qrcode);
// let str: String = qrcode.to_str();
Json(json!({
"code": 1,
"msg": _svg
}))
}