pub struct LabelIndex { /* private fields */ }Expand description
Index mapping label names to the set of node IDs carrying that label.
Each label maps to a RoaringBitmap of node IDs (u32). When a MATCH
query specifies (n:Person), the index returns the bitmap of all
Person-labeled nodes in O(1), avoiding a full payload scan.
§Limitations
RoaringBitmap only supports u32 IDs. Node IDs exceeding u32::MAX
are silently skipped (logged at warn level on insert).
§Example
let mut index = LabelIndex::new();
index.insert("Person", 1);
index.insert("Person", 2);
index.insert("Company", 3);
let persons = index.lookup("Person");
assert!(persons.map_or(false, |b| b.contains(1)));
assert!(persons.map_or(false, |b| b.contains(2)));Implementations§
Source§impl LabelIndex
impl LabelIndex
Sourcepub fn index_from_payload(&mut self, node_id: u64, payload: &Value) -> usize
pub fn index_from_payload(&mut self, node_id: u64, payload: &Value) -> usize
Indexes a node under one or more labels.
Extracts _labels from the JSON payload (expected to be an array of
strings) and inserts the node ID into the bitmap for each label.
Returns the number of labels successfully indexed (0 if payload has
no _labels array or node ID exceeds u32::MAX).
Sourcepub fn insert(&mut self, label: &str, node_id: u64) -> bool
pub fn insert(&mut self, label: &str, node_id: u64) -> bool
Inserts a single (label, node_id) pair into the index.
Returns true if the node was added (new entry). Returns false if
the node ID exceeds u32::MAX or was already present.
Sourcepub fn remove_from_payload(&mut self, node_id: u64, payload: &Value)
pub fn remove_from_payload(&mut self, node_id: u64, payload: &Value)
Removes a node from all label bitmaps.
Call this before removing a node to keep the index consistent.
Sourcepub fn has_large_ids(&self) -> bool
pub fn has_large_ids(&self) -> bool
Returns true if any node with _labels had an ID exceeding u32::MAX
and could not be indexed. Callers should fall back to a full scan when
this is true and the bitmap lookup returns empty results.
Sourcepub fn lookup(&self, label: &str) -> Option<&RoaringBitmap>
pub fn lookup(&self, label: &str) -> Option<&RoaringBitmap>
Returns the bitmap of node IDs carrying the given label.
Returns None if no nodes have been indexed with this label.
Sourcepub fn lookup_intersection(&self, labels: &[String]) -> Option<RoaringBitmap>
pub fn lookup_intersection(&self, labels: &[String]) -> Option<RoaringBitmap>
Returns the intersection of bitmaps for all required labels.
When a MATCH pattern requires multiple labels (e.g., (n:Person:Employee)),
only nodes carrying ALL labels should match. Returns None if any
required label has no indexed nodes (empty intersection).
Sourcepub fn label_count(&self) -> usize
pub fn label_count(&self) -> usize
Returns the number of distinct labels in the index.
Sourcepub fn memory_usage(&self) -> usize
pub fn memory_usage(&self) -> usize
Returns an estimated memory usage in bytes.
Trait Implementations§
Source§impl Debug for LabelIndex
impl Debug for LabelIndex
Source§impl Default for LabelIndex
impl Default for LabelIndex
Source§fn default() -> LabelIndex
fn default() -> LabelIndex
Auto Trait Implementations§
impl Freeze for LabelIndex
impl RefUnwindSafe for LabelIndex
impl Send for LabelIndex
impl Sync for LabelIndex
impl Unpin for LabelIndex
impl UnsafeUnpin for LabelIndex
impl UnwindSafe for LabelIndex
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§impl<T> Paint for Twhere
T: ?Sized,
impl<T> Paint for Twhere
T: ?Sized,
Source§fn fg(&self, value: Color) -> Painted<&T>
fn fg(&self, value: Color) -> Painted<&T>
Returns a styled value derived from self with the foreground set to
value.
This method should be used rarely. Instead, prefer to use color-specific
builder methods like red() and
green(), which have the same functionality but are
pithier.
§Example
Set foreground color to white using fg():
use yansi::{Paint, Color};
painted.fg(Color::White);Set foreground color to white using white().
use yansi::Paint;
painted.white();Source§fn bright_black(&self) -> Painted<&T>
fn bright_black(&self) -> Painted<&T>
Source§fn bright_red(&self) -> Painted<&T>
fn bright_red(&self) -> Painted<&T>
Source§fn bright_green(&self) -> Painted<&T>
fn bright_green(&self) -> Painted<&T>
Source§fn bright_yellow(&self) -> Painted<&T>
fn bright_yellow(&self) -> Painted<&T>
Source§fn bright_blue(&self) -> Painted<&T>
fn bright_blue(&self) -> Painted<&T>
Source§fn bright_magenta(&self) -> Painted<&T>
fn bright_magenta(&self) -> Painted<&T>
Source§fn bright_cyan(&self) -> Painted<&T>
fn bright_cyan(&self) -> Painted<&T>
Source§fn bright_white(&self) -> Painted<&T>
fn bright_white(&self) -> Painted<&T>
Source§fn bg(&self, value: Color) -> Painted<&T>
fn bg(&self, value: Color) -> Painted<&T>
Returns a styled value derived from self with the background set to
value.
This method should be used rarely. Instead, prefer to use color-specific
builder methods like on_red() and
on_green(), which have the same functionality but
are pithier.
§Example
Set background color to red using fg():
use yansi::{Paint, Color};
painted.bg(Color::Red);Set background color to red using on_red().
use yansi::Paint;
painted.on_red();Source§fn on_primary(&self) -> Painted<&T>
fn on_primary(&self) -> Painted<&T>
Source§fn on_magenta(&self) -> Painted<&T>
fn on_magenta(&self) -> Painted<&T>
Source§fn on_bright_black(&self) -> Painted<&T>
fn on_bright_black(&self) -> Painted<&T>
Source§fn on_bright_red(&self) -> Painted<&T>
fn on_bright_red(&self) -> Painted<&T>
Source§fn on_bright_green(&self) -> Painted<&T>
fn on_bright_green(&self) -> Painted<&T>
Source§fn on_bright_yellow(&self) -> Painted<&T>
fn on_bright_yellow(&self) -> Painted<&T>
Source§fn on_bright_blue(&self) -> Painted<&T>
fn on_bright_blue(&self) -> Painted<&T>
Source§fn on_bright_magenta(&self) -> Painted<&T>
fn on_bright_magenta(&self) -> Painted<&T>
Source§fn on_bright_cyan(&self) -> Painted<&T>
fn on_bright_cyan(&self) -> Painted<&T>
Source§fn on_bright_white(&self) -> Painted<&T>
fn on_bright_white(&self) -> Painted<&T>
Source§fn attr(&self, value: Attribute) -> Painted<&T>
fn attr(&self, value: Attribute) -> Painted<&T>
Enables the styling Attribute value.
This method should be used rarely. Instead, prefer to use
attribute-specific builder methods like bold() and
underline(), which have the same functionality
but are pithier.
§Example
Make text bold using attr():
use yansi::{Paint, Attribute};
painted.attr(Attribute::Bold);Make text bold using using bold().
use yansi::Paint;
painted.bold();Source§fn rapid_blink(&self) -> Painted<&T>
fn rapid_blink(&self) -> Painted<&T>
Source§fn quirk(&self, value: Quirk) -> Painted<&T>
fn quirk(&self, value: Quirk) -> Painted<&T>
Enables the yansi Quirk value.
This method should be used rarely. Instead, prefer to use quirk-specific
builder methods like mask() and
wrap(), which have the same functionality but are
pithier.
§Example
Enable wrapping using .quirk():
use yansi::{Paint, Quirk};
painted.quirk(Quirk::Wrap);Enable wrapping using wrap().
use yansi::Paint;
painted.wrap();Source§fn clear(&self) -> Painted<&T>
👎Deprecated since 1.0.1: renamed to resetting() due to conflicts with Vec::clear().
The clear() method will be removed in a future release.
fn clear(&self) -> Painted<&T>
renamed to resetting() due to conflicts with Vec::clear().
The clear() method will be removed in a future release.
Source§fn whenever(&self, value: Condition) -> Painted<&T>
fn whenever(&self, value: Condition) -> Painted<&T>
Conditionally enable styling based on whether the Condition value
applies. Replaces any previous condition.
See the crate level docs for more details.
§Example
Enable styling painted only when both stdout and stderr are TTYs:
use yansi::{Paint, Condition};
painted.red().on_yellow().whenever(Condition::STDOUTERR_ARE_TTY);