Skip to main content

zvec_rust_sys/
lib.rs

1//! Raw FFI bindings to the zvec C-API.
2//!
3//! This crate provides low-level Rust bindings to the zvec vector database C library.
4//! It exposes opaque pointer types, constants, and function declarations that mirror
5//! the C API exactly. For a safer, more idiomatic Rust interface, consider using the
6//! higher-level `zvec` crate which wraps these raw bindings.
7//!
8//! # Safety
9//!
10//! All functions in this crate are `unsafe` by nature as they interact with C code.
11//! Proper memory management and lifetime handling is the responsibility of the caller.
12
13#![allow(non_camel_case_types, non_upper_case_globals)]
14
15use std::os::raw::{c_char, c_int, c_void};
16
17// =============================================================================
18// Opaque Pointer Types
19// =============================================================================
20
21/// Opaque pointer to a vector collection instance.
22/// Represents an opened collection that can be used for read/write operations.
23#[repr(C)]
24pub struct zvec_collection_t {
25    _private: [u8; 0],
26}
27
28/// Opaque pointer to a collection schema definition.
29/// Defines the structure of fields and indexes in a collection.
30#[repr(C)]
31pub struct zvec_collection_schema_t {
32    _private: [u8; 0],
33}
34
35/// Opaque pointer to a field schema definition.
36/// Defines the properties of a single field including type, index, etc.
37#[repr(C)]
38pub struct zvec_field_schema_t {
39    _private: [u8; 0],
40}
41
42/// Opaque pointer to index configuration parameters.
43/// Contains settings for HNSW, IVF, or other index types.
44#[repr(C)]
45pub struct zvec_index_params_t {
46    _private: [u8; 0],
47}
48
49/// Opaque pointer to a document instance.
50/// Represents a single record with fields and values in a collection.
51#[repr(C)]
52pub struct zvec_doc_t {
53    _private: [u8; 0],
54}
55
56/// Opaque pointer to a vector query object.
57/// Configures search parameters for vector similarity queries.
58#[repr(C)]
59pub struct zvec_vector_query_t {
60    _private: [u8; 0],
61}
62
63/// Opaque pointer to a group-by vector query object.
64/// Configures grouped vector search with aggregation parameters.
65#[repr(C)]
66pub struct zvec_group_by_vector_query_t {
67    _private: [u8; 0],
68}
69
70/// Opaque pointer to collection opening options.
71/// Controls behavior like MMAP, buffer size, and read-only mode.
72#[repr(C)]
73pub struct zvec_collection_options_t {
74    _private: [u8; 0],
75}
76
77/// Opaque pointer to collection statistics data.
78/// Contains metrics like document count and index completeness.
79#[repr(C)]
80pub struct zvec_collection_stats_t {
81    _private: [u8; 0],
82}
83
84/// Opaque pointer to global configuration data.
85/// Manages memory limits, thread counts, and other system-wide settings.
86#[repr(C)]
87pub struct zvec_config_data_t {
88    _private: [u8; 0],
89}
90
91/// Opaque pointer to logging configuration.
92/// Controls log level, output type (console/file), and file rotation settings.
93#[repr(C)]
94pub struct zvec_log_config_t {
95    _private: [u8; 0],
96}
97
98/// Opaque pointer to HNSW index query parameters.
99/// Configures ef, radius, and refiner settings for HNSW searches.
100#[repr(C)]
101pub struct zvec_hnsw_query_params_t {
102    _private: [u8; 0],
103}
104
105/// Opaque pointer to IVF index query parameters.
106/// Configures nprobe, scale factor, and refiner settings for IVF searches.
107#[repr(C)]
108pub struct zvec_ivf_query_params_t {
109    _private: [u8; 0],
110}
111
112/// Opaque pointer to flat index query parameters.
113/// Configures scale factor and refiner settings for brute-force searches.
114#[repr(C)]
115pub struct zvec_flat_query_params_t {
116    _private: [u8; 0],
117}
118
119/// Opaque pointer to FTS query parameters.
120/// Controls the default boolean operator for adjacent bare terms.
121#[repr(C)]
122pub struct zvec_fts_query_params_t {
123    _private: [u8; 0],
124}
125
126/// Opaque pointer to FTS query payload.
127/// Holds query_string (boolean expression) and match_string (natural-language).
128#[repr(C)]
129pub struct zvec_fts_t {
130    _private: [u8; 0],
131}
132
133/// Opaque pointer to a multi-query object.
134/// Combines multiple sub-queries with a re-ranking strategy (RRF / Weighted).
135#[repr(C)]
136pub struct zvec_multi_query_t {
137    _private: [u8; 0],
138}
139
140/// Opaque pointer to a sub-query object used inside a multi-query.
141/// Carries a per-field vector or sparse vector and index-specific parameters.
142#[repr(C)]
143pub struct zvec_sub_query_t {
144    _private: [u8; 0],
145}
146
147// =============================================================================
148// Type Aliases
149// =============================================================================
150
151/// Error code returned by zvec functions.
152pub type zvec_error_code_t = u32;
153/// Data type identifier for field values.
154pub type zvec_data_type_t = u32;
155/// Index algorithm type identifier.
156pub type zvec_index_type_t = u32;
157/// Distance metric type for vector similarity.
158pub type zvec_metric_type_t = u32;
159/// Quantization type for vector compression.
160pub type zvec_quantize_type_t = u32;
161/// Log severity level.
162pub type zvec_log_level_t = u32;
163/// Log output destination type.
164pub type zvec_log_type_t = u32;
165/// Document operation type (insert/update/delete).
166pub type zvec_doc_operator_t = u32;
167
168// =============================================================================
169// Error Code Constants
170// =============================================================================
171
172/// Operation completed successfully.
173pub const ZVEC_OK: zvec_error_code_t = 0;
174/// Requested resource was not found.
175pub const ZVEC_ERROR_NOT_FOUND: zvec_error_code_t = 1;
176/// Resource already exists.
177pub const ZVEC_ERROR_ALREADY_EXISTS: zvec_error_code_t = 2;
178/// Invalid argument provided.
179pub const ZVEC_ERROR_INVALID_ARGUMENT: zvec_error_code_t = 3;
180/// Permission denied for the operation.
181pub const ZVEC_ERROR_PERMISSION_DENIED: zvec_error_code_t = 4;
182/// Operation failed due to unmet precondition.
183pub const ZVEC_ERROR_FAILED_PRECONDITION: zvec_error_code_t = 5;
184/// System resources exhausted.
185pub const ZVEC_ERROR_RESOURCE_EXHAUSTED: zvec_error_code_t = 6;
186/// Service is currently unavailable.
187pub const ZVEC_ERROR_UNAVAILABLE: zvec_error_code_t = 7;
188/// Internal system error occurred.
189pub const ZVEC_ERROR_INTERNAL_ERROR: zvec_error_code_t = 8;
190/// Operation is not supported.
191pub const ZVEC_ERROR_NOT_SUPPORTED: zvec_error_code_t = 9;
192/// Unknown error occurred.
193pub const ZVEC_ERROR_UNKNOWN: zvec_error_code_t = 10;
194
195// =============================================================================
196// Data Type Constants
197// =============================================================================
198
199/// Undefined data type.
200pub const ZVEC_DATA_TYPE_UNDEFINED: zvec_data_type_t = 0;
201/// Binary data type.
202pub const ZVEC_DATA_TYPE_BINARY: zvec_data_type_t = 1;
203/// String data type.
204pub const ZVEC_DATA_TYPE_STRING: zvec_data_type_t = 2;
205/// Boolean data type.
206pub const ZVEC_DATA_TYPE_BOOL: zvec_data_type_t = 3;
207/// 32-bit signed integer.
208pub const ZVEC_DATA_TYPE_INT32: zvec_data_type_t = 4;
209/// 64-bit signed integer.
210pub const ZVEC_DATA_TYPE_INT64: zvec_data_type_t = 5;
211/// 32-bit unsigned integer.
212pub const ZVEC_DATA_TYPE_UINT32: zvec_data_type_t = 6;
213/// 64-bit unsigned integer.
214pub const ZVEC_DATA_TYPE_UINT64: zvec_data_type_t = 7;
215/// 32-bit floating point.
216pub const ZVEC_DATA_TYPE_FLOAT: zvec_data_type_t = 8;
217/// 64-bit floating point.
218pub const ZVEC_DATA_TYPE_DOUBLE: zvec_data_type_t = 9;
219/// Dense vector with binary32 (float) elements.
220pub const ZVEC_DATA_TYPE_VECTOR_BINARY32: zvec_data_type_t = 20;
221/// Dense vector with binary64 (double) elements.
222pub const ZVEC_DATA_TYPE_VECTOR_BINARY64: zvec_data_type_t = 21;
223/// Dense vector with FP16 (half precision) elements.
224pub const ZVEC_DATA_TYPE_VECTOR_FP16: zvec_data_type_t = 22;
225/// Dense vector with FP32 (single precision) elements.
226pub const ZVEC_DATA_TYPE_VECTOR_FP32: zvec_data_type_t = 23;
227/// Dense vector with FP64 (double precision) elements.
228pub const ZVEC_DATA_TYPE_VECTOR_FP64: zvec_data_type_t = 24;
229/// Dense vector with INT4 quantized elements.
230pub const ZVEC_DATA_TYPE_VECTOR_INT4: zvec_data_type_t = 25;
231/// Dense vector with INT8 quantized elements.
232pub const ZVEC_DATA_TYPE_VECTOR_INT8: zvec_data_type_t = 26;
233/// Dense vector with INT16 quantized elements.
234pub const ZVEC_DATA_TYPE_VECTOR_INT16: zvec_data_type_t = 27;
235/// Sparse vector with FP16 elements.
236pub const ZVEC_DATA_TYPE_SPARSE_VECTOR_FP16: zvec_data_type_t = 30;
237/// Sparse vector with FP32 elements.
238pub const ZVEC_DATA_TYPE_SPARSE_VECTOR_FP32: zvec_data_type_t = 31;
239/// Array of binary values.
240pub const ZVEC_DATA_TYPE_ARRAY_BINARY: zvec_data_type_t = 40;
241/// Array of strings.
242pub const ZVEC_DATA_TYPE_ARRAY_STRING: zvec_data_type_t = 41;
243/// Array of booleans.
244pub const ZVEC_DATA_TYPE_ARRAY_BOOL: zvec_data_type_t = 42;
245/// Array of 32-bit signed integers.
246pub const ZVEC_DATA_TYPE_ARRAY_INT32: zvec_data_type_t = 43;
247/// Array of 64-bit signed integers.
248pub const ZVEC_DATA_TYPE_ARRAY_INT64: zvec_data_type_t = 44;
249/// Array of 32-bit unsigned integers.
250pub const ZVEC_DATA_TYPE_ARRAY_UINT32: zvec_data_type_t = 45;
251/// Array of 64-bit unsigned integers.
252pub const ZVEC_DATA_TYPE_ARRAY_UINT64: zvec_data_type_t = 46;
253/// Array of 32-bit floats.
254pub const ZVEC_DATA_TYPE_ARRAY_FLOAT: zvec_data_type_t = 47;
255/// Array of 64-bit doubles.
256pub const ZVEC_DATA_TYPE_ARRAY_DOUBLE: zvec_data_type_t = 48;
257
258// =============================================================================
259// Index Type Constants
260// =============================================================================
261
262/// Undefined index type.
263pub const ZVEC_INDEX_TYPE_UNDEFINED: zvec_index_type_t = 0;
264/// HNSW (Hierarchical Navigable Small World) graph index.
265pub const ZVEC_INDEX_TYPE_HNSW: zvec_index_type_t = 1;
266/// IVF (Inverted File Index) with clustering.
267pub const ZVEC_INDEX_TYPE_IVF: zvec_index_type_t = 2;
268/// Flat/brute-force index (exact search).
269pub const ZVEC_INDEX_TYPE_FLAT: zvec_index_type_t = 3;
270/// Inverted index for scalar field filtering.
271pub const ZVEC_INDEX_TYPE_INVERT: zvec_index_type_t = 10;
272/// Full-text search index.
273pub const ZVEC_INDEX_TYPE_FTS: zvec_index_type_t = 11;
274
275// =============================================================================
276// Metric Type Constants
277// =============================================================================
278
279/// Undefined metric type.
280pub const ZVEC_METRIC_TYPE_UNDEFINED: zvec_metric_type_t = 0;
281/// L2 (Euclidean) distance.
282pub const ZVEC_METRIC_TYPE_L2: zvec_metric_type_t = 1;
283/// Inner product (dot product).
284pub const ZVEC_METRIC_TYPE_IP: zvec_metric_type_t = 2;
285/// Cosine similarity.
286pub const ZVEC_METRIC_TYPE_COSINE: zvec_metric_type_t = 3;
287/// MIPS converted to L2 distance.
288pub const ZVEC_METRIC_TYPE_MIPSL2: zvec_metric_type_t = 4;
289
290// =============================================================================
291// Quantize Type Constants
292// =============================================================================
293
294/// Undefined quantization type.
295pub const ZVEC_QUANTIZE_TYPE_UNDEFINED: zvec_quantize_type_t = 0;
296/// FP16 (half precision) quantization.
297pub const ZVEC_QUANTIZE_TYPE_FP16: zvec_quantize_type_t = 1;
298/// INT8 (8-bit integer) quantization.
299pub const ZVEC_QUANTIZE_TYPE_INT8: zvec_quantize_type_t = 2;
300/// INT4 (4-bit integer) quantization.
301pub const ZVEC_QUANTIZE_TYPE_INT4: zvec_quantize_type_t = 3;
302
303// =============================================================================
304// Log Level Constants
305// =============================================================================
306
307/// Debug level logging (most verbose).
308pub const ZVEC_LOG_LEVEL_DEBUG: zvec_log_level_t = 0;
309/// Info level logging.
310pub const ZVEC_LOG_LEVEL_INFO: zvec_log_level_t = 1;
311/// Warning level logging.
312pub const ZVEC_LOG_LEVEL_WARN: zvec_log_level_t = 2;
313/// Error level logging.
314pub const ZVEC_LOG_LEVEL_ERROR: zvec_log_level_t = 3;
315/// Fatal level logging (least verbose, critical errors only).
316pub const ZVEC_LOG_LEVEL_FATAL: zvec_log_level_t = 4;
317
318// =============================================================================
319// Log Type Constants
320// =============================================================================
321
322/// Console output logging.
323pub const ZVEC_LOG_TYPE_CONSOLE: zvec_log_type_t = 0;
324/// File output logging.
325pub const ZVEC_LOG_TYPE_FILE: zvec_log_type_t = 1;
326
327// =============================================================================
328// Doc Operator Constants
329// =============================================================================
330
331/// Insert operation (fails if document exists).
332pub const ZVEC_DOC_OP_INSERT: zvec_doc_operator_t = 0;
333/// Update operation (fails if document doesn't exist).
334pub const ZVEC_DOC_OP_UPDATE: zvec_doc_operator_t = 1;
335/// Upsert operation (insert or update).
336pub const ZVEC_DOC_OP_UPSERT: zvec_doc_operator_t = 2;
337/// Delete operation.
338pub const ZVEC_DOC_OP_DELETE: zvec_doc_operator_t = 3;
339
340// =============================================================================
341// Non-Opaque Structures
342// =============================================================================
343
344/// A non-owning view of a string (pointer + length).
345#[repr(C)]
346pub struct zvec_string_view_t {
347    pub data: *const c_char,
348    pub length: usize,
349}
350
351/// An owning, mutable string with capacity tracking.
352#[repr(C)]
353pub struct zvec_string_t {
354    pub data: *mut c_char,
355    pub length: usize,
356    pub capacity: usize,
357}
358
359/// An array of owned strings.
360#[repr(C)]
361pub struct zvec_string_array_t {
362    pub strings: *mut zvec_string_t,
363    pub count: usize,
364}
365
366/// A view of a float array (non-owning).
367#[repr(C)]
368pub struct zvec_float_array_t {
369    pub data: *const f32,
370    pub length: usize,
371}
372
373/// A view of an int64 array (non-owning).
374#[repr(C)]
375pub struct zvec_int64_array_t {
376    pub data: *const i64,
377    pub length: usize,
378}
379
380/// A view of a byte array (non-owning).
381#[repr(C)]
382pub struct zvec_byte_array_t {
383    pub data: *const u8,
384    pub length: usize,
385}
386
387/// A mutable, owning byte array with capacity tracking.
388#[repr(C)]
389pub struct zvec_mutable_byte_array_t {
390    pub data: *mut u8,
391    pub length: usize,
392    pub capacity: usize,
393}
394
395/// Result of a write operation (insert/update/delete).
396#[repr(C)]
397pub struct zvec_write_result_t {
398    pub code: zvec_error_code_t,
399    pub message: *const c_char,
400}
401
402/// Detailed error information including source location.
403#[repr(C)]
404pub struct zvec_error_details_t {
405    pub code: zvec_error_code_t,
406    pub message: *const c_char,
407    pub file: *const c_char,
408    pub line: c_int,
409    pub function: *const c_char,
410}
411
412// =============================================================================
413// FFI Function Declarations
414// =============================================================================
415
416extern "C" {
417    // -------------------------------------------------------------------------
418    // Version
419    // Functions for retrieving library version information.
420    // -------------------------------------------------------------------------
421    pub fn zvec_get_version() -> *const c_char;
422    pub fn zvec_check_version(major: c_int, minor: c_int, patch: c_int) -> bool;
423    pub fn zvec_get_version_major() -> c_int;
424    pub fn zvec_get_version_minor() -> c_int;
425    pub fn zvec_get_version_patch() -> c_int;
426
427    // -------------------------------------------------------------------------
428    // Error
429    // Functions for error handling and retrieval.
430    // -------------------------------------------------------------------------
431    pub fn zvec_get_last_error_details(
432        error_details: *mut zvec_error_details_t,
433    ) -> zvec_error_code_t;
434    pub fn zvec_get_last_error(error_msg: *mut *mut c_char) -> zvec_error_code_t;
435    pub fn zvec_clear_error();
436    pub fn zvec_error_code_to_string(error_code: zvec_error_code_t) -> *const c_char;
437
438    // -------------------------------------------------------------------------
439    // String Management
440    // Functions for creating, manipulating, and freeing string objects.
441    // -------------------------------------------------------------------------
442    pub fn zvec_string_create(str: *const c_char) -> *mut zvec_string_t;
443    pub fn zvec_string_create_from_view(view: *const zvec_string_view_t) -> *mut zvec_string_t;
444    pub fn zvec_bin_create(data: *const u8, length: usize) -> *mut zvec_string_t;
445    pub fn zvec_string_copy(str: *const zvec_string_t) -> *mut zvec_string_t;
446    pub fn zvec_string_c_str(str: *const zvec_string_t) -> *const c_char;
447    pub fn zvec_string_length(str: *const zvec_string_t) -> usize;
448    pub fn zvec_string_compare(str1: *const zvec_string_t, str2: *const zvec_string_t) -> c_int;
449    pub fn zvec_free_string(str: *mut zvec_string_t);
450
451    // -------------------------------------------------------------------------
452    // Array Management
453    // Functions for creating and managing arrays of various types.
454    // -------------------------------------------------------------------------
455    pub fn zvec_string_array_create(count: usize) -> *mut zvec_string_array_t;
456    pub fn zvec_string_array_add(array: *mut zvec_string_array_t, idx: usize, str: *const c_char);
457    pub fn zvec_string_array_destroy(array: *mut zvec_string_array_t);
458    pub fn zvec_byte_array_create(capacity: usize) -> *mut zvec_mutable_byte_array_t;
459    pub fn zvec_byte_array_destroy(array: *mut zvec_mutable_byte_array_t);
460    pub fn zvec_float_array_create(count: usize) -> *mut zvec_float_array_t;
461    pub fn zvec_float_array_destroy(array: *mut zvec_float_array_t);
462    pub fn zvec_int64_array_create(count: usize) -> *mut zvec_int64_array_t;
463    pub fn zvec_int64_array_destroy(array: *mut zvec_int64_array_t);
464    pub fn zvec_free_uint8_array(array: *mut u8);
465
466    // -------------------------------------------------------------------------
467    // Memory
468    // Functions for memory allocation and deallocation.
469    // -------------------------------------------------------------------------
470    pub fn zvec_malloc(size: usize) -> *mut c_void;
471    pub fn zvec_free(ptr: *mut c_void);
472
473    // -------------------------------------------------------------------------
474    // Log Configuration
475    // Functions for configuring logging behavior.
476    // -------------------------------------------------------------------------
477    pub fn zvec_config_log_create_console(level: zvec_log_level_t) -> *mut zvec_log_config_t;
478    pub fn zvec_config_log_create_file(
479        level: zvec_log_level_t,
480        dir: *const c_char,
481        basename: *const c_char,
482        file_size: u32,
483        overdue_days: u32,
484    ) -> *mut zvec_log_config_t;
485    pub fn zvec_config_log_destroy(config: *mut zvec_log_config_t);
486    pub fn zvec_config_log_get_level(config: *const zvec_log_config_t) -> zvec_log_level_t;
487    pub fn zvec_config_log_set_level(
488        config: *mut zvec_log_config_t,
489        level: zvec_log_level_t,
490    ) -> zvec_error_code_t;
491    pub fn zvec_config_log_is_file_type(config: *const zvec_log_config_t) -> bool;
492    pub fn zvec_config_log_get_dir(config: *const zvec_log_config_t) -> *const c_char;
493    pub fn zvec_config_log_set_dir(
494        config: *mut zvec_log_config_t,
495        dir: *const c_char,
496    ) -> zvec_error_code_t;
497    pub fn zvec_config_log_get_basename(config: *const zvec_log_config_t) -> *const c_char;
498    pub fn zvec_config_log_set_basename(
499        config: *mut zvec_log_config_t,
500        basename: *const c_char,
501    ) -> zvec_error_code_t;
502    pub fn zvec_config_log_get_file_size(config: *const zvec_log_config_t) -> u32;
503    pub fn zvec_config_log_set_file_size(
504        config: *mut zvec_log_config_t,
505        file_size: u32,
506    ) -> zvec_error_code_t;
507    pub fn zvec_config_log_get_overdue_days(config: *const zvec_log_config_t) -> u32;
508    pub fn zvec_config_log_set_overdue_days(
509        config: *mut zvec_log_config_t,
510        days: u32,
511    ) -> zvec_error_code_t;
512
513    // -------------------------------------------------------------------------
514    // Global Configuration
515    // Functions for managing global system configuration.
516    // -------------------------------------------------------------------------
517    pub fn zvec_config_data_create() -> *mut zvec_config_data_t;
518    pub fn zvec_config_data_destroy(config: *mut zvec_config_data_t);
519    pub fn zvec_config_data_set_memory_limit(
520        config: *mut zvec_config_data_t,
521        memory_limit_bytes: u64,
522    ) -> zvec_error_code_t;
523    pub fn zvec_config_data_get_memory_limit(config: *const zvec_config_data_t) -> u64;
524    pub fn zvec_config_data_set_log_config(
525        config: *mut zvec_config_data_t,
526        log_config: *mut zvec_log_config_t,
527    ) -> zvec_error_code_t;
528    pub fn zvec_config_data_get_log_type(config: *const zvec_config_data_t) -> zvec_log_type_t;
529    pub fn zvec_config_data_set_query_thread_count(
530        config: *mut zvec_config_data_t,
531        thread_count: u32,
532    ) -> zvec_error_code_t;
533    pub fn zvec_config_data_get_query_thread_count(config: *const zvec_config_data_t) -> u32;
534    pub fn zvec_config_data_set_invert_to_forward_scan_ratio(
535        config: *mut zvec_config_data_t,
536        ratio: f32,
537    ) -> zvec_error_code_t;
538    pub fn zvec_config_data_get_invert_to_forward_scan_ratio(
539        config: *const zvec_config_data_t,
540    ) -> f32;
541    pub fn zvec_config_data_set_brute_force_by_keys_ratio(
542        config: *mut zvec_config_data_t,
543        ratio: f32,
544    ) -> zvec_error_code_t;
545    pub fn zvec_config_data_get_brute_force_by_keys_ratio(config: *const zvec_config_data_t)
546        -> f32;
547    pub fn zvec_config_data_set_fts_brute_force_by_keys_ratio(
548        config: *mut zvec_config_data_t,
549        ratio: f32,
550    ) -> zvec_error_code_t;
551    pub fn zvec_config_data_get_fts_brute_force_by_keys_ratio(
552        config: *const zvec_config_data_t,
553    ) -> f32;
554    pub fn zvec_config_data_set_optimize_thread_count(
555        config: *mut zvec_config_data_t,
556        thread_count: u32,
557    ) -> zvec_error_code_t;
558    pub fn zvec_config_data_get_optimize_thread_count(config: *const zvec_config_data_t) -> u32;
559
560    // -------------------------------------------------------------------------
561    // Initialization
562    // Functions for initializing and shutting down the library.
563    // -------------------------------------------------------------------------
564    pub fn zvec_initialize(config: *const zvec_config_data_t) -> zvec_error_code_t;
565    pub fn zvec_shutdown() -> zvec_error_code_t;
566    pub fn zvec_is_initialized() -> bool;
567
568    // -------------------------------------------------------------------------
569    // Index Parameters
570    // Functions for creating and configuring index parameters.
571    // -------------------------------------------------------------------------
572    pub fn zvec_index_params_create(index_type: zvec_index_type_t) -> *mut zvec_index_params_t;
573    pub fn zvec_index_params_destroy(params: *mut zvec_index_params_t);
574    pub fn zvec_index_params_get_type(params: *const zvec_index_params_t) -> zvec_index_type_t;
575    pub fn zvec_index_params_set_metric_type(
576        params: *mut zvec_index_params_t,
577        metric_type: zvec_metric_type_t,
578    ) -> zvec_error_code_t;
579    pub fn zvec_index_params_get_metric_type(
580        params: *const zvec_index_params_t,
581    ) -> zvec_metric_type_t;
582    pub fn zvec_index_params_set_quantize_type(
583        params: *mut zvec_index_params_t,
584        quantize_type: zvec_quantize_type_t,
585    ) -> zvec_error_code_t;
586    pub fn zvec_index_params_get_quantize_type(
587        params: *const zvec_index_params_t,
588    ) -> zvec_quantize_type_t;
589    pub fn zvec_index_params_set_hnsw_params(
590        params: *mut zvec_index_params_t,
591        m: c_int,
592        ef_construction: c_int,
593    ) -> zvec_error_code_t;
594    pub fn zvec_index_params_get_hnsw_m(params: *const zvec_index_params_t) -> c_int;
595    pub fn zvec_index_params_get_hnsw_ef_construction(params: *const zvec_index_params_t) -> c_int;
596    pub fn zvec_index_params_set_ivf_params(
597        params: *mut zvec_index_params_t,
598        n_list: c_int,
599        n_iters: c_int,
600        use_soar: bool,
601    ) -> zvec_error_code_t;
602    pub fn zvec_index_params_get_ivf_params(
603        params: *const zvec_index_params_t,
604        out_n_list: *mut c_int,
605        out_n_iters: *mut c_int,
606        out_use_soar: *mut bool,
607    ) -> zvec_error_code_t;
608    pub fn zvec_index_params_set_invert_params(
609        params: *mut zvec_index_params_t,
610        enable_range_opt: bool,
611        enable_wildcard: bool,
612    ) -> zvec_error_code_t;
613    pub fn zvec_index_params_get_invert_params(
614        params: *const zvec_index_params_t,
615        out_enable_range_opt: *mut bool,
616        out_enable_wildcard: *mut bool,
617    ) -> zvec_error_code_t;
618    pub fn zvec_index_params_set_fts_params(
619        params: *mut zvec_index_params_t,
620        tokenizer_name: *const c_char,
621        filters: *const zvec_string_array_t,
622        extra_params: *const c_char,
623    ) -> zvec_error_code_t;
624    pub fn zvec_index_params_get_fts_params(
625        params: *const zvec_index_params_t,
626        out_tokenizer_name: *mut *const c_char,
627        out_filters: *mut *mut zvec_string_array_t,
628        out_extra_params: *mut *const c_char,
629    ) -> zvec_error_code_t;
630
631    // -------------------------------------------------------------------------
632    // Field Schema
633    // Functions for creating and managing field schema definitions.
634    // -------------------------------------------------------------------------
635    pub fn zvec_field_schema_create(
636        name: *const c_char,
637        data_type: zvec_data_type_t,
638        nullable: bool,
639        dimension: u32,
640    ) -> *mut zvec_field_schema_t;
641    pub fn zvec_field_schema_destroy(schema: *mut zvec_field_schema_t);
642    pub fn zvec_field_schema_set_name(
643        schema: *mut zvec_field_schema_t,
644        name: *const c_char,
645    ) -> zvec_error_code_t;
646    pub fn zvec_field_schema_get_name(schema: *const zvec_field_schema_t) -> *const c_char;
647    pub fn zvec_field_schema_get_data_type(schema: *const zvec_field_schema_t) -> zvec_data_type_t;
648    pub fn zvec_field_schema_set_data_type(
649        schema: *mut zvec_field_schema_t,
650        data_type: zvec_data_type_t,
651    ) -> zvec_error_code_t;
652    pub fn zvec_field_schema_get_element_data_type(
653        schema: *const zvec_field_schema_t,
654    ) -> zvec_data_type_t;
655    pub fn zvec_field_schema_get_element_data_size(schema: *const zvec_field_schema_t) -> usize;
656    pub fn zvec_field_schema_is_vector_field(schema: *const zvec_field_schema_t) -> bool;
657    pub fn zvec_field_schema_is_dense_vector(schema: *const zvec_field_schema_t) -> bool;
658    pub fn zvec_field_schema_is_sparse_vector(schema: *const zvec_field_schema_t) -> bool;
659    pub fn zvec_field_schema_is_nullable(schema: *const zvec_field_schema_t) -> bool;
660    pub fn zvec_field_schema_set_nullable(
661        schema: *mut zvec_field_schema_t,
662        nullable: bool,
663    ) -> zvec_error_code_t;
664    pub fn zvec_field_schema_has_invert_index(schema: *const zvec_field_schema_t) -> bool;
665    pub fn zvec_field_schema_is_array_type(schema: *const zvec_field_schema_t) -> bool;
666    pub fn zvec_field_schema_get_dimension(schema: *const zvec_field_schema_t) -> u32;
667    pub fn zvec_field_schema_set_dimension(
668        schema: *mut zvec_field_schema_t,
669        dimension: u32,
670    ) -> zvec_error_code_t;
671    pub fn zvec_field_schema_get_index_type(
672        schema: *const zvec_field_schema_t,
673    ) -> zvec_index_type_t;
674    pub fn zvec_field_schema_has_index(schema: *const zvec_field_schema_t) -> bool;
675    pub fn zvec_field_schema_get_index_params(
676        schema: *const zvec_field_schema_t,
677    ) -> *const zvec_index_params_t;
678    pub fn zvec_field_schema_set_index_params(
679        schema: *mut zvec_field_schema_t,
680        index_params: *const zvec_index_params_t,
681    ) -> zvec_error_code_t;
682    pub fn zvec_field_schema_validate(
683        schema: *const zvec_field_schema_t,
684        error_msg: *mut *mut zvec_string_t,
685    ) -> zvec_error_code_t;
686
687    // -------------------------------------------------------------------------
688    // Collection Schema
689    // Functions for creating and managing collection schema definitions.
690    // -------------------------------------------------------------------------
691    pub fn zvec_collection_schema_create(name: *const c_char) -> *mut zvec_collection_schema_t;
692    pub fn zvec_collection_schema_destroy(schema: *mut zvec_collection_schema_t);
693    pub fn zvec_collection_schema_get_name(
694        schema: *const zvec_collection_schema_t,
695    ) -> *const c_char;
696    pub fn zvec_collection_schema_set_name(
697        schema: *mut zvec_collection_schema_t,
698        name: *const c_char,
699    ) -> zvec_error_code_t;
700    pub fn zvec_collection_schema_add_field(
701        schema: *mut zvec_collection_schema_t,
702        field: *const zvec_field_schema_t,
703    ) -> zvec_error_code_t;
704    pub fn zvec_collection_schema_alter_field(
705        schema: *mut zvec_collection_schema_t,
706        field_name: *const c_char,
707        new_field: *const zvec_field_schema_t,
708    ) -> zvec_error_code_t;
709    pub fn zvec_collection_schema_drop_field(
710        schema: *mut zvec_collection_schema_t,
711        field_name: *const c_char,
712    ) -> zvec_error_code_t;
713    pub fn zvec_collection_schema_has_field(
714        schema: *const zvec_collection_schema_t,
715        field_name: *const c_char,
716    ) -> bool;
717    pub fn zvec_collection_schema_get_field(
718        schema: *const zvec_collection_schema_t,
719        field_name: *const c_char,
720    ) -> *mut zvec_field_schema_t;
721    pub fn zvec_collection_schema_get_forward_field(
722        schema: *const zvec_collection_schema_t,
723        field_name: *const c_char,
724    ) -> *mut zvec_field_schema_t;
725    pub fn zvec_collection_schema_get_vector_field(
726        schema: *const zvec_collection_schema_t,
727        field_name: *const c_char,
728    ) -> *mut zvec_field_schema_t;
729    pub fn zvec_collection_schema_get_forward_fields(
730        schema: *const zvec_collection_schema_t,
731        fields: *mut *mut *mut zvec_field_schema_t,
732        count: *mut usize,
733    ) -> zvec_error_code_t;
734    pub fn zvec_collection_schema_get_forward_fields_with_index(
735        schema: *const zvec_collection_schema_t,
736        fields: *mut *mut *mut zvec_field_schema_t,
737        count: *mut usize,
738    ) -> zvec_error_code_t;
739    pub fn zvec_collection_schema_get_forward_field_names(
740        schema: *const zvec_collection_schema_t,
741        names: *mut *mut *const c_char,
742        count: *mut usize,
743    ) -> zvec_error_code_t;
744    pub fn zvec_collection_schema_get_forward_field_names_with_index(
745        schema: *const zvec_collection_schema_t,
746        names: *mut *mut *const c_char,
747        count: *mut usize,
748    ) -> zvec_error_code_t;
749    pub fn zvec_collection_schema_get_all_field_names(
750        schema: *const zvec_collection_schema_t,
751        names: *mut *mut *const c_char,
752        count: *mut usize,
753    ) -> zvec_error_code_t;
754    pub fn zvec_collection_schema_get_vector_fields(
755        schema: *const zvec_collection_schema_t,
756        fields: *mut *mut *mut zvec_field_schema_t,
757        count: *mut usize,
758    ) -> zvec_error_code_t;
759    pub fn zvec_collection_schema_get_max_doc_count_per_segment(
760        schema: *const zvec_collection_schema_t,
761    ) -> u64;
762    pub fn zvec_collection_schema_set_max_doc_count_per_segment(
763        schema: *mut zvec_collection_schema_t,
764        max_doc_count: u64,
765    ) -> zvec_error_code_t;
766    pub fn zvec_collection_schema_validate(
767        schema: *const zvec_collection_schema_t,
768        error_msg: *mut *mut zvec_string_t,
769    ) -> zvec_error_code_t;
770    pub fn zvec_collection_schema_add_index(
771        schema: *mut zvec_collection_schema_t,
772        field_name: *const c_char,
773        index_params: *const zvec_index_params_t,
774    ) -> zvec_error_code_t;
775    pub fn zvec_collection_schema_drop_index(
776        schema: *mut zvec_collection_schema_t,
777        field_name: *const c_char,
778    ) -> zvec_error_code_t;
779    pub fn zvec_collection_schema_has_index(
780        schema: *const zvec_collection_schema_t,
781        field_name: *const c_char,
782    ) -> bool;
783
784    // -------------------------------------------------------------------------
785    // Collection Options
786    // Functions for configuring collection opening options.
787    // -------------------------------------------------------------------------
788    pub fn zvec_collection_options_create() -> *mut zvec_collection_options_t;
789    pub fn zvec_collection_options_destroy(options: *mut zvec_collection_options_t);
790    pub fn zvec_collection_options_set_enable_mmap(
791        options: *mut zvec_collection_options_t,
792        enable: bool,
793    ) -> zvec_error_code_t;
794    pub fn zvec_collection_options_get_enable_mmap(
795        options: *const zvec_collection_options_t,
796    ) -> bool;
797    pub fn zvec_collection_options_set_max_buffer_size(
798        options: *mut zvec_collection_options_t,
799        size: usize,
800    ) -> zvec_error_code_t;
801    pub fn zvec_collection_options_get_max_buffer_size(
802        options: *const zvec_collection_options_t,
803    ) -> usize;
804    pub fn zvec_collection_options_set_read_only(
805        options: *mut zvec_collection_options_t,
806        read_only: bool,
807    ) -> zvec_error_code_t;
808    pub fn zvec_collection_options_get_read_only(options: *const zvec_collection_options_t)
809        -> bool;
810
811    // -------------------------------------------------------------------------
812    // Collection Statistics
813    // Functions for retrieving collection statistics.
814    // -------------------------------------------------------------------------
815    pub fn zvec_collection_stats_get_doc_count(stats: *const zvec_collection_stats_t) -> u64;
816    pub fn zvec_collection_stats_get_index_count(stats: *const zvec_collection_stats_t) -> usize;
817    pub fn zvec_collection_stats_get_index_name(
818        stats: *const zvec_collection_stats_t,
819        index: usize,
820    ) -> *const c_char;
821    pub fn zvec_collection_stats_get_index_completeness(
822        stats: *const zvec_collection_stats_t,
823        index: usize,
824    ) -> f32;
825    pub fn zvec_collection_stats_destroy(stats: *mut zvec_collection_stats_t);
826
827    // -------------------------------------------------------------------------
828    // Collection Management
829    // Functions for creating, opening, closing, and destroying collections.
830    // -------------------------------------------------------------------------
831    pub fn zvec_collection_create_and_open(
832        path: *const c_char,
833        schema: *const zvec_collection_schema_t,
834        options: *const zvec_collection_options_t,
835        collection: *mut *mut zvec_collection_t,
836    ) -> zvec_error_code_t;
837    pub fn zvec_collection_open(
838        path: *const c_char,
839        options: *const zvec_collection_options_t,
840        collection: *mut *mut zvec_collection_t,
841    ) -> zvec_error_code_t;
842    pub fn zvec_collection_close(collection: *mut zvec_collection_t) -> zvec_error_code_t;
843    pub fn zvec_collection_destroy(collection: *mut zvec_collection_t) -> zvec_error_code_t;
844    pub fn zvec_collection_flush(collection: *mut zvec_collection_t) -> zvec_error_code_t;
845    pub fn zvec_collection_get_schema(
846        collection: *const zvec_collection_t,
847        schema: *mut *mut zvec_collection_schema_t,
848    ) -> zvec_error_code_t;
849    pub fn zvec_collection_get_options(
850        collection: *const zvec_collection_t,
851        options: *mut *mut zvec_collection_options_t,
852    ) -> zvec_error_code_t;
853    pub fn zvec_collection_get_stats(
854        collection: *const zvec_collection_t,
855        stats: *mut *mut zvec_collection_stats_t,
856    ) -> zvec_error_code_t;
857    pub fn zvec_free_field_schema(field_schema: *mut zvec_field_schema_t);
858
859    // -------------------------------------------------------------------------
860    // Index Management
861    // Functions for creating, dropping, and optimizing indexes.
862    // -------------------------------------------------------------------------
863    pub fn zvec_collection_create_index(
864        collection: *mut zvec_collection_t,
865        field_name: *const c_char,
866        index_params: *const zvec_index_params_t,
867    ) -> zvec_error_code_t;
868    pub fn zvec_collection_drop_index(
869        collection: *mut zvec_collection_t,
870        field_name: *const c_char,
871    ) -> zvec_error_code_t;
872    pub fn zvec_collection_optimize(collection: *mut zvec_collection_t) -> zvec_error_code_t;
873
874    // -------------------------------------------------------------------------
875    // Column Management (DDL)
876    // Functions for adding, dropping, and altering columns (schema changes).
877    // -------------------------------------------------------------------------
878    pub fn zvec_collection_add_column(
879        collection: *mut zvec_collection_t,
880        field_schema: *const zvec_field_schema_t,
881        expression: *const c_char,
882    ) -> zvec_error_code_t;
883    pub fn zvec_collection_drop_column(
884        collection: *mut zvec_collection_t,
885        column_name: *const c_char,
886    ) -> zvec_error_code_t;
887    pub fn zvec_collection_alter_column(
888        collection: *mut zvec_collection_t,
889        column_name: *const c_char,
890        new_name: *const c_char,
891        new_schema: *const zvec_field_schema_t,
892    ) -> zvec_error_code_t;
893
894    // -------------------------------------------------------------------------
895    // DML
896    // Functions for data manipulation: insert, update, upsert, and delete operations.
897    // -------------------------------------------------------------------------
898    pub fn zvec_collection_insert(
899        collection: *mut zvec_collection_t,
900        docs: *const *const zvec_doc_t,
901        doc_count: usize,
902        success_count: *mut usize,
903        error_count: *mut usize,
904    ) -> zvec_error_code_t;
905    pub fn zvec_collection_insert_with_results(
906        collection: *mut zvec_collection_t,
907        docs: *const *const zvec_doc_t,
908        doc_count: usize,
909        results: *mut *mut zvec_write_result_t,
910        result_count: *mut usize,
911    ) -> zvec_error_code_t;
912    pub fn zvec_collection_update(
913        collection: *mut zvec_collection_t,
914        docs: *const *const zvec_doc_t,
915        doc_count: usize,
916        success_count: *mut usize,
917        error_count: *mut usize,
918    ) -> zvec_error_code_t;
919    pub fn zvec_collection_update_with_results(
920        collection: *mut zvec_collection_t,
921        docs: *const *const zvec_doc_t,
922        doc_count: usize,
923        results: *mut *mut zvec_write_result_t,
924        result_count: *mut usize,
925    ) -> zvec_error_code_t;
926    pub fn zvec_collection_upsert(
927        collection: *mut zvec_collection_t,
928        docs: *const *const zvec_doc_t,
929        doc_count: usize,
930        success_count: *mut usize,
931        error_count: *mut usize,
932    ) -> zvec_error_code_t;
933    pub fn zvec_collection_upsert_with_results(
934        collection: *mut zvec_collection_t,
935        docs: *const *const zvec_doc_t,
936        doc_count: usize,
937        results: *mut *mut zvec_write_result_t,
938        result_count: *mut usize,
939    ) -> zvec_error_code_t;
940    pub fn zvec_collection_delete(
941        collection: *mut zvec_collection_t,
942        pks: *const *const c_char,
943        pk_count: usize,
944        success_count: *mut usize,
945        error_count: *mut usize,
946    ) -> zvec_error_code_t;
947    pub fn zvec_collection_delete_with_results(
948        collection: *mut zvec_collection_t,
949        pks: *const *const c_char,
950        pk_count: usize,
951        results: *mut *mut zvec_write_result_t,
952        result_count: *mut usize,
953    ) -> zvec_error_code_t;
954    pub fn zvec_write_results_free(results: *mut zvec_write_result_t, result_count: usize);
955    pub fn zvec_collection_delete_by_filter(
956        collection: *mut zvec_collection_t,
957        filter: *const c_char,
958    ) -> zvec_error_code_t;
959
960    // -------------------------------------------------------------------------
961    // DQL
962    // Functions for data querying: vector search and document fetch operations.
963    // -------------------------------------------------------------------------
964    pub fn zvec_collection_query(
965        collection: *const zvec_collection_t,
966        query: *const zvec_vector_query_t,
967        results: *mut *mut *mut zvec_doc_t,
968        result_count: *mut usize,
969    ) -> zvec_error_code_t;
970    pub fn zvec_collection_multi_query(
971        collection: *const zvec_collection_t,
972        query: *const zvec_multi_query_t,
973        results: *mut *mut *mut zvec_doc_t,
974        result_count: *mut usize,
975    ) -> zvec_error_code_t;
976    pub fn zvec_collection_fetch(
977        collection: *mut zvec_collection_t,
978        primary_keys: *const *const c_char,
979        count: usize,
980        output_fields: *const *const c_char,
981        output_field_count: usize,
982        include_vector: bool,
983        documents: *mut *mut *mut zvec_doc_t,
984        found_count: *mut usize,
985    ) -> zvec_error_code_t;
986
987    // -------------------------------------------------------------------------
988    // HNSW Query Parameters
989    // Functions for creating and configuring HNSW index query parameters.
990    // -------------------------------------------------------------------------
991    pub fn zvec_query_params_hnsw_create(
992        ef: c_int,
993        radius: f32,
994        is_linear: bool,
995        is_using_refiner: bool,
996    ) -> *mut zvec_hnsw_query_params_t;
997    pub fn zvec_query_params_hnsw_destroy(params: *mut zvec_hnsw_query_params_t);
998    pub fn zvec_query_params_hnsw_set_ef(
999        params: *mut zvec_hnsw_query_params_t,
1000        ef: c_int,
1001    ) -> zvec_error_code_t;
1002    pub fn zvec_query_params_hnsw_get_ef(params: *const zvec_hnsw_query_params_t) -> c_int;
1003    pub fn zvec_query_params_hnsw_set_radius(
1004        params: *mut zvec_hnsw_query_params_t,
1005        radius: f32,
1006    ) -> zvec_error_code_t;
1007    pub fn zvec_query_params_hnsw_get_radius(params: *const zvec_hnsw_query_params_t) -> f32;
1008    pub fn zvec_query_params_hnsw_set_is_linear(
1009        params: *mut zvec_hnsw_query_params_t,
1010        is_linear: bool,
1011    ) -> zvec_error_code_t;
1012    pub fn zvec_query_params_hnsw_get_is_linear(params: *const zvec_hnsw_query_params_t) -> bool;
1013    pub fn zvec_query_params_hnsw_set_is_using_refiner(
1014        params: *mut zvec_hnsw_query_params_t,
1015        is_using_refiner: bool,
1016    ) -> zvec_error_code_t;
1017    pub fn zvec_query_params_hnsw_get_is_using_refiner(
1018        params: *const zvec_hnsw_query_params_t,
1019    ) -> bool;
1020
1021    // -------------------------------------------------------------------------
1022    // IVF Query Parameters
1023    // Functions for creating and configuring IVF index query parameters.
1024    // -------------------------------------------------------------------------
1025    pub fn zvec_query_params_ivf_create(
1026        nprobe: c_int,
1027        is_using_refiner: bool,
1028        scale_factor: f32,
1029    ) -> *mut zvec_ivf_query_params_t;
1030    pub fn zvec_query_params_ivf_destroy(params: *mut zvec_ivf_query_params_t);
1031    pub fn zvec_query_params_ivf_set_nprobe(
1032        params: *mut zvec_ivf_query_params_t,
1033        nprobe: c_int,
1034    ) -> zvec_error_code_t;
1035    pub fn zvec_query_params_ivf_get_nprobe(params: *const zvec_ivf_query_params_t) -> c_int;
1036    pub fn zvec_query_params_ivf_set_scale_factor(
1037        params: *mut zvec_ivf_query_params_t,
1038        scale_factor: f32,
1039    ) -> zvec_error_code_t;
1040    pub fn zvec_query_params_ivf_get_scale_factor(params: *const zvec_ivf_query_params_t) -> f32;
1041    pub fn zvec_query_params_ivf_set_radius(
1042        params: *mut zvec_ivf_query_params_t,
1043        radius: f32,
1044    ) -> zvec_error_code_t;
1045    pub fn zvec_query_params_ivf_get_radius(params: *const zvec_ivf_query_params_t) -> f32;
1046    pub fn zvec_query_params_ivf_set_is_linear(
1047        params: *mut zvec_ivf_query_params_t,
1048        is_linear: bool,
1049    ) -> zvec_error_code_t;
1050    pub fn zvec_query_params_ivf_get_is_linear(params: *const zvec_ivf_query_params_t) -> bool;
1051    pub fn zvec_query_params_ivf_set_is_using_refiner(
1052        params: *mut zvec_ivf_query_params_t,
1053        is_using_refiner: bool,
1054    ) -> zvec_error_code_t;
1055    pub fn zvec_query_params_ivf_get_is_using_refiner(
1056        params: *const zvec_ivf_query_params_t,
1057    ) -> bool;
1058
1059    // -------------------------------------------------------------------------
1060    // Flat Query Parameters
1061    // Functions for creating and configuring flat index query parameters.
1062    // -------------------------------------------------------------------------
1063    pub fn zvec_query_params_flat_create(
1064        is_using_refiner: bool,
1065        scale_factor: f32,
1066    ) -> *mut zvec_flat_query_params_t;
1067    pub fn zvec_query_params_flat_destroy(params: *mut zvec_flat_query_params_t);
1068    pub fn zvec_query_params_flat_set_scale_factor(
1069        params: *mut zvec_flat_query_params_t,
1070        scale_factor: f32,
1071    ) -> zvec_error_code_t;
1072    pub fn zvec_query_params_flat_get_scale_factor(params: *const zvec_flat_query_params_t) -> f32;
1073    pub fn zvec_query_params_flat_set_radius(
1074        params: *mut zvec_flat_query_params_t,
1075        radius: f32,
1076    ) -> zvec_error_code_t;
1077    pub fn zvec_query_params_flat_get_radius(params: *const zvec_flat_query_params_t) -> f32;
1078    pub fn zvec_query_params_flat_set_is_linear(
1079        params: *mut zvec_flat_query_params_t,
1080        is_linear: bool,
1081    ) -> zvec_error_code_t;
1082    pub fn zvec_query_params_flat_get_is_linear(params: *const zvec_flat_query_params_t) -> bool;
1083    pub fn zvec_query_params_flat_set_is_using_refiner(
1084        params: *mut zvec_flat_query_params_t,
1085        is_using_refiner: bool,
1086    ) -> zvec_error_code_t;
1087    pub fn zvec_query_params_flat_get_is_using_refiner(
1088        params: *const zvec_flat_query_params_t,
1089    ) -> bool;
1090
1091    // -------------------------------------------------------------------------
1092    // FTS Query Parameters
1093    // Functions for creating and configuring FTS query parameters.
1094    // -------------------------------------------------------------------------
1095    pub fn zvec_query_params_fts_create(
1096        default_operator: *const c_char,
1097    ) -> *mut zvec_fts_query_params_t;
1098    pub fn zvec_query_params_fts_destroy(params: *mut zvec_fts_query_params_t);
1099    pub fn zvec_query_params_fts_set_default_operator(
1100        params: *mut zvec_fts_query_params_t,
1101        default_operator: *const c_char,
1102    ) -> zvec_error_code_t;
1103    pub fn zvec_query_params_fts_get_default_operator(
1104        params: *const zvec_fts_query_params_t,
1105    ) -> *const c_char;
1106
1107    // -------------------------------------------------------------------------
1108    // FTS Query Payload
1109    // Functions for creating and configuring FTS query payloads.
1110    // -------------------------------------------------------------------------
1111    pub fn zvec_fts_create() -> *mut zvec_fts_t;
1112    pub fn zvec_fts_destroy(fts: *mut zvec_fts_t);
1113    pub fn zvec_fts_set_query_string(
1114        fts: *mut zvec_fts_t,
1115        query_string: *const c_char,
1116    ) -> zvec_error_code_t;
1117    pub fn zvec_fts_set_match_string(
1118        fts: *mut zvec_fts_t,
1119        match_string: *const c_char,
1120    ) -> zvec_error_code_t;
1121    pub fn zvec_fts_get_query_string(fts: *const zvec_fts_t) -> *const c_char;
1122    pub fn zvec_fts_get_match_string(fts: *const zvec_fts_t) -> *const c_char;
1123
1124    // -------------------------------------------------------------------------
1125    // Vector Query
1126    // Functions for creating and configuring vector similarity queries.
1127    // -------------------------------------------------------------------------
1128    pub fn zvec_vector_query_create() -> *mut zvec_vector_query_t;
1129    pub fn zvec_vector_query_destroy(query: *mut zvec_vector_query_t);
1130    pub fn zvec_vector_query_set_topk(
1131        query: *mut zvec_vector_query_t,
1132        topk: c_int,
1133    ) -> zvec_error_code_t;
1134    pub fn zvec_vector_query_get_topk(query: *const zvec_vector_query_t) -> c_int;
1135    pub fn zvec_vector_query_set_field_name(
1136        query: *mut zvec_vector_query_t,
1137        field_name: *const c_char,
1138    ) -> zvec_error_code_t;
1139    pub fn zvec_vector_query_get_field_name(query: *const zvec_vector_query_t) -> *const c_char;
1140    pub fn zvec_vector_query_set_query_vector(
1141        query: *mut zvec_vector_query_t,
1142        data: *const c_void,
1143        size: usize,
1144    ) -> zvec_error_code_t;
1145    pub fn zvec_vector_query_set_filter(
1146        query: *mut zvec_vector_query_t,
1147        filter: *const c_char,
1148    ) -> zvec_error_code_t;
1149    pub fn zvec_vector_query_get_filter(query: *const zvec_vector_query_t) -> *const c_char;
1150    pub fn zvec_vector_query_set_include_vector(
1151        query: *mut zvec_vector_query_t,
1152        include: bool,
1153    ) -> zvec_error_code_t;
1154    pub fn zvec_vector_query_get_include_vector(query: *const zvec_vector_query_t) -> bool;
1155    pub fn zvec_vector_query_set_include_doc_id(
1156        query: *mut zvec_vector_query_t,
1157        include: bool,
1158    ) -> zvec_error_code_t;
1159    pub fn zvec_vector_query_get_include_doc_id(query: *const zvec_vector_query_t) -> bool;
1160    pub fn zvec_vector_query_set_output_fields(
1161        query: *mut zvec_vector_query_t,
1162        fields: *const *const c_char,
1163        count: usize,
1164    ) -> zvec_error_code_t;
1165    pub fn zvec_vector_query_get_output_fields(
1166        query: *const zvec_vector_query_t,
1167        fields: *mut *mut *const c_char,
1168        count: *mut usize,
1169    ) -> zvec_error_code_t;
1170    pub fn zvec_vector_query_set_query_params(
1171        query: *mut zvec_vector_query_t,
1172        params: *mut c_void,
1173    ) -> zvec_error_code_t;
1174    pub fn zvec_vector_query_set_hnsw_params(
1175        query: *mut zvec_vector_query_t,
1176        hnsw_params: *mut zvec_hnsw_query_params_t,
1177    ) -> zvec_error_code_t;
1178    pub fn zvec_vector_query_set_ivf_params(
1179        query: *mut zvec_vector_query_t,
1180        ivf_params: *mut zvec_ivf_query_params_t,
1181    ) -> zvec_error_code_t;
1182    pub fn zvec_vector_query_set_flat_params(
1183        query: *mut zvec_vector_query_t,
1184        flat_params: *mut zvec_flat_query_params_t,
1185    ) -> zvec_error_code_t;
1186    pub fn zvec_vector_query_set_fts_params(
1187        query: *mut zvec_vector_query_t,
1188        fts_params: *mut zvec_fts_query_params_t,
1189    ) -> zvec_error_code_t;
1190    pub fn zvec_vector_query_set_fts(
1191        query: *mut zvec_vector_query_t,
1192        fts: *const zvec_fts_t,
1193    ) -> zvec_error_code_t;
1194    pub fn zvec_vector_query_get_fts(query: *const zvec_vector_query_t) -> *const zvec_fts_t;
1195
1196    // -------------------------------------------------------------------------
1197    // Group By Vector Query
1198    // Functions for creating and configuring grouped vector queries.
1199    // -------------------------------------------------------------------------
1200    pub fn zvec_group_by_vector_query_create() -> *mut zvec_group_by_vector_query_t;
1201    pub fn zvec_group_by_vector_query_destroy(query: *mut zvec_group_by_vector_query_t);
1202    pub fn zvec_group_by_vector_query_set_field_name(
1203        query: *mut zvec_group_by_vector_query_t,
1204        field_name: *const c_char,
1205    ) -> zvec_error_code_t;
1206    pub fn zvec_group_by_vector_query_get_field_name(
1207        query: *const zvec_group_by_vector_query_t,
1208    ) -> *const c_char;
1209    pub fn zvec_group_by_vector_query_set_group_by_field_name(
1210        query: *mut zvec_group_by_vector_query_t,
1211        field_name: *const c_char,
1212    ) -> zvec_error_code_t;
1213    pub fn zvec_group_by_vector_query_get_group_by_field_name(
1214        query: *const zvec_group_by_vector_query_t,
1215    ) -> *const c_char;
1216    pub fn zvec_group_by_vector_query_set_group_count(
1217        query: *mut zvec_group_by_vector_query_t,
1218        count: u32,
1219    ) -> zvec_error_code_t;
1220    pub fn zvec_group_by_vector_query_get_group_count(
1221        query: *const zvec_group_by_vector_query_t,
1222    ) -> u32;
1223    pub fn zvec_group_by_vector_query_set_group_topk(
1224        query: *mut zvec_group_by_vector_query_t,
1225        topk: u32,
1226    ) -> zvec_error_code_t;
1227    pub fn zvec_group_by_vector_query_get_group_topk(
1228        query: *const zvec_group_by_vector_query_t,
1229    ) -> u32;
1230    pub fn zvec_group_by_vector_query_set_query_vector(
1231        query: *mut zvec_group_by_vector_query_t,
1232        data: *const c_void,
1233        size: usize,
1234    ) -> zvec_error_code_t;
1235    pub fn zvec_group_by_vector_query_set_filter(
1236        query: *mut zvec_group_by_vector_query_t,
1237        filter: *const c_char,
1238    ) -> zvec_error_code_t;
1239    pub fn zvec_group_by_vector_query_get_filter(
1240        query: *const zvec_group_by_vector_query_t,
1241    ) -> *const c_char;
1242    pub fn zvec_group_by_vector_query_set_include_vector(
1243        query: *mut zvec_group_by_vector_query_t,
1244        include: bool,
1245    ) -> zvec_error_code_t;
1246    pub fn zvec_group_by_vector_query_get_include_vector(
1247        query: *const zvec_group_by_vector_query_t,
1248    ) -> bool;
1249    pub fn zvec_group_by_vector_query_set_output_fields(
1250        query: *mut zvec_group_by_vector_query_t,
1251        fields: *const *const c_char,
1252        count: usize,
1253    ) -> zvec_error_code_t;
1254    pub fn zvec_group_by_vector_query_get_output_fields(
1255        query: *mut zvec_group_by_vector_query_t,
1256        fields: *mut *mut *const c_char,
1257        count: *mut usize,
1258    ) -> zvec_error_code_t;
1259    pub fn zvec_group_by_vector_query_set_query_params(
1260        query: *mut zvec_group_by_vector_query_t,
1261        params: *mut c_void,
1262    ) -> zvec_error_code_t;
1263    pub fn zvec_group_by_vector_query_set_hnsw_params(
1264        query: *mut zvec_group_by_vector_query_t,
1265        hnsw_params: *mut zvec_hnsw_query_params_t,
1266    ) -> zvec_error_code_t;
1267    pub fn zvec_group_by_vector_query_set_ivf_params(
1268        query: *mut zvec_group_by_vector_query_t,
1269        ivf_params: *mut zvec_ivf_query_params_t,
1270    ) -> zvec_error_code_t;
1271    pub fn zvec_group_by_vector_query_set_flat_params(
1272        query: *mut zvec_group_by_vector_query_t,
1273        flat_params: *mut zvec_flat_query_params_t,
1274    ) -> zvec_error_code_t;
1275
1276    // -------------------------------------------------------------------------
1277    // Multi Query / Sub Query
1278    // Functions for creating and configuring multi-queries (hybrid search with
1279    // re-ranking) and their per-field sub-queries.
1280    // -------------------------------------------------------------------------
1281    pub fn zvec_multi_query_create() -> *mut zvec_multi_query_t;
1282    pub fn zvec_multi_query_destroy(query: *mut zvec_multi_query_t);
1283    pub fn zvec_multi_query_add_sub_query(
1284        query: *mut zvec_multi_query_t,
1285        sub_query: *const zvec_sub_query_t,
1286    ) -> zvec_error_code_t;
1287    pub fn zvec_multi_query_get_sub_query_count(query: *const zvec_multi_query_t) -> usize;
1288    pub fn zvec_multi_query_set_topk(
1289        query: *mut zvec_multi_query_t,
1290        topk: c_int,
1291    ) -> zvec_error_code_t;
1292    pub fn zvec_multi_query_get_topk(query: *const zvec_multi_query_t) -> c_int;
1293    pub fn zvec_multi_query_set_filter(
1294        query: *mut zvec_multi_query_t,
1295        filter: *const c_char,
1296    ) -> zvec_error_code_t;
1297    pub fn zvec_multi_query_get_filter(query: *const zvec_multi_query_t) -> *const c_char;
1298    pub fn zvec_multi_query_set_include_vector(
1299        query: *mut zvec_multi_query_t,
1300        include: bool,
1301    ) -> zvec_error_code_t;
1302    pub fn zvec_multi_query_get_include_vector(query: *const zvec_multi_query_t) -> bool;
1303    pub fn zvec_multi_query_set_output_fields(
1304        query: *mut zvec_multi_query_t,
1305        fields: *const *const c_char,
1306        count: usize,
1307    ) -> zvec_error_code_t;
1308    pub fn zvec_multi_query_get_output_fields(
1309        query: *mut zvec_multi_query_t,
1310        fields: *mut *mut *const c_char,
1311        count: *mut usize,
1312    ) -> zvec_error_code_t;
1313    pub fn zvec_multi_query_set_rerank_rrf(
1314        query: *mut zvec_multi_query_t,
1315        rank_constant: c_int,
1316    ) -> zvec_error_code_t;
1317    pub fn zvec_multi_query_set_rerank_weighted(
1318        query: *mut zvec_multi_query_t,
1319        weights: *const f64,
1320        weight_count: usize,
1321    ) -> zvec_error_code_t;
1322
1323    pub fn zvec_sub_query_create() -> *mut zvec_sub_query_t;
1324    pub fn zvec_sub_query_destroy(query: *mut zvec_sub_query_t);
1325    pub fn zvec_sub_query_set_num_candidates(
1326        query: *mut zvec_sub_query_t,
1327        num_candidates: c_int,
1328    ) -> zvec_error_code_t;
1329    pub fn zvec_sub_query_get_num_candidates(query: *const zvec_sub_query_t) -> c_int;
1330    pub fn zvec_sub_query_set_field_name(
1331        query: *mut zvec_sub_query_t,
1332        field_name: *const c_char,
1333    ) -> zvec_error_code_t;
1334    pub fn zvec_sub_query_get_field_name(query: *const zvec_sub_query_t) -> *const c_char;
1335    pub fn zvec_sub_query_set_query_vector(
1336        query: *mut zvec_sub_query_t,
1337        data: *const c_void,
1338        size: usize,
1339    ) -> zvec_error_code_t;
1340    pub fn zvec_sub_query_set_sparse_vector(
1341        query: *mut zvec_sub_query_t,
1342        indices: *const u32,
1343        values: *const f32,
1344        count: usize,
1345    ) -> zvec_error_code_t;
1346    pub fn zvec_sub_query_set_sparse_indices(
1347        query: *mut zvec_sub_query_t,
1348        indices: *const u32,
1349        count: usize,
1350    ) -> zvec_error_code_t;
1351    pub fn zvec_sub_query_set_sparse_values(
1352        query: *mut zvec_sub_query_t,
1353        values: *const f32,
1354        count: usize,
1355    ) -> zvec_error_code_t;
1356    pub fn zvec_sub_query_set_hnsw_params(
1357        query: *mut zvec_sub_query_t,
1358        hnsw_params: *mut zvec_hnsw_query_params_t,
1359    ) -> zvec_error_code_t;
1360    pub fn zvec_sub_query_set_ivf_params(
1361        query: *mut zvec_sub_query_t,
1362        ivf_params: *mut zvec_ivf_query_params_t,
1363    ) -> zvec_error_code_t;
1364    pub fn zvec_sub_query_set_flat_params(
1365        query: *mut zvec_sub_query_t,
1366        flat_params: *mut zvec_flat_query_params_t,
1367    ) -> zvec_error_code_t;
1368    pub fn zvec_sub_query_set_fts_params(
1369        query: *mut zvec_sub_query_t,
1370        fts_params: *mut zvec_fts_query_params_t,
1371    ) -> zvec_error_code_t;
1372    pub fn zvec_sub_query_set_fts(
1373        query: *mut zvec_sub_query_t,
1374        fts: *const zvec_fts_t,
1375    ) -> zvec_error_code_t;
1376
1377    // -------------------------------------------------------------------------
1378    // Document Operations
1379    // Functions for creating, manipulating, and serializing documents.
1380    // -------------------------------------------------------------------------
1381    pub fn zvec_doc_create() -> *mut zvec_doc_t;
1382    pub fn zvec_doc_destroy(doc: *mut zvec_doc_t);
1383    pub fn zvec_doc_clear(doc: *mut zvec_doc_t);
1384    pub fn zvec_doc_add_field_by_value(
1385        doc: *mut zvec_doc_t,
1386        field_name: *const c_char,
1387        data_type: zvec_data_type_t,
1388        value: *const c_void,
1389        value_size: usize,
1390    ) -> zvec_error_code_t;
1391    pub fn zvec_doc_remove_field(
1392        doc: *mut zvec_doc_t,
1393        field_name: *const c_char,
1394    ) -> zvec_error_code_t;
1395    pub fn zvec_docs_free(documents: *mut *mut zvec_doc_t, count: usize);
1396    pub fn zvec_doc_set_pk(doc: *mut zvec_doc_t, pk: *const c_char);
1397    pub fn zvec_doc_set_doc_id(doc: *mut zvec_doc_t, doc_id: u64);
1398    pub fn zvec_doc_set_score(doc: *mut zvec_doc_t, score: f32);
1399    pub fn zvec_doc_set_operator(doc: *mut zvec_doc_t, op: zvec_doc_operator_t);
1400    pub fn zvec_doc_set_field_null(
1401        doc: *mut zvec_doc_t,
1402        field_name: *const c_char,
1403    ) -> zvec_error_code_t;
1404    pub fn zvec_doc_get_doc_id(doc: *const zvec_doc_t) -> u64;
1405    pub fn zvec_doc_get_score(doc: *const zvec_doc_t) -> f32;
1406    pub fn zvec_doc_get_operator(doc: *const zvec_doc_t) -> zvec_doc_operator_t;
1407    pub fn zvec_doc_get_field_count(doc: *const zvec_doc_t) -> usize;
1408    pub fn zvec_doc_get_pk_pointer(doc: *const zvec_doc_t) -> *const c_char;
1409    pub fn zvec_doc_get_pk_copy(doc: *const zvec_doc_t) -> *const c_char;
1410    pub fn zvec_doc_get_field_value_basic(
1411        doc: *const zvec_doc_t,
1412        field_name: *const c_char,
1413        field_type: zvec_data_type_t,
1414        value_buffer: *mut c_void,
1415        buffer_size: usize,
1416    ) -> zvec_error_code_t;
1417    pub fn zvec_doc_get_field_value_copy(
1418        doc: *const zvec_doc_t,
1419        field_name: *const c_char,
1420        field_type: zvec_data_type_t,
1421        value: *mut *mut c_void,
1422        value_size: *mut usize,
1423    ) -> zvec_error_code_t;
1424    pub fn zvec_doc_get_field_value_pointer(
1425        doc: *const zvec_doc_t,
1426        field_name: *const c_char,
1427        field_type: zvec_data_type_t,
1428        value: *mut *const c_void,
1429        value_size: *mut usize,
1430    ) -> zvec_error_code_t;
1431    pub fn zvec_doc_is_empty(doc: *const zvec_doc_t) -> bool;
1432    pub fn zvec_doc_has_field(doc: *const zvec_doc_t, field_name: *const c_char) -> bool;
1433    pub fn zvec_doc_has_field_value(doc: *const zvec_doc_t, field_name: *const c_char) -> bool;
1434    pub fn zvec_doc_is_field_null(doc: *const zvec_doc_t, field_name: *const c_char) -> bool;
1435    pub fn zvec_doc_get_field_names(
1436        doc: *const zvec_doc_t,
1437        field_names: *mut *mut *mut c_char,
1438        count: *mut usize,
1439    ) -> zvec_error_code_t;
1440    pub fn zvec_free_str_array(array: *mut *mut c_char, count: usize);
1441    pub fn zvec_doc_serialize(
1442        doc: *const zvec_doc_t,
1443        data: *mut *mut u8,
1444        size: *mut usize,
1445    ) -> zvec_error_code_t;
1446    pub fn zvec_doc_deserialize(
1447        data: *const u8,
1448        size: usize,
1449        doc: *mut *mut zvec_doc_t,
1450    ) -> zvec_error_code_t;
1451    pub fn zvec_doc_merge(doc: *mut zvec_doc_t, other: *const zvec_doc_t);
1452    pub fn zvec_doc_memory_usage(doc: *const zvec_doc_t) -> usize;
1453    pub fn zvec_doc_validate(
1454        doc: *const zvec_doc_t,
1455        schema: *const zvec_collection_schema_t,
1456        is_update: bool,
1457        error_msg: *mut *mut c_char,
1458    ) -> zvec_error_code_t;
1459    pub fn zvec_doc_to_detail_string(
1460        doc: *const zvec_doc_t,
1461        detail_str: *mut *mut c_char,
1462    ) -> zvec_error_code_t;
1463
1464    // -------------------------------------------------------------------------
1465    // Utility Functions
1466    // Helper functions for converting enums to string representations.
1467    // -------------------------------------------------------------------------
1468    pub fn zvec_data_type_to_string(data_type: zvec_data_type_t) -> *const c_char;
1469    pub fn zvec_index_type_to_string(index_type: zvec_index_type_t) -> *const c_char;
1470    pub fn zvec_metric_type_to_string(metric_type: zvec_metric_type_t) -> *const c_char;
1471}