use crate::ctx::Context; use crate::dbs::{Options, Transaction}; use crate::doc::CursorDoc; use crate::err::Error; use crate::sql::block::Block; use crate::sql::value::Value; use revision::revisioned; use serde::{Deserialize, Serialize}; use std::fmt; pub(crate) const TOKEN: &str = "$surrealdb::private::sql::Future"; #[derive(Clone, Debug, Eq, PartialEq, PartialOrd, Serialize, Deserialize, Hash)] #[serde(rename = "$surrealdb::private::sql::Future")] #[revisioned(revision = 1)] pub struct Future(pub Block); impl From for Future { fn from(v: Value) -> Self { Future(Block::from(v)) } } impl Future { /// Process this type returning a computed simple Value pub(crate) async fn compute( &self, ctx: &Context<'_>, opt: &Options, txn: &Transaction, doc: Option<&CursorDoc<'_>>, ) -> Result { // Process the future if enabled match opt.futures { true => self.0.compute(ctx, opt, txn, doc).await?.ok(), false => Ok(self.clone().into()), } } } impl fmt::Display for Future { fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { write!(f, " {}", self.0) } }