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

graph_event

The project is focused on graph nodes that are connected through mutation events

3 stable releases

1.1.1 Feb 6, 2023
1.0.1 Feb 5, 2023

#438 in Science

MIT license

125KB
347 lines

Welcome to GraphEvent!

The Graph Event is a Rust crate that is designed to relate states to each other. Each state will be contained in a specific node along with a generic type value. In turn, the nodes connect in two different ways: by notification and observation.

How it works

Notifications

First, any node needs to mark other nodes, as if saying that it will notify them whenever it updates. If the generic type implements PartialEq, it will check if there has been a change in the value that the node carries. If not, the user system will have to notify the node itself that it has indeed been updated.

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);

Notification Policy

Policy Description In Code
ALL Notifies all nodes. NotificationPolicy::All
Less Updated Notifies less updated nodes. NotificationPolicy::LessUpdated
More Updated Notifies more updated nodes. NotificationPolicy::MoreUpdated
Equally Updated Notifies us equally updated. NotificationPolicy::EquallyUpdated
Differently Updated Notifies differently updated nodes. NotificationPolicy::DifferentlyUpdated
Equally Or Less Updated Notifies equally or less updated nodes. NotificationPolicy::Equally Or Less Updated
Equally Or More Updated Notifies equally or more updated nodes. NotificationPolicy::EquallyOrMoreUpdated

Observations

This happens when any node has marked another node and that other node is updated. Then, the relationship/connection between the nodes holds the previous state of the updated node.

Note: However, the observing node only observes if it is demanded.

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);

Doc(1.1.1) crate.io

Dependencies