pub struct Builder { /* private fields */ }Expand description
A graph under construction. Adding an edge whose ends are not both present is refused
by Builder::finish, not silently dropped: an edge to nothing is a derivation bug.
Implementations§
Source§impl Builder
impl Builder
Sourcepub fn new(
id: &'static str,
title: &'static str,
description: &'static str,
source: impl Into<String>,
) -> Self
pub fn new( id: &'static str, title: &'static str, description: &'static str, source: impl Into<String>, ) -> Self
A builder for a graph with this identity and these words.
Sourcepub fn limit(self, limit: usize) -> Self
pub fn limit(self, limit: usize) -> Self
Take at most limit nodes instead of MAX_NODES.
use majordomus_cli::graph::{Builder, Node};
let thing = |id: &str| Node { id: id.into(), kind: "thing".into(), label: id.into(),
summary: None, route: None, source: None, status: None, external: false,
facts: Default::default() };
let mut b = Builder::new("g", "G", "two things, room for one", "example")
.node_kind("thing", "a thing")
.limit(1);
assert!(b.node(thing("a")));
assert!(!b.node(thing("b")), "no room past the limit");
assert!(b.finish().metadata.truncated);Sourcepub fn node_kind(self, kind: &str, meaning: &str) -> Self
pub fn node_kind(self, kind: &str, meaning: &str) -> Self
Declare what a node kind means. Every kind a node carries must be declared.
Sourcepub fn edge_kind(self, kind: &str, meaning: &str) -> Self
pub fn edge_kind(self, kind: &str, meaning: &str) -> Self
Declare what an edge kind asserts. Every kind an edge carries must be declared.
Sourcepub fn node(&mut self, node: Node) -> bool
pub fn node(&mut self, node: Node) -> bool
Add a node, or keep the one already there. Answers whether there is room for more: a derivation that walks a large collection stops when this says no.
Sourcepub fn edge(&mut self, source: &str, target: &str, kind: &str)
pub fn edge(&mut self, source: &str, target: &str, kind: &str)
Add an edge. Both ends are checked when the graph is finished.
Sourcepub fn finish(self) -> Graph
pub fn finish(self) -> Graph
Finish: drop edges whose ends the derivation never added, sort everything, and compute the invariants.
An edge to a missing node is dropped rather than kept, because a renderer given a dangling edge draws a phantom; the property suite proves no derivation produces one, so the drop is a safety net and not a policy.