Skip to main content

openauth_core/options/
user.rs

1use std::collections::BTreeMap;
2
3use crate::db::{DbFieldType, DbValue};
4
5/// User lifecycle configuration.
6#[derive(Debug, Clone, Default, PartialEq)]
7pub struct UserOptions {
8    pub change_email: ChangeEmailOptions,
9    pub delete_user: DeleteUserOptions,
10    pub additional_fields: BTreeMap<String, UserAdditionalField>,
11}
12
13/// Runtime metadata for custom user fields accepted by user-writing endpoints.
14#[derive(Debug, Clone, PartialEq)]
15pub struct UserAdditionalField {
16    pub field_type: DbFieldType,
17    pub required: bool,
18    pub input: bool,
19    pub returned: bool,
20    pub default_value: Option<DbValue>,
21    pub db_name: Option<String>,
22}
23
24impl UserAdditionalField {
25    pub fn new(field_type: DbFieldType) -> Self {
26        Self {
27            field_type,
28            required: true,
29            input: true,
30            returned: true,
31            default_value: None,
32            db_name: None,
33        }
34    }
35
36    #[must_use]
37    pub fn optional(mut self) -> Self {
38        self.required = false;
39        self
40    }
41
42    #[must_use]
43    pub fn generated(mut self) -> Self {
44        self.input = false;
45        self
46    }
47
48    #[must_use]
49    pub fn hidden(mut self) -> Self {
50        self.returned = false;
51        self
52    }
53
54    #[must_use]
55    pub fn default_value(mut self, value: DbValue) -> Self {
56        self.default_value = Some(value);
57        self
58    }
59
60    #[must_use]
61    pub fn db_name(mut self, db_name: impl Into<String>) -> Self {
62        self.db_name = Some(db_name.into());
63        self
64    }
65}
66
67/// Email change behavior.
68#[derive(Debug, Clone, Default, PartialEq, Eq)]
69pub struct ChangeEmailOptions {
70    pub enabled: bool,
71    pub update_email_without_verification: bool,
72}
73
74/// User deletion behavior.
75#[derive(Debug, Clone, Default, PartialEq, Eq)]
76pub struct DeleteUserOptions {
77    pub enabled: bool,
78}