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.交流群: PHP+JS聊天群

相关课文
  • 在rust/axum框架中操作redis

  • rust编译新的wasm项目操作流程(原文: 编译 Rust 为 WebAssembly)

  • rust视图模板库askama的使用

  • axum框架当中获取请求header, 和获取header指定字段的方法

我要说说
网上宾友点评