Skip to main content

Crate graphrefly_graph

Crate graphrefly_graph 

Source
Expand description

GraphReFly Graph container — sugar layer over graphrefly_core::Core with named namespace, mount/unmount composition, describe() JSON introspection, and observe() sink-style message tap.

§Status

M2 complete: Graph container, mount/unmount, namespace resolution, describe() / observe(), snapshot round-trip (see migration-status D276+). Deferred presentation-tier observe modes stay binding-side; open substrate gaps are listed in docs/porting-deferred.md.

Binding-side / post-1.0 (not this crate): render formats (pretty / mermaid / d2), DS-14 mutate() factory, cross-Core mount.

§Crate lints

#![forbid(unsafe_code)] per workspace policy.

Structs§

EdgeDescribe
Edge between two named nodes (or a named node and an empty-string rendering of an unnamed dep — D301 B, 2026-05-26).
Graph
Graph container — the one Core-free namespace + mount-tree handle (canonical §3, D246).
GraphDescribeOutput
Top-level describe() output (canonical Appendix B JSON schema).
GraphInner
Inner namespace + mount-tree state for one graph level. D246: holds no Core — purely the named namespace, the mounted children, and the namespace-change sinks. D246/S2c/D247: single-owner ⇒ Rc<RefCell<GraphInner>> (the prior Arc<Mutex<…>> was shared-Core-era legacy); the shareable-handle + parent-Weak cycle stays, single-threaded.
GraphObserveAll
All-nodes observe handle. Subscriptions are tied to the set of nodes named at subscribe() call time. D246: no RAII Drop — You MUST call Self::detach(core) (owner-invoked) — these Core subscriptions are opened via raw core.subscribe and are NOT OwnedCore-tracked, so dropping the handle without detach leaks them for the Core lifetime.
GraphObserveAllReactive
Reactive observe_all — auto-subscribes late-added named nodes via the owner-side namespace-change listener, and prunes torn-down nodes via the Core topology sub (the prune unsubscribe is MailboxOp::Defer’d since NodeTornDown fires in-wave — D246 r6). D246 rule 3: no RAII Drop; teardown is the owner-invoked Self::detach(core) — owner-invoked, REQUIRED. The ns-sink is collected by graph.destroy(core); the Core topology sub + fan-out subs are opened via raw core.subscribe* and are NOT OwnedCore-tracked, so detach(core) is the only thing that collects them (dropping the handle without it leaks them).
GraphObserveOne
Single-node observe handle (canonical §3.6.2).
GraphPersistSnapshot
Portable snapshot of a graph’s state.
GraphProfileOptions
Options for Graph::resource_profile.
GraphProfileResult
Aggregate profile returned by Graph::resource_profile. Mirrors the post-D284 narrower packages/parity-tests/impls/types.ts ImplGraphProfileResult shape (no totalValueSizeBytes, no hotspots.byValueSize). JSON keys are camelCase to match the cross-arm parity wire contract.
GraphRemoveAudit
Result of Graph::unmount / Graph::remove.
Hotspots
Top-N hotspots returned by GraphProfileResult::hotspots. D284 dropped the by_value_size ranking (see [crate::profile] module docstring for the rationale). JSON keys are camelCase (bySubscriberCount / byDepCount) to match the cross-arm parity wire contract.
NodeDescribe
Per-node descriptor.
NodeProfile
Per-node profile entry. Mirrors the post-D284 narrower packages/parity-tests/impls/types.ts ImplNodeProfile shape exactly (no valueSizeBytes).
NodeSlice
Per-node state within a snapshot.
ObserveSub
Id pair for a single observe subscription. D246: a plain value (no Drop); detach explicitly via Self::detach or let the embedder’s OwnedCore tear down on owner-thread drop.
ReactiveDescribeHandle
Id-bearing handle for a reactive describe subscription.

Enums§

DescribeValue
Per-node cache value in describe output. Serialized uniformly without an enum tag.
MountError
Errors from mount / mount_new / unmount.
NameError
Errors from name registration.
NodeSnapshotStatus
Lifecycle status stored in a snapshot.
NodeStatus
Canonical Appendix B status enum.
NodeTypeStr
Canonical Appendix B type enum.
OrphanKind
Orphan classification for a NodeProfile. None when the node has at least one subscriber, or when it is a state node (state has no fn to be “idle” about — excluded by construction at profile.ts:129-138).
PathError
Path resolution errors returned by Graph::try_resolve_checked.
RemoveError
Errors from Graph::remove.
SignalKind
Signal kind for Graph::signal (canonical R3.7.1).
SnapshotError
Errors from Graph::restore and Graph::from_snapshot.

Traits§

DebugBindingBoundary
Render handles into JSON-shaped debug values.

Type Aliases§

DescribeSink
Sink type for reactive describe. D272 (2026-05-21): single-owner- thread shape — Rc<dyn Fn> matches D248’s !Send + !Sync Core. The assert_not_impl_any! below locks D248 intent at the type system.
NodeFactory
Factory for auto-hydration mode. D246: receives the embedder’s &Core + the Core-free Graph handle.
SnapshotBuilder
Builder function for Graph::from_snapshot builder mode (D246: &Core + Core-free Graph).