toql_core/table_mapper/
field_options.rs1use crate::{field_handler::FieldHandler, role_expr::RoleExpr, sql_arg::SqlArg};
2use std::{collections::HashMap, sync::Arc};
3
4#[derive(Debug, Clone)]
5pub struct FieldOptions {
7 pub(crate) preselect: bool, pub(crate) skip_mut: bool, pub(crate) skip_wildcard: bool, pub(crate) load_role_expr: Option<RoleExpr>, pub(crate) update_role_expr: Option<RoleExpr>, pub(crate) aux_params: HashMap<String, SqlArg>, pub(crate) on_aux_params: Vec<String>, pub(crate) key: bool, pub(crate) field_handler: Option<Arc<dyn FieldHandler + Send + Sync>>, }
17
18impl FieldOptions {
19 pub fn new() -> Self {
21 FieldOptions {
22 preselect: false,
23 skip_mut: false,
24 skip_wildcard: false,
25 load_role_expr: None,
26 update_role_expr: None,
27 aux_params: HashMap::new(),
28 on_aux_params: Vec::new(),
29 key: false,
30 field_handler: None,
31 }
32 }
33
34 pub fn preselect(mut self, preselect: bool) -> Self {
36 self.preselect = preselect;
37 self
38 }
39
40 pub fn handler<H>(mut self, handler: H) -> Self
42 where
43 H: 'static + FieldHandler + Send + Sync,
44 {
45 self.field_handler = Some(Arc::new(handler));
46 self
47 }
48
49 pub fn key(mut self, key: bool) -> Self {
52 self.key = key;
53 self
54 }
55
56 pub fn skip_mut(mut self, skip: bool) -> Self {
58 self.skip_mut = skip;
59 self
60 }
61 pub fn skip_wildcard(mut self, skip_wildcard: bool) -> Self {
63 self.skip_wildcard = skip_wildcard;
64 self
65 }
66 pub fn restrict_load(mut self, role_expr: RoleExpr) -> Self {
71 self.load_role_expr = Some(role_expr);
72 self
73 }
74 pub fn restrict_update(mut self, role_expr: RoleExpr) -> Self {
79 self.update_role_expr = Some(role_expr);
80 self
81 }
82
83 pub fn aux_param<S, T>(mut self, name: S, value: T) -> Self
87 where
88 S: Into<String>,
89 T: Into<SqlArg>,
90 {
91 self.aux_params.insert(name.into(), value.into());
92 self
93 }
94}
95
96impl Default for FieldOptions {
97 fn default() -> Self {
98 Self::new()
99 }
100}