rs_firebase_admin_sdk/auth/oob_code/
mod.rs

1use serde::{Deserialize, Serialize};
2
3#[derive(Deserialize, Serialize, Debug, Clone)]
4pub enum OobCodeActionType {
5    #[serde(rename = "VERIFY_EMAIL")]
6    VerifyEmail,
7    #[serde(rename = "EMAIL_SIGNIN")]
8    EmailSignin,
9    #[serde(rename = "PASSWORD_RESET")]
10    PasswordReset,
11    #[serde(rename = "RECOVER_EMAIL")]
12    RecoverEmail,
13}
14
15#[derive(Serialize, Debug, Clone, Default)]
16#[serde(rename_all = "camelCase")]
17pub struct OobCodeAction {
18    request_type: Option<OobCodeActionType>,
19    email: Option<String>,
20    return_oob_link: Option<bool>,
21    #[serde(skip_serializing_if = "Option::is_none")]
22    continue_url: Option<String>,
23    #[serde(skip_serializing_if = "Option::is_none")]
24    can_handle_code_in_app: Option<bool>,
25    #[serde(skip_serializing_if = "Option::is_none")]
26    dynamic_link_domain: Option<String>,
27    #[serde(skip_serializing_if = "Option::is_none")]
28    ios_bundle_id: Option<String>,
29    #[serde(skip_serializing_if = "Option::is_none")]
30    android_package_name: Option<String>,
31    #[serde(skip_serializing_if = "Option::is_none")]
32    android_minimum_version: Option<String>,
33    #[serde(skip_serializing_if = "Option::is_none")]
34    android_install_app: Option<bool>,
35}
36
37impl OobCodeAction {
38    pub fn builder(action_type: OobCodeActionType, email: String) -> OobCodeActionBuilder {
39        OobCodeActionBuilder::new(action_type, email)
40    }
41}
42
43#[derive(Debug, Clone)]
44pub struct OobCodeActionBuilder {
45    action: OobCodeAction,
46}
47
48impl OobCodeActionBuilder {
49    pub fn new(action_type: OobCodeActionType, email: String) -> Self {
50        Self {
51            action: OobCodeAction {
52                request_type: Some(action_type),
53                email: Some(email),
54                return_oob_link: Some(true),
55                ..Default::default()
56            },
57        }
58    }
59
60    pub fn with_continue_url(mut self, continue_url: String) -> Self {
61        self.action.continue_url = Some(continue_url);
62
63        self
64    }
65
66    pub fn with_ios_settings(mut self, continue_url: String, bundle_id: String) -> Self {
67        self.action.continue_url = Some(continue_url);
68        self.action.ios_bundle_id = Some(bundle_id);
69        self.action.can_handle_code_in_app = Some(true);
70
71        self
72    }
73
74    pub fn with_android_settings(
75        mut self,
76        continue_url: String,
77        android_package_name: String,
78        android_minimum_version: Option<String>,
79        android_install_app: Option<bool>,
80    ) -> Self {
81        self.action.continue_url = Some(continue_url);
82        self.action.android_package_name = Some(android_package_name);
83        self.action.android_minimum_version = android_minimum_version;
84        self.action.android_install_app = android_install_app;
85        self.action.can_handle_code_in_app = Some(true);
86
87        self
88    }
89
90    pub fn build(self) -> OobCodeAction {
91        self.action
92    }
93}
94
95#[derive(Deserialize, Debug, Clone, Default)]
96#[serde(rename_all = "camelCase")]
97pub(crate) struct OobCodeActionLink {
98    pub oob_link: String,
99}