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