#graph-node #observation #notifications #state #mutation #events #connected

graph_event

该项目专注于通过突变事件相互连接的图节点

3 个稳定版本

1.1.1 2023年2月6日
1.0.1 2023年2月5日

科学 中排名 #425

MIT 许可证

125KB
347

欢迎使用 GraphEvent!

图事件 是一个 Rust crate,旨在将状态相互关联。每个状态都将包含在特定节点中,并带有泛型类型值。相应地,节点以两种不同的方式连接:通过通知和观察。

工作原理

通知

首先,任何节点都需要标记其他节点,就像说当它更新时,它会通知它们。如果泛型类型实现了 PartialEq,它将检查节点携带的值是否发生了变化。如果没有,用户系统将不得不通知节点本身它确实已更新。

use  crate::{node::Node};
let  mut  a  =  Node::new(5);
let  b  =  Node::new(10);
let _ =  a.try_mark_for_notification(b.clone(), |a,b| {*b  +=  *a ; true}, crate::util::NotificationPolicy::All);
a.update(11);
assert_eq!(*a,11);
assert_eq!(*b,21);

通知策略

策略 描述 代码中
ALL 通知所有节点。 NotificationPolicy::All
更新较少 通知更新较少的节点。 NotificationPolicy::LessUpdated
更新较多 通知更新较多的节点。 NotificationPolicy::MoreUpdated
更新相同 通知更新相同的节点。 NotificationPolicy::EquallyUpdated
更新不同 通知更新不同的节点。 NotificationPolicy::DifferentlyUpdated
更新相同或更少 通知更新相同或更少的节点。 NotificationPolicy::Equally Or Less Updated
更新相同或更多 通知更新相同或更多的节点。 NotificationPolicy::EquallyOrMoreUpdated

观察

当任何节点标记了另一个节点,并且该节点被更新时,就会发生这种情况。然后,节点之间的关系/连接将保持更新节点的先前状态。

注意: 然而,观察 节点仅在需要时才进行观察。

use  crate::{node::Node};
let  mut  a  =  Node::new(5);
let  mut  b  =  Node::new(10);
let _ =  b.try_mark_for_observation(a.clone(), |a, b| {*b  +=  *a; true });
assert_eq!(*a,5);
a.update(11);
assert_eq!(*a,11);
assert_eq!(*b,10);
b.watch_for_updates();
assert_eq!(*b,21);

文档(1.1.1) crate.io

依赖项