#[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
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
impl AnyCollection
Sourcepub fn config(&self) -> CollectionConfig
pub fn config(&self) -> CollectionConfig
Returns the collection configuration.
Sourcepub fn point_count(&self) -> usize
pub fn point_count(&self) -> usize
Returns the number of points in the collection.
Sourcepub fn is_metadata_only(&self) -> bool
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.
Sourcepub fn execute_query_str(
&self,
sql: &str,
params: &HashMap<String, Value>,
) -> Result<Vec<SearchResult>>
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.
Sourcepub fn execute_aggregate(
&self,
query: &Query,
params: &HashMap<String, Value>,
) -> Result<Value>
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.
Sourcepub fn diagnostics(&self) -> CollectionDiagnostics
pub fn diagnostics(&self) -> CollectionDiagnostics
Returns collection diagnostics.
Sourcepub fn is_vector(&self) -> bool
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());Sourcepub fn is_metadata(&self) -> bool
pub fn is_metadata(&self) -> bool
Sourcepub fn as_vector(&self) -> Option<&VectorCollection>
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;
}Sourcepub fn as_vector_mut(&mut self) -> Option<&mut VectorCollection>
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.
Sourcepub fn as_graph(&self) -> Option<&GraphCollection>
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();
}Sourcepub fn as_graph_mut(&mut self) -> Option<&mut GraphCollection>
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.
Sourcepub fn as_metadata(&self) -> Option<&MetadataCollection>
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();
}Sourcepub fn as_metadata_mut(&mut self) -> Option<&mut MetadataCollection>
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.
Sourcepub fn into_vector(self) -> Result<VectorCollection, Self>
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());
}
}Sourcepub fn into_graph(self) -> Result<GraphCollection, Self>
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"),
}Sourcepub fn into_metadata(self) -> Result<MetadataCollection, Self>
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"),
}Sourcepub unsafe fn into_vector_unchecked(self) -> VectorCollection
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_vectorfirst and only invoke vector-specific methods on theVectorvariant, 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
impl Clone for AnyCollection
Source§fn clone(&self) -> AnyCollection
fn clone(&self) -> AnyCollection
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreAuto Trait Implementations§
impl Freeze for AnyCollection
impl !RefUnwindSafe for AnyCollection
impl Send for AnyCollection
impl Sync for AnyCollection
impl Unpin for AnyCollection
impl UnsafeUnpin for AnyCollection
impl !UnwindSafe for AnyCollection
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> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
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);