panicked at 'called `Result::unwrap()` on an `Err` value: Specified version too low to contain data', xxx/xxx.rs:xx:xx

字號+ 編輯: 种花家 修訂: 种花家 來源: 原创 2023-09-11 我要說兩句(0)

本人解釋fast_qr會遇到的常見錯誤之一。

我們實際使用二維碼生成庫時, 多數的二維碼都是網址, 而且不會很短。發生標題所報的錯誤, 主要是因爲扒的都是官網上的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
    }))
}


閲完此文,您的感想如何?
  • 有用

    0

  • 沒用

    0

  • 開心

    0

  • 憤怒

    0

  • 可憐

    0

1.如文章侵犯了您的版權,請發郵件通知本站,該文章將在24小時内刪除;
2.本站標注原創的文章,轉發時煩請注明來源;
3.交流群: 2702237 13835667

相關課文
  • 在rust/axum框架中操作redis

  • rust編譯新的wasm項目操作流程(原文: 編譯 Rust 爲 WebAssembly)

  • rust視圖模板庫askama的使用

  • axum框架當中獲取請求header, 和獲取header指定字段的方法

我要說說
網上賓友點評