小编Cor*_*nas的帖子

Rust - 使用 serde/reqwest 进行反序列化“无效类型”

我正在尝试反序列化以下 API 响应(为简单起见,我将仅复制数组的两个切片,但实际上它会更大)。为了演示该示例,代码过于简单。

API响应:

[[1609632000000,32185,32968,34873,31975,18908.90248876],[1609545600000,29349.83250154,32183,33292,29000,22012.92431526]]

所以它是一个大数组/向量,由具有六个整数或浮点数的数组/向量组成(它们的位置也会变化)。

为此,我尝试使用泛型,但似乎我丢失了一些东西,因为我无法编译它。

它失败了

thread 'main' panicked at 'called `Result::unwrap()` on an `Err` value: reqwest::Error { kind: Decode, source: Error("invalid type: integer `1609632000000`, expected struct T", line: 1, column: 15) }'

use blocking::Response;
use serde::{Deserialize, Serialize};
use reqwest::{blocking, Error, StatusCode};

struct allData<T> {
    data: Slice<T>
}

#[derive(Debug, Serialize, Deserialize)]
struct Slice<T>{
    data1: T,
    data2: T,
    data3: T,
    data4: T,
    data5: T,
    data6: T,

}


fn get_data() -> Option<Slice> /*I know the signature is not correct, read …
Run Code Online (Sandbox Code Playgroud)

rust deserialization json-deserialization serde reqwest

5
推荐指数
1
解决办法
5066
查看次数

在 HashMap 中,结构体属性作为键,结构体本身作为值

下面是一段更复杂的代码片段,其思想是加载一个 SQL 表并设置一个哈希图,其中一个表结构字段作为键,并将结构保留为值(实现细节并不重要,因为代码工作正常但是,如果我克隆String,数据库中的字符串可以是任意长,并且克隆可能会很昂贵)。

以下代码将失败并显示

error[E0382]: use of partially moved value: `foo`
  --> src/main.rs:24:35
   |
24 |         foo_hashmap.insert(foo.a, foo);
   |                            -----  ^^^ value used here after partial move
   |                            |
   |                            value partially moved here
   |
   = note: partial move occurs because `foo.a` has type `String`, which does not implement the `Copy` trait

For more information about this error, try `rustc --explain E0382`.
Run Code Online (Sandbox Code Playgroud)
error[E0382]: use of partially moved value: `foo`
  --> src/main.rs:24:35
   |
24 |         foo_hashmap.insert(foo.a, foo);
   |                            ----- …
Run Code Online (Sandbox Code Playgroud)

struct rust

1
推荐指数
1
解决办法
1041
查看次数