dsq-functions

Crates.iodsq-functions
lib.rsdsq-functions
version0.1.0
created_at2025-12-15 17:53:25.558274+00
updated_at2025-12-15 17:53:25.558274+00
descriptionBuilt-in functions and registry for dsq
homepagehttps://datasetq.com
repositoryhttps://github.com/durableprogramming/dsq
max_upload_size
id1986456
size2,037,323
David J Berube (djberube)

documentation

https://docs.rs/dsq-functions

README

dsq-functions

Built-in functions and function registry for DSQ.

Overview

dsq-functions provides a comprehensive library of built-in functions for data manipulation, transformation, and analysis in DSQ queries. The crate includes a function registry system that allows for dynamic function lookup and extensibility.

Features

  • Extensive function library: Over 100+ built-in functions
  • Function registry: Dynamic function registration and lookup
  • Type-safe: Strong typing with automatic conversions
  • Extensible: Easy to add custom functions
  • Well-documented: Each function includes documentation and examples
  • Platform support: Works on native and WASM targets

Installation

Add this to your Cargo.toml:

[dependencies]
dsq-functions = "0.1"

Usage

Using Built-in Functions

use dsq_functions::{call_function, FunctionRegistry};
use dsq_shared::value::Value;

fn main() {
    let registry = FunctionRegistry::default();

    // Call a string function
    let input = Value::String("hello world".to_string());
    let result = call_function("uppercase", &[input], &registry)
        .expect("Function call failed");

    println!("Result: {:?}", result); // "HELLO WORLD"
}

Registering Custom Functions

use dsq_functions::{Function, FunctionRegistry};
use dsq_shared::value::Value;

fn main() {
    let mut registry = FunctionRegistry::new();

    // Register a custom function
    registry.register("double", Function {
        name: "double",
        description: "Doubles a number",
        handler: |args| {
            let num = args[0].as_number()?;
            Ok(Value::Number(num * 2.0))
        },
    });

    // Use the custom function
    let result = registry.call("double", &[Value::Number(5.0)])
        .expect("Function call failed");

    println!("Result: {:?}", result); // 10.0
}

Function Categories

String Functions

  • uppercase, lowercase, capitalize
  • split, join, trim
  • contains, startswith, endswith
  • replace, substring
  • length, reverse
  • slugify, unidecode

Array Functions

  • length, first, last, nth
  • map, filter, reduce
  • sort, sort_by, reverse
  • unique, unique_by
  • flatten, group_by
  • zip, unzip

Object Functions

  • keys, values, entries
  • has, get, set
  • merge, assign
  • pick, omit
  • to_entries, from_entries

Math Functions

  • abs, ceil, floor, round
  • min, max, sum, avg
  • sqrt, pow, log
  • sin, cos, tan

Date/Time Functions

  • now, date, time
  • format_date, parse_date
  • add_days, add_hours, add_minutes
  • year, month, day, hour, minute, second

Type Functions

  • type, is_string, is_number, is_boolean, is_array, is_object
  • to_string, to_number, to_boolean
  • parse_json, to_json

Encoding Functions

  • base64_encode, base64_decode
  • base32_encode, base32_decode
  • base58_encode, base58_decode
  • url_encode, url_decode
  • hex_encode, hex_decode

Hash Functions

  • md5, sha1, sha256
  • hash

UUID Functions

  • uuid_v4, uuid_v7
  • uuid_parse, uuid_validate

Utility Functions

  • select, empty, error
  • range, repeat, limit
  • random, random_int
  • debug, assert

API Documentation

For detailed API documentation, including complete function signatures and examples, see docs.rs/dsq-functions.

Performance

Functions are optimized for performance:

  • Zero-cost abstractions where possible
  • Efficient string operations using smartstring
  • Minimal allocations for numeric operations
  • Lazy evaluation support for collection operations

Contributing

Contributions are welcome! To add new functions:

  1. Define the function in the appropriate module
  2. Register it in the function registry
  3. Add tests and documentation
  4. Submit a pull request

See CONTRIBUTING.md for more details.

License

Licensed under either of:

at your option.

Commit count: 0

cargo fmt