#sync #diff #set #update #index #change #syncronisation

update-sync

提供基于差异同步的特性和实现

1 个不稳定版本

0.1.0 2021年3月1日

#95 in #change

MIT/Apache

7KB
115 行(不包括注释)

Update-Sync

Update sync 是一种多编辑器同步策略,旨在客户端/服务器模型中使用。

pub trait UpdateSync {
    fn update_sync(last_base: Self, new_base: Self, set: Self) -> Self;
}

last_base 是客户端所知的最后状态 new_base 是服务器当前所知的状态 set 是客户端希望更改到的状态

此函数返回服务器的新状态,以响应用户。

一般而言,应用的策略如下

if last_base != set {
    set
} else {
    new_base
}

此策略应用于以下类型 u8, u16, u32, u64, u128, usize, i8, i16, i32, i64, i128, isize, f32, f64, bool, char, String, Vec<u8>, Option<T: PartialEq>.

元组、HashMapBTreeMap 将独立更新每个索引或键值。

派生

如果您启用了 derive 功能,则可以派生此行为。

结构体将更新为每个字段独立更新,类似于元组、HashMapBTreeMap

枚举将更新为,如果变体保持不变,则像结构体一样更新。如果变体更改,则 set 变体将覆盖基础变体。

为什么没有实现?

我可能遗漏了它,请提交一个问题,我会修复它。

除非它是向量或类似的东西,在这种情况下,您将需要操作转换,我很乐意为这个实现它,但我不确定最佳策略是什么。如果有人提交一个合理的实现,我会批准它。

我能看到这个的演示吗?

当然,查看 demo.rs

依赖关系

~220KB