| Crates.io | devcycle-bucketing-rs |
| lib.rs | devcycle-bucketing-rs |
| version | 0.2.3 |
| created_at | 2025-11-17 22:37:06.729442+00 |
| updated_at | 2025-11-18 00:00:16.409072+00 |
| description | DevCycle Bucketing Library in Rust |
| homepage | |
| repository | https://github.com/DevCycleHQ/bucketing-rs |
| max_upload_size | |
| id | 1937628 |
| size | 632,833 |
This library has been configured to build as:
target/release/libdevcycle_bucketing_rs.rlib - Rust static libraryCargo.toml dependenciestarget/release/libdevcycle_bucketing_rs.a - Static library (39MB)target/release/libdevcycle_bucketing_rs.dylib - Dynamic library for macOS (2.7MB)target/release/libdevcycle_bucketing_rs.so - Dynamic library for Linuxtarget/release/libdevcycle_bucketing_rs.dll - Dynamic library for Windowsdevcycle_bucketing.h - C header file (generated with cbindgen)pkg-web/ - WASM package for web browserspkg-node/ - WASM package for Node.jspkg-bundler/ - WASM package for webpack/rollup/etc.use devcycle_bucketing_rs::{generate_bucketed_config_from_user, User};
use std::collections::HashMap;
#[tokio::main]
async fn main() {
let user = User {
user_id: "test-user".to_string(),
..Default::default()
};
let config = unsafe {
generate_bucketed_config_from_user(
"your-sdk-key",
user,
HashMap::new()
).await
};
}
#include "devcycle_bucketing.h"
int main() {
// Initialize full SDK state (config + queues + platform & custom data)
const char* sdk_key = "your-sdk-key";
const char* config_json = "{ /* full config JSON here */ }"; // See test resources for example structure
int init_rc = devcycle_init_sdk_key(sdk_key, config_json, NULL, NULL, NULL);
if (init_rc != 0) {
char* err = devcycle_get_last_error();
if (err) { fprintf(stderr, "Init error: %s\n", err); devcycle_free_string(err); }
return 1;
}
// Minimal user JSON (only userId needed, other fields defaulted internally)
const char* user_json = "{\"userId\":\"test-user\"}";
// Queue a custom event for the user (populated & bucketed internally)
int qrc = devcycle_queue_event(
sdk_key,
user_json,
"CustomEvent", // event type
"purchase", // customType
"sku-123", // target
19.99, // value
"{\"amount\":19.99}"
);
if (qrc != 0) {
char* err = devcycle_get_last_error();
if (err) { fprintf(stderr, "Queue event error: %s\n", err); devcycle_free_string(err); }
}
return 0;
}
Compile with:
gcc -o myapp myapp.c -L./target/release -ldevcycle_bucketing_rs -lpthread -ldl -lm
import init, {
init_event_queue,
generate_bucketed_config_from_user
} from './pkg-web/devcycle_bucketing_rs.js';
async function main() {
await init();
await init_event_queue('your-sdk-key', null);
const config = await generate_bucketed_config_from_user(
'your-sdk-key',
{user_id: 'test-user'},
null
);
console.log(config);
}
const {
init_event_queue,
generate_bucketed_config_from_user
} = require('./pkg-node/devcycle_bucketing_rs.js');
async function main() {
await init_event_queue('your-sdk-key', null);
const config = await generate_bucketed_config_from_user(
'your-sdk-key',
{user_id: 'test-user'},
null
);
console.log(config);
}
main().catch(console.error);
cargo install cbindgencurl https://rustwasm.github.io/wasm-pack/installer/init.sh -sSf | sh
The library supports conditional compilation via Cargo features:
ffi - Enable FFI bindings for C librarywasm - Enable WebAssembly bindingsBuild with specific features:
cargo build --release --features ffi
cargo build --release --features wasm
src/
├── lib.rs # Main library entry point
├── ffi.rs # C FFI bindings (feature: ffi)
├── wasm.rs # WASM bindings (feature: wasm)
├── bucketing/ # Core bucketing logic
├── config/ # Configuration management
├── events/ # Event queue system
├── segmentation/ # User segmentation
├── user/ # User data structures
└── util/ # Utilities
For detailed build instructions, see BUILD.md
Run tests:
cargo test
cargo test --features ffi
wasm-pack test --node --features wasm
The release builds are optimized for size, especially for WASM: