3 个版本
使用旧的 Rust 2015
0.3.2 | 2020 年 4 月 16 日 |
---|---|
0.3.1 | 2018 年 4 月 1 日 |
0.3.0 | 2018 年 3 月 19 日 |
在 编码 中排名 #1085
400KB
7.5K SLoC
虽然技术上你可以只使用 serde_json
包并通过中间字符串进行序列化(类似于 sciter::Value::from_str(&serde_json::to_string(<your data>)?)?
),但你也可以在你的数据和 sciter::Value
之间进行直接序列化。
Sciter 值支持的类型
- 布尔型 (
bool
) - 整数型 (
i8
-i32
) - 浮点型 (
f32
-f64
) - 字符串型 (
&str
,String
) - 字节型 (
&[u8]
) - 数组型 (
&[T]
,Vec<T>
) - 对象型(类似于
struct
或HashMap
、BTreeMap
等)
不支持
- 日期
- 货币
- 长度
- 范围
- 持续时间
- 角度
- 颜色
Serde 数据模型支持的类型
-
bool
- 以下整数类型之外的整数类型
-
i64
/u64
- 在 Sciter 中以f64
格式存储的 64 位整数 - 字符串
- 字节数组
- 可选
- 单元(存储为
null
) - 单元结构体(存储为
null
) - 单元变体(也称为
枚举
,仅存储为i32
类型的枚举索引) - newtype 结构体(也称为
结构体 Io(u32)
,存储为底层值) - newtype 变体
- 序列,类似于向量(存储为数组)
- 元组(存储为数组)
- 元组结构体(存储为数组)
- 元组变体
- 映射(存储为映射)
- 结构体(存储为映射)
- 结构体变体
有关参考资料,请参阅 Serde 数据模型。
示例
extern crate sciter;
extern crate sciter_serde;
use sciter::Value;
use sciter_serde::{from_value, to_value};
fn back_and_forth() {
let v: Value = to_value(&true).unwrap();
let b: bool = from_value(&v).unwrap();
assert_eq!(b, true);
}
fn main() {
// bool
let v: Value = to_value(&true).unwrap();
assert!(v.is_bool());
assert_eq!(v, Value::from(true));
// numbers
let v = to_value(&12u32).unwrap();
assert_eq!(v, 12.into());
let v = to_value(& 42.0f64).unwrap();
assert_eq!(v, 42.0f64.into());
// strings
let v = to_value("hello").unwrap();
assert_eq!(v, "hello".into());
// arrays
let a = [1,2,3];
let v = to_value(&a).unwrap();
assert_eq!(v, a.iter().cloned().collect());
// maps
let m = {
use std::collections::BTreeMap;
let mut m = BTreeMap::new();
m.insert("17", 17);
m.insert("42", 42);
m
};
let v = to_value(&m).unwrap();
assert_eq!(v, Value::parse(r#"{ "17": 17, "42": 42 }"#).unwrap());
}
具有派生序列化
#[macro_use]
extern crate serde_derive;
extern crate serde;
extern crate sciter;
extern crate sciter_serde;
use sciter::Value;
use sciter_serde::to_value;
fn main() {
// structs
#[derive(Serialize)]
struct Test {
x: i32,
y: i32,
}
let v = to_value(&Test {x: 1, y: 2}).unwrap();
assert_eq!(v, Value::parse(r#"{ "x": 1, "y": 2 }"#).unwrap());
}
依赖关系
~115–425KB