surrealdb-sql 1.1.0

Full type definitions for the SurrealQL query language
Documentation
use js::{prelude::Rest, Ctx};

use super::run;
use crate::value::Value;

mod uuid;

pub struct Package;

impl js::module::ModuleDef for Package {
	fn declare(decls: &mut js::module::Declarations) -> js::Result<()> {
		decls.declare("default")?;
		decls.declare("bool")?;
		decls.declare("enum")?;
		decls.declare("float")?;
		decls.declare("guid")?;
		decls.declare("int")?;
		decls.declare("string")?;
		decls.declare("time")?;
		decls.declare("ulid")?;
		decls.declare("uuid")?;
		Ok(())
	}
	fn evaluate<'js>(ctx: &js::Ctx<'js>, exports: &mut js::module::Exports<'js>) -> js::Result<()> {
		let default = js::Function::new(ctx.clone(), |ctx: Ctx<'js>, args: Rest<Value>| {
			run(ctx, "rand", args.0)
		})?
		.with_name("rand")?;
		let value = crate::fnc::script::modules::impl_module_def!(ctx, "rand", "bool", run,);
		exports.export("bool", value.clone())?;
		default.set("bool", value)?;
		let value = crate::fnc::script::modules::impl_module_def!(ctx, "rand", "enum", run,);
		exports.export("enum", value.clone())?;
		default.set("enum", value)?;
		let value = crate::fnc::script::modules::impl_module_def!(ctx, "rand", "float", run,);
		exports.export("float", value.clone())?;
		default.set("float", value)?;
		let value = crate::fnc::script::modules::impl_module_def!(ctx, "rand", "guid", run,);
		exports.export("guid", value.clone())?;
		default.set("guid", value)?;
		let value = crate::fnc::script::modules::impl_module_def!(ctx, "rand", "int", run,);
		exports.export("int", value.clone())?;
		default.set("int", value)?;
		let value = crate::fnc::script::modules::impl_module_def!(ctx, "rand", "string", run,);
		exports.export("string", value.clone())?;
		default.set("string", value)?;
		let value = crate::fnc::script::modules::impl_module_def!(ctx, "rand", "time", run,);
		exports.export("time", value.clone())?;
		default.set("time", value)?;
		let value = crate::fnc::script::modules::impl_module_def!(ctx, "rand", "ulid", run,);
		exports.export("ulid", value.clone())?;
		default.set("ulid", value)?;
		let value =
			crate::fnc::script::modules::impl_module_def!(ctx, "rand", "uuid", (uuid::Package),);
		exports.export("uuid", value.clone())?;
		default.set("uuid", value)?;
		exports.export("default", default)?;
		Ok(())
	}
}