API Overview
This section provides comprehensive documentation for the rayforce-rs API.
Module Structure
rayforce
├── ffi # Low-level FFI bindings
├── types # Type system
│ ├── scalars # Scalar types (RayI64, RayF64, etc.)
│ ├── containers# Container types (RayVector, RayList, etc.)
│ └── table # Table and query types
├── ipc # IPC/networking
└── error # Error types
Core Types
Runtime
Type
Description
Rayforce
Main runtime handle for RayforceDB
RayObj
Generic object wrapper for any RayforceDB value
Scalar Types
Type
Description
Rust Equivalent
RayI16
16-bit signed integer
i16
RayI32
32-bit signed integer
i32
RayI64
64-bit signed integer
i64
RayF64
64-bit floating point
f64
RayU8
Unsigned byte
u8
RayB8
Boolean
bool
RayC8
Character
char
RaySymbol
Interned string symbol
-
RayDate
Date value
chrono::NaiveDate
RayTime
Time value
chrono::NaiveTime
RayTimestamp
Timestamp
chrono::NaiveDateTime
RayGuid
UUID/GUID
uuid::Uuid
Container Types
Type
Description
RayVector<T>
Homogeneous array of values
RayList
Heterogeneous list
RayString
Character string
RayDict
Key-value dictionary
RayTable
Columnar table
Query Types
Type
Description
RaySelectQuery
SELECT query builder
RayUpdateQuery
UPDATE query builder
RayInsertQuery
INSERT query builder
RayUpsertQuery
UPSERT query builder
RayColumn
Table column reference
RayExpression
Query expression
Key Traits
RayType
All RayforceDB types implement the RayType trait:
pub trait RayType {
const TYPE_CODE : i8 ;
const RAY_NAME : & ' static str ;
fn ptr ( & self ) -> * mut obj_t ;
fn from_ptr ( ptr : * mut obj_t ) -> Self ;
}
From/Into Conversions
RayforceDB types support conversions from Rust primitives:
// From Rust primitives
let obj = RayObj :: from ( 42_ i64 );
let obj = RayObj :: from ( 3.14_ f64 );
let obj = RayObj :: from ( "hello" );
// Into Rust primitives
let value : i64 = obj . into ();
Error Handling
All fallible operations return Result<T, RayError>:
use rayforce ::{ Rayforce , RayError };
fn main () -> Result < (), RayError > {
let ray = Rayforce :: new () ? ;
let result = ray . eval ( "(+ 1 2)" ) ? ;
Ok (())
}
Error Types
Type
Description
RayforceError
Runtime initialization errors
RayObjError
Object creation/manipulation errors
ConversionError
Type conversion failures
TypeError
Type mismatch errors
IndexError
Out-of-bounds access
KeyError
Missing dictionary key
RuntimeError
General runtime errors
Quick Reference
Creating Values
use rayforce :: * ;
// Scalars
let i = RayI64 :: from_value ( 42 );
let f = RayF64 :: from_value ( 3.14 );
let s = RaySymbol :: new ( "name" );
// Vectors
let v : RayVector < i64 > = RayVector :: from_iter ([ 1 , 2 , 3 ]);
// Lists
let mut l = RayList :: new ();
l . push ( RayObj :: from ( 42_ i64 ));
// Dictionaries
let d = RayDict :: from_pairs ([
( RaySymbol :: new ( "key" ), RayObj :: from ( "value" )),
]);
Evaluating Expressions
let ray = Rayforce :: new () ? ;
// Evaluate string expressions
let result = ray . eval ( "(+ 1 2 3)" ) ? ;
// Evaluate with objects
let obj = RayObj :: from ( 42_ i64 );
let result = ray . eval_obj ( "(+ x 10)" , & obj ) ? ;
Querying Tables
// Create table
let table = ray . eval ( "(table [a b] (list [1 2] [3 4]))" ) ? ;
// Select query
let result = ray . eval ( r#"
(select {
a: a
from: table
where: (> b 2)})
"# ) ? ;
Next Steps
Scalars - Detailed scalar type documentation
Containers - Container types guide
Tables - Working with tables
Queries - Query operations
FFI - Low-level FFI details
IPC - Inter-process communication