#serialization #javascript #serde-json #templating #template #automatic #literals

serialize-to-javascript

使用serde_json将serde::Serialize项序列化为JavaScript字面量模板

3个版本

0.1.2 2024年8月4日
0.1.1 2022年2月8日
0.1.0 2022年2月8日

#252 in 编码

Download history 28606/week @ 2024-05-03 30535/week @ 2024-05-10 30406/week @ 2024-05-17 30792/week @ 2024-05-24 32112/week @ 2024-05-31 28335/week @ 2024-06-07 30541/week @ 2024-06-14 29791/week @ 2024-06-21 31814/week @ 2024-06-28 31295/week @ 2024-07-05 33679/week @ 2024-07-12 33616/week @ 2024-07-19 33418/week @ 2024-07-26 35475/week @ 2024-08-02 37871/week @ 2024-08-09 31531/week @ 2024-08-16

143,664每月下载量
140 个crate中使用 (7 直接使用)

MIT/Apache

16KB
107 代码行

序列化为JavaScript

此库提供了使用serde_json从serde::Serialize到JavaScript的序列化。它还提供了一种非常简单的模板机制,以及 derive宏来自动为合适的类型生成它们。

[dependencies]
serialize-to-javascript = "0.1"

示例

序列化

use serialize_to_javascript::{Options, Serialized};

fn main() -> serialize_to_javascript::Result<()> {
    let raw_value = serde_json::value::to_raw_value("foo'bar")?;
    let serialized = Serialized::new(&raw_value, &Options::default());
    assert_eq!(serialized.into_string(), "JSON.parse('\"foo\\'bar\"')");
    Ok(())
}

模板

main.rs:

use serialize_to_javascript::{default_template, DefaultTemplate, Options, Serialized, Template};

#[derive(Template)]
#[default_template("keygen.js")]
struct Keygen<'a> {
    key: &'a str,
    length: usize,

    #[raw]
    optional_script: &'static str,
}

fn main() -> serialize_to_javascript::Result<()> {
    let keygen = Keygen {
        key: "asdf",
        length: 4,
        optional_script: "console.log('hello, from my optional script')",
    };

    let _output: Serialized = keygen.render_default(&Options::default())?;

    Ok(())
}

keygen.js:

const keygenKey = __TEMPLATE_key__
const keygenLength = __TEMPLATE_length__

__RAW_optional_script__

// app logic, we are ensuring the length is equal to the expected one for some reason
if (keygenKey.length === keygenLength) {
    console.log("okay!")
} else {
    console.error("oh no!")
}

许可证

根据您的选择,受Apache License 2.0MIT许可证许可。

除非您明确声明,否则您提交的任何有意包含在此crate中的贡献,根据Apache-2.0许可证定义,应按上述方式双重许可,不附加任何额外条款或条件。

依赖项

~0.7–1.6MB
~35K SLoC