surrealdb/api/method/
signup.rs

1use crate::api::conn::Method;
2use crate::api::conn::Param;
3use crate::api::conn::Router;
4use crate::api::Connection;
5use crate::api::Result;
6use crate::sql::Value;
7use serde::de::DeserializeOwned;
8use std::future::Future;
9use std::future::IntoFuture;
10use std::marker::PhantomData;
11use std::pin::Pin;
12
13/// A signup future
14#[derive(Debug)]
15#[must_use = "futures do nothing unless you `.await` or poll them"]
16pub struct Signup<'r, C: Connection, R> {
17	pub(super) router: Result<&'r Router<C>>,
18	pub(super) credentials: Result<Value>,
19	pub(super) response_type: PhantomData<R>,
20}
21
22impl<'r, Client, R> IntoFuture for Signup<'r, Client, R>
23where
24	Client: Connection,
25	R: DeserializeOwned,
26{
27	type Output = Result<R>;
28	type IntoFuture = Pin<Box<dyn Future<Output = Self::Output> + Send + Sync + 'r>>;
29
30	fn into_future(self) -> Self::IntoFuture {
31		let Signup {
32			router,
33			credentials,
34			..
35		} = self;
36		Box::pin(async move {
37			let router = router?;
38			let mut conn = Client::new(Method::Signup);
39			conn.execute(router, Param::new(vec![credentials?])).await
40		})
41	}
42}