surrealdb-core-nightly 2.1.20250202

A nightly release of the surrealdb-core crate
Documentation
use crate::ctx::Context;
use crate::dbs::Options;
use crate::doc::CursorDoc;
use crate::err::Error;
use crate::sql::idiom::Idiom;
use crate::sql::value::Value;
use crate::sql::{Closure, Function};
use reblessive::tree::Stk;

pub async fn chain(
	(stk, ctx, opt, doc): (&mut Stk, &Context, Option<&Options>, Option<&CursorDoc>),
	(value, worker): (Value, Closure),
) -> Result<Value, Error> {
	if let Some(opt) = opt {
		let fnc = Function::Anonymous(worker.into(), vec![value], false);
		fnc.compute(stk, ctx, opt, doc).await
	} else {
		Ok(Value::None)
	}
}

pub async fn diff(
	(stk, ctx, opt, doc): (&mut Stk, &Context, Option<&Options>, Option<&CursorDoc>),
	(val1, val2): (Value, Value),
) -> Result<Value, Error> {
	if let Some(opt) = opt {
		let val1 = val1.compute(stk, ctx, opt, doc).await?;
		let val2 = val2.compute(stk, ctx, opt, doc).await?;
		Ok(val1.diff(&val2, Idiom::default()).into())
	} else {
		Ok(Value::None)
	}
}

pub async fn patch(
	(stk, ctx, opt, doc): (&mut Stk, &Context, Option<&Options>, Option<&CursorDoc>),
	(val, diff): (Value, Value),
) -> Result<Value, Error> {
	if let Some(opt) = opt {
		let mut val = val.compute(stk, ctx, opt, doc).await?;
		val.patch(diff)?;
		Ok(val)
	} else {
		Ok(Value::None)
	}
}