Skip to main content

alibi_plugins/email_verification/
types.rs

1use crate::authentication_helpers::{JsonField, JsonFieldKind, RequestBody};
2use serde::{Deserialize, Serialize};
3
4/// Body of the public `sendVerificationEmail` server operation.
5#[derive(Debug, Clone, Serialize, Deserialize)]
6pub struct SendVerificationEmailRequest {
7    pub email: String,
8    #[serde(rename = "callbackURL", skip_serializing_if = "Option::is_none")]
9    pub callback_url: Option<String>,
10}
11
12impl RequestBody for SendVerificationEmailRequest {
13    const FIELDS: &'static [JsonField] = &[
14        JsonField {
15            name: "email",
16            kind: JsonFieldKind::Email,
17            required: true,
18        },
19        JsonField::string("callbackURL", false),
20    ];
21}
22
23/// Query parameters for `GET /verify-email`.
24#[derive(Debug, Clone, Serialize, Deserialize)]
25pub struct VerifyEmailQuery {
26    pub token: String,
27    #[serde(rename = "callbackURL", skip_serializing_if = "Option::is_none")]
28    pub callback_url: Option<String>,
29}
30
31/// Result of the verify-email core function.
32pub(crate) enum VerifyEmailResult {
33    Redirect {
34        url: String,
35        session_token: Option<String>,
36    },
37    Json {
38        body: serde_json::Value,
39        session_token: Option<String>,
40    },
41}
42
43impl RequestBody for VerifyEmailQuery {
44    const FIELDS: &'static [JsonField] = &[
45        JsonField::string("token", true),
46        JsonField::string("callbackURL", false),
47    ];
48}
49
50/// Successful result of the public `verifyEmail` server operation.
51#[derive(Debug, Clone, Serialize, Deserialize)]
52pub struct VerifyEmailResponse {
53    pub status: bool,
54    pub user: Option<alibi_core::wire::UserView>,
55}