paralegal_policy

Trait IntoIterGlobalNodes

Source
pub trait IntoIterGlobalNodes: Sized + Copy {
    type Iter: Iterator<Item = NodeIndex>;

    // Required methods
    fn iter_nodes(self) -> Self::Iter;
    fn controller_id(self) -> DefId;

    // Provided methods
    fn iter_global_nodes(self) -> GlobalNodeIter<Self> { ... }
    fn extended(self, other: impl IntoIterGlobalNodes) -> Option<NodeCluster> { ... }
    fn to_local_cluster(self) -> NodeCluster { ... }
}
Expand description

This lets us be agnostic whether a primitive (such as flows_to) is called with a GlobalNode or &NodeCluster.

Note that while GlobalNode implements this trait NodeCluster does not do so directly, but it’s reference &NodeCluster does.

Required Associated Types§

Source

type Iter: Iterator<Item = NodeIndex>

The iterator returned by Self::iter_nodes

Required Methods§

Source

fn iter_nodes(self) -> Self::Iter

iterate over the local nodes

Source

fn controller_id(self) -> DefId

The controller id all of these nodes are located in.

Provided Methods§

Source

fn iter_global_nodes(self) -> GlobalNodeIter<Self>

Iterate all nodes as globally identified one’s.

The invariant of this iterator is that all controller_id()s of the nodes in the iterator is the same as self.controller_id().

Source

fn extended(self, other: impl IntoIterGlobalNodes) -> Option<NodeCluster>

A convenience method for gathering multiple node(cluster)s together.

Returns None if the controller id’s don’t match or both iterators are empty.

Source

fn to_local_cluster(self) -> NodeCluster

Collect the iterator into a cluster

Dyn Compatibility§

This trait is not dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.

Implementors§