rs_firebase_admin_sdk/auth/oob_code/
mod.rs1use 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}