4 个版本
0.1.8 | 2021 年 2 月 15 日 |
---|---|
0.1.7 | 2021 年 2 月 4 日 |
0.1.6 | 2021 年 2 月 4 日 |
0.1.0 | 2021 年 2 月 4 日 |
#1084 in 数据结构
14KB
245 行
Deltastruct
一个 Rust 库,用于定义和序列化类型(大多数)的自定义更改。
具有用于生成任何(大多数)自定义结构体的 delta 类型及其实现的属性宏。然后可以将 delta 应用到相应的结构体类型、其字段或序列化/反序列化以供以后使用。
示例
use deltastruct::*;
#[deltastruct]
mod Vector3 {
#[derive(Clone, Copy)]
pub struct Vector3 {
pub x : f64,
pub y : f64,
pub z : f64,
}
impl Vector3 {
fn set(&mut self, other : Vector3) {
// Copy the given vec's components into our own.
self.x = other.x;
self.y = other.y;
self.z = other.z;
}
fn multiply_scalar(&mut self, n : f64) {
// Multiply each component by the given value
self.x *= n;
self.y *= n;
self.z *= n;
}
fn normalize(&mut self) {
// divide each component by the vector's magnitude
let magnitude = (
self.x.powf(2f64)
+ self.y.powf(2f64)
+ self.z.powf(2f64)
).sqrt();
self.x /= magnitude;
self.y /= magnitude;
self.z /= magnitude;
}
}
}
fn main() {
let mut v = Vector3 {
x: 3f64,
y: 6f64,
z: 6f64
};
let v_delta = Vector3Delta::MultiplyScalar(4f64);
v.apply(&v_delta);
v.apply(&v_delta);
assert_eq!(v.x, 48f64);
let v_delta = Vector3Delta::Normalize();
v.apply(&v_delta);
assert_eq!(v.z, 2f64/3f64)
let v_delta = Vector3Delta::X(f64Delta::Set(8f64));
v.apply(&v_delta);
assert_eq!(v.x, 8f64);
}
依赖项
~1.5MB
~38K SLoC