小编Nil*_*dré的帖子

在编译时使用 serde_json 反序列化文件

在程序开始时,我从文件中读取数据:

let file = std::fs::File::open("data/games.json").unwrap();
let data: Games = serde_json::from_reader(file).unwrap();
Run Code Online (Sandbox Code Playgroud)

我想知道如何在编译时执行此操作,原因如下:

  1. 性能:运行时无需反序列化
  2. 可移植性:程序可以在任何机器上运行,而不需要包含数据的 json 文件。

我可能还需要提到的是,数据只能读取,这意味着解决方案可以将其存储为静态。

rust deserialization json-deserialization serde

13
推荐指数
2
解决办法
6618
查看次数

元组 Vec 的部分移动

我有 a Vec<(String, i64)>,需要迭代Strings 并移动它们,然后迭代i64s 。

但是,如果我移动Strings,我必须i64再次将 s 存储到另一个 s 中Vec

let l: Vec<_> = l
    .into_iter()
    .map(|(string, int)| {
        drop(string);
        int
    })
    .collect();
                           
for i in l {
    process(i);
}
Run Code Online (Sandbox Code Playgroud)

如何分别迭代Strings 和i64s 而不会产生任何额外的性能开销。

目前我能想到的唯一不会导致额外操作的解决方案就是将Strings 和i64s 分开存储。

move move-semantics rust

10
推荐指数
2
解决办法
775
查看次数

使用“-e”运行时需要为图像提供环境变量

我有一个容器映像,需要设置环境变量才能运行。但如果使用 运行-d,除非容器受到监视,否则运行容器的人不会注意到缺少某些内容。有没有一种方法可以docker [container] run在启动容器之前检查环境变量是否已提供给容器。

environment-variables docker dockerfile

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

如何秘密修改 Javascript 中的函数

我正在尝试修改一个函数:

console.error = function() {
  return "fake";
}
Run Code Online (Sandbox Code Playgroud)

但是,只需运行即可检测到该函数已更改toString()

> console.error.toString()
'function() {\nreturn "fake";\n}'
Run Code Online (Sandbox Code Playgroud)

如果函数没有被修改,'function () { [native code] }'则会返回。

解决方案可以是重写 toString(),但是,通过运行 toString 可以看到 toString 已被重写:

> console.error.toString = () => 'function () { [native code] }';
> console.error.toString()
'function () { [native code] }'
> console.error.toString.toString()
"() => 'function () { [ native code ] }'"
Run Code Online (Sandbox Code Playgroud)

无论如何,是否可以递归重写 toString() 或任何其他方法,以便无法检测到函数被重写?

用例是 WebExtension 修改某些功能,同时使网站尽可能难以检测到它。

javascript

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

如何反序列化包含更多 JSON 字符串的 JSON?

我有一个 JSON 对象,其中包含一个本身就是 JSON 对象的字符串。我怎样才能反序列化它?

我希望能够执行以下操作:

#[derive(Deserialize)]
struct B {
    c: String,
    d: u32,
}

#[derive(Deserialize)]
struct Test {
    a: String,
    b: B,
}

let object: Test = serde_json::from_str(
    r#"
    {
        "a": "string",
        "b": "{\"c\":\"c_string\",\"d\":1234}"
    }
"#,
)
.unwrap();
Run Code Online (Sandbox Code Playgroud)

但这令人恐慌 invalid type: string "{\"c\":\"c_string\",\"d\":1234}", expected struct B

json rust serde

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