Skip to main content

AnyCollection

Enum AnyCollection 

Source
#[non_exhaustive]
pub enum AnyCollection { Vector(VectorCollection), Graph(GraphCollection), Metadata(MetadataCollection), }
Expand description

Type-erased collection handle for callers that don’t know the collection type.

Dispatches common operations to the inner typed collection via enum match. Zero-cost: no heap allocation, no vtable — just a match arm per variant.

§Examples

use velesdb_core::{AnyCollection, Database};

let db = Database::open("./data")?;
if let Some(any) = db.get_any_collection("docs") {
    // `config()`, `flush()`, `point_count()`, `name()`, `execute_query_str()`
    // dispatch across all variants — safe on every kind.
    println!("{}: {} pts", any.name(), any.point_count());

    // Pattern-match when a variant-specific method is needed.
    match &any {
        AnyCollection::Vector(_) => println!("vector collection"),
        AnyCollection::Graph(_)  => println!("graph collection"),
        AnyCollection::Metadata(_) => println!("metadata collection"),
        _ => println!("unknown variant"),
    }
}

Variants (Non-exhaustive)§

This enum is marked as non-exhaustive
Non-exhaustive enums could have additional variants added in future. Therefore, when matching against variants of non-exhaustive enums, an extra wildcard arm must be added to account for any future variants.
§

Vector(VectorCollection)

A vector collection (HNSW + payload + full-text).

§

Graph(GraphCollection)

A graph collection (edges + optional node embeddings).

§

Metadata(MetadataCollection)

A metadata-only collection (payload, no vectors).

Implementations§

Source§

impl AnyCollection

Source

pub fn config(&self) -> CollectionConfig

Returns the collection configuration.

Source

pub fn flush(&self) -> Result<()>

Flushes all state to disk.

§Errors

Returns an error if any flush operation fails.

Source

pub fn point_count(&self) -> usize

Returns the number of points in the collection.

Source

pub fn is_empty(&self) -> bool

Returns true if the collection contains no points.

Source

pub fn is_metadata_only(&self) -> bool

Returns true if this is a metadata-only collection.

Equivalent to is_metadata — kept for backward compatibility with older call sites.

Source

pub fn name(&self) -> String

Returns the collection name.

Source

pub fn execute_query_str( &self, sql: &str, params: &HashMap<String, Value>, ) -> Result<Vec<SearchResult>>

Executes a raw VelesQL string, parsing it before execution.

§Errors

Returns an error if parsing or execution fails.

Source

pub fn execute_aggregate( &self, query: &Query, params: &HashMap<String, Value>, ) -> Result<Value>

Executes an aggregation query (GROUP BY / COUNT / SUM / AVG / MIN / MAX).

§Errors

Returns an error if the query is invalid or aggregation computation fails.

Source

pub fn diagnostics(&self) -> CollectionDiagnostics

Returns collection diagnostics.

Source

pub fn is_vector(&self) -> bool

Returns true if this collection is the Vector variant.

§Examples
use velesdb_core::{AnyCollection, Database, DistanceMetric};

let db = Database::open("./data")?;
db.create_collection("docs", 768, DistanceMetric::Cosine)?;
let any = db.get_any_collection("docs").expect("exists");
assert!(any.is_vector());
assert!(!any.is_graph());
Source

pub fn is_graph(&self) -> bool

Returns true if this collection is the Graph variant.

§Examples
use velesdb_core::{Database, GraphSchema};

let db = Database::open("./data")?;
db.create_graph_collection("edges", GraphSchema::schemaless())?;
let any = db.get_any_collection("edges").expect("exists");
assert!(any.is_graph());
Source

pub fn is_metadata(&self) -> bool

Returns true if this collection is the Metadata variant.

§Examples
use velesdb_core::Database;

let db = Database::open("./data")?;
db.create_metadata_collection("catalog")?;
let any = db.get_any_collection("catalog").expect("exists");
assert!(any.is_metadata());
Source

pub fn as_vector(&self) -> Option<&VectorCollection>

Returns a shared reference to the inner VectorCollection if this is the Vector variant, or None otherwise.

§Examples
use velesdb_core::{Database, DistanceMetric};

let db = Database::open("./data")?;
db.create_collection("docs", 768, DistanceMetric::Cosine)?;
let any = db.get_any_collection("docs").expect("exists");
if let Some(v) = any.as_vector() {
    let _ = v.config().dimension;
}
Source

pub fn as_vector_mut(&mut self) -> Option<&mut VectorCollection>

Returns an exclusive reference to the inner VectorCollection if this is the Vector variant, or None otherwise.

Source

pub fn as_graph(&self) -> Option<&GraphCollection>

Returns a shared reference to the inner GraphCollection if this is the Graph variant, or None otherwise.

§Examples
use velesdb_core::{Database, GraphSchema};

let db = Database::open("./data")?;
db.create_graph_collection("edges", GraphSchema::schemaless())?;
let any = db.get_any_collection("edges").expect("exists");
if let Some(g) = any.as_graph() {
    let _ = g.edge_count();
}
Source

pub fn as_graph_mut(&mut self) -> Option<&mut GraphCollection>

Returns an exclusive reference to the inner GraphCollection if this is the Graph variant, or None otherwise.

Source

pub fn as_metadata(&self) -> Option<&MetadataCollection>

Returns a shared reference to the inner MetadataCollection if this is the Metadata variant, or None otherwise.

§Examples
use velesdb_core::Database;

let db = Database::open("./data")?;
db.create_metadata_collection("catalog")?;
let any = db.get_any_collection("catalog").expect("exists");
if let Some(m) = any.as_metadata() {
    let _ = m.is_empty();
}
Source

pub fn as_metadata_mut(&mut self) -> Option<&mut MetadataCollection>

Returns an exclusive reference to the inner MetadataCollection if this is the Metadata variant, or None otherwise.

Source

pub fn into_vector(self) -> Result<VectorCollection, Self>

Consumes self and returns the inner VectorCollection if this is the Vector variant.

On the wrong variant, returns Err(self) so callers can recover ownership — mirroring the std Result / TryFrom idiom.

§Errors

Returns the original AnyCollection unchanged when the variant is Graph or Metadata.

§Examples
use velesdb_core::{Database, DistanceMetric};

let db = Database::open("./data")?;
db.create_collection("docs", 768, DistanceMetric::Cosine)?;
let any = db.get_any_collection("docs").expect("exists");
match any.into_vector() {
    Ok(v) => { let _ = v.config().dimension; }
    Err(original) => {
        // wrong variant; `original` still valid
        assert!(!original.is_vector());
    }
}
Source

pub fn into_graph(self) -> Result<GraphCollection, Self>

Consumes self and returns the inner GraphCollection if this is the Graph variant.

On the wrong variant, returns Err(self) so callers can recover ownership.

§Errors

Returns the original AnyCollection unchanged when the variant is Vector or Metadata.

§Examples
use velesdb_core::{Database, GraphSchema};

let db = Database::open("./data")?;
db.create_graph_collection("edges", GraphSchema::schemaless())?;
let any = db.get_any_collection("edges").expect("exists");
match any.into_graph() {
    Ok(graph) => { let _ = graph.edge_count(); }
    Err(_wrong_variant) => unreachable!("edges is a graph collection"),
}
Source

pub fn into_metadata(self) -> Result<MetadataCollection, Self>

Consumes self and returns the inner MetadataCollection if this is the Metadata variant.

On the wrong variant, returns Err(self) so callers can recover ownership.

§Errors

Returns the original AnyCollection unchanged when the variant is Vector or Graph.

§Examples
use velesdb_core::Database;

let db = Database::open("./data")?;
db.create_metadata_collection("catalog")?;
let any = db.get_any_collection("catalog").expect("exists");
match any.into_metadata() {
    Ok(meta) => assert!(meta.is_empty()),
    Err(_wrong_variant) => unreachable!("catalog is a metadata collection"),
}
Source

pub unsafe fn into_vector_unchecked(self) -> VectorCollection

Consumes self and returns a VectorCollection regardless of the underlying variant, re-wrapping the shared inner state.

For the Vector variant this is a straightforward move. For the Graph and Metadata variants this re-wraps the shared Arc<Collection> in the VectorCollection newtype without changing the underlying runtime type — downstream code that invokes vector-specific methods on the result (for example search, upsert, config().dimension > 0) may therefore return empty results or misleading state.

This method exists to support the Python / Mobile / Tauri SDK bindings that expose a single Collection type to users and only invoke the shared surface (config, flush, diagnostics, point_count, execute_query_str) on the result.

§Safety

Calling vector-specific methods on a VectorCollection obtained from a Graph or Metadata variant is not memory-unsafe, but the result is logically unsound: the underlying storage does not hold a homogeneous vector index, and the returned search results are either empty or reflect internal state that was not intended for public consumption.

Callers must either:

  • branch on is_vector first and only invoke vector-specific methods on the Vector variant, or
  • restrict themselves to the methods that all three collection kinds share (config, flush, diagnostics, name, point_count, execute_query_str).

Prefer the safe into_vector (variant-checked, returns Result) when the caller can branch. A proper type-safe refactor that eliminates this method entirely is tracked under the post-seed EPIC documented in docs/ARCHITECTURE.md (finding F2.2 of the pre-seed audit).

§Violation of invariants

The unsafe marker flags the caller contract (only invoke the shared surface on non-Vector variants) even though violating it does not cause undefined behaviour.

Trait Implementations§

Source§

impl Clone for AnyCollection

Source§

fn clone(&self) -> AnyCollection

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts 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 more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts 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 more
Source§

impl<T> Paint for T
where T: ?Sized,

Source§

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 primary(&self) -> Painted<&T>

Returns self with the fg() set to [Color :: Primary].

§Example
println!("{}", value.primary());
Source§

fn fixed(&self, color: u8) -> Painted<&T>

Returns self with the fg() set to [Color :: Fixed].

§Example
println!("{}", value.fixed(color));
Source§

fn rgb(&self, r: u8, g: u8, b: u8) -> Painted<&T>

Returns self with the fg() set to [Color :: Rgb].

§Example
println!("{}", value.rgb(r, g, b));
Source§

fn black(&self) -> Painted<&T>

Returns self with the fg() set to [Color :: Black].

§Example
println!("{}", value.black());
Source§

fn red(&self) -> Painted<&T>

Returns self with the fg() set to [Color :: Red].

§Example
println!("{}", value.red());
Source§

fn green(&self) -> Painted<&T>

Returns self with the fg() set to [Color :: Green].

§Example
println!("{}", value.green());
Source§

fn yellow(&self) -> Painted<&T>

Returns self with the fg() set to [Color :: Yellow].

§Example
println!("{}", value.yellow());
Source§

fn blue(&self) -> Painted<&T>

Returns self with the fg() set to [Color :: Blue].

§Example
println!("{}", value.blue());
Source§

fn magenta(&self) -> Painted<&T>

Returns self with the fg() set to [Color :: Magenta].

§Example
println!("{}", value.magenta());
Source§

fn cyan(&self) -> Painted<&T>

Returns self with the fg() set to [Color :: Cyan].

§Example
println!("{}", value.cyan());
Source§

fn white(&self) -> Painted<&T>

Returns self with the fg() set to [Color :: White].

§Example
println!("{}", value.white());
Source§

fn bright_black(&self) -> Painted<&T>

Returns self with the fg() set to [Color :: BrightBlack].

§Example
println!("{}", value.bright_black());
Source§

fn bright_red(&self) -> Painted<&T>

Returns self with the fg() set to [Color :: BrightRed].

§Example
println!("{}", value.bright_red());
Source§

fn bright_green(&self) -> Painted<&T>

Returns self with the fg() set to [Color :: BrightGreen].

§Example
println!("{}", value.bright_green());
Source§

fn bright_yellow(&self) -> Painted<&T>

Returns self with the fg() set to [Color :: BrightYellow].

§Example
println!("{}", value.bright_yellow());
Source§

fn bright_blue(&self) -> Painted<&T>

Returns self with the fg() set to [Color :: BrightBlue].

§Example
println!("{}", value.bright_blue());
Source§

fn bright_magenta(&self) -> Painted<&T>

Returns self with the fg() set to [Color :: BrightMagenta].

§Example
println!("{}", value.bright_magenta());
Source§

fn bright_cyan(&self) -> Painted<&T>

Returns self with the fg() set to [Color :: BrightCyan].

§Example
println!("{}", value.bright_cyan());
Source§

fn bright_white(&self) -> Painted<&T>

Returns self with the fg() set to [Color :: BrightWhite].

§Example
println!("{}", value.bright_white());
Source§

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>

Returns self with the bg() set to [Color :: Primary].

§Example
println!("{}", value.on_primary());
Source§

fn on_fixed(&self, color: u8) -> Painted<&T>

Returns self with the bg() set to [Color :: Fixed].

§Example
println!("{}", value.on_fixed(color));
Source§

fn on_rgb(&self, r: u8, g: u8, b: u8) -> Painted<&T>

Returns self with the bg() set to [Color :: Rgb].

§Example
println!("{}", value.on_rgb(r, g, b));
Source§

fn on_black(&self) -> Painted<&T>

Returns self with the bg() set to [Color :: Black].

§Example
println!("{}", value.on_black());
Source§

fn on_red(&self) -> Painted<&T>

Returns self with the bg() set to [Color :: Red].

§Example
println!("{}", value.on_red());
Source§

fn on_green(&self) -> Painted<&T>

Returns self with the bg() set to [Color :: Green].

§Example
println!("{}", value.on_green());
Source§

fn on_yellow(&self) -> Painted<&T>

Returns self with the bg() set to [Color :: Yellow].

§Example
println!("{}", value.on_yellow());
Source§

fn on_blue(&self) -> Painted<&T>

Returns self with the bg() set to [Color :: Blue].

§Example
println!("{}", value.on_blue());
Source§

fn on_magenta(&self) -> Painted<&T>

Returns self with the bg() set to [Color :: Magenta].

§Example
println!("{}", value.on_magenta());
Source§

fn on_cyan(&self) -> Painted<&T>

Returns self with the bg() set to [Color :: Cyan].

§Example
println!("{}", value.on_cyan());
Source§

fn on_white(&self) -> Painted<&T>

Returns self with the bg() set to [Color :: White].

§Example
println!("{}", value.on_white());
Source§

fn on_bright_black(&self) -> Painted<&T>

Returns self with the bg() set to [Color :: BrightBlack].

§Example
println!("{}", value.on_bright_black());
Source§

fn on_bright_red(&self) -> Painted<&T>

Returns self with the bg() set to [Color :: BrightRed].

§Example
println!("{}", value.on_bright_red());
Source§

fn on_bright_green(&self) -> Painted<&T>

Returns self with the bg() set to [Color :: BrightGreen].

§Example
println!("{}", value.on_bright_green());
Source§

fn on_bright_yellow(&self) -> Painted<&T>

Returns self with the bg() set to [Color :: BrightYellow].

§Example
println!("{}", value.on_bright_yellow());
Source§

fn on_bright_blue(&self) -> Painted<&T>

Returns self with the bg() set to [Color :: BrightBlue].

§Example
println!("{}", value.on_bright_blue());
Source§

fn on_bright_magenta(&self) -> Painted<&T>

Returns self with the bg() set to [Color :: BrightMagenta].

§Example
println!("{}", value.on_bright_magenta());
Source§

fn on_bright_cyan(&self) -> Painted<&T>

Returns self with the bg() set to [Color :: BrightCyan].

§Example
println!("{}", value.on_bright_cyan());
Source§

fn on_bright_white(&self) -> Painted<&T>

Returns self with the bg() set to [Color :: BrightWhite].

§Example
println!("{}", value.on_bright_white());
Source§

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 bold(&self) -> Painted<&T>

Returns self with the attr() set to [Attribute :: Bold].

§Example
println!("{}", value.bold());
Source§

fn dim(&self) -> Painted<&T>

Returns self with the attr() set to [Attribute :: Dim].

§Example
println!("{}", value.dim());
Source§

fn italic(&self) -> Painted<&T>

Returns self with the attr() set to [Attribute :: Italic].

§Example
println!("{}", value.italic());
Source§

fn underline(&self) -> Painted<&T>

Returns self with the attr() set to [Attribute :: Underline].

§Example
println!("{}", value.underline());

Returns self with the attr() set to [Attribute :: Blink].

§Example
println!("{}", value.blink());

Returns self with the attr() set to [Attribute :: RapidBlink].

§Example
println!("{}", value.rapid_blink());
Source§

fn invert(&self) -> Painted<&T>

Returns self with the attr() set to [Attribute :: Invert].

§Example
println!("{}", value.invert());
Source§

fn conceal(&self) -> Painted<&T>

Returns self with the attr() set to [Attribute :: Conceal].

§Example
println!("{}", value.conceal());
Source§

fn strike(&self) -> Painted<&T>

Returns self with the attr() set to [Attribute :: Strike].

§Example
println!("{}", value.strike());
Source§

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 mask(&self) -> Painted<&T>

Returns self with the quirk() set to [Quirk :: Mask].

§Example
println!("{}", value.mask());
Source§

fn wrap(&self) -> Painted<&T>

Returns self with the quirk() set to [Quirk :: Wrap].

§Example
println!("{}", value.wrap());
Source§

fn linger(&self) -> Painted<&T>

Returns self with the quirk() set to [Quirk :: Linger].

§Example
println!("{}", value.linger());
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.

Returns self with the quirk() set to [Quirk :: Clear].

§Example
println!("{}", value.clear());
Source§

fn resetting(&self) -> Painted<&T>

Returns self with the quirk() set to [Quirk :: Resetting].

§Example
println!("{}", value.resetting());
Source§

fn bright(&self) -> Painted<&T>

Returns self with the quirk() set to [Quirk :: Bright].

§Example
println!("{}", value.bright());
Source§

fn on_bright(&self) -> Painted<&T>

Returns self with the quirk() set to [Quirk :: OnBright].

§Example
println!("{}", value.on_bright());
Source§

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

fn new(self) -> Painted<Self>
where Self: Sized,

Create a new Painted with a default Style. Read more
Source§

fn paint<S>(&self, style: S) -> Painted<&Self>
where S: Into<Style>,

Apply a style wholesale to self. Any previous style is replaced. Read more
Source§

impl<T> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more