Derive Macro AggregateDerive

Source
#[derive(AggregateDerive)]
Expand description

Define an aggregate function for your extension by deriving AggregateDerive on a struct that implements the AggFunc trait.

use limbo_ext::{register_extension, Value, AggregateDerive, AggFunc};

#[derive(AggregateDerive)]
struct SumPlusOne;

impl AggFunc for SumPlusOne {
  type State = i64;
  const NAME: &'static str = "sum_plus_one";
  const ARGS: i32 = 1;
  fn step(state: &mut Self::State, args: &[Value]) {
     let Some(val) = args[0].to_integer() else {
       return;
    };
    *state += val;
    }
    fn finalize(state: Self::State) -> Value {
       Value::from_integer(state + 1)
    }
}