fraiseql_core/schema/compiled/
argument.rs1use serde::{Deserialize, Serialize};
2
3use crate::schema::{
4 field_type::{DeprecationInfo, FieldType},
5 graphql_value::GraphQLValue,
6};
7
8#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
10pub struct ArgumentDefinition {
11 pub name: String,
13
14 pub arg_type: FieldType,
16
17 #[serde(default)]
19 pub nullable: bool,
20
21 #[serde(default, skip_serializing_if = "Option::is_none")]
23 pub default_value: Option<GraphQLValue>,
24
25 #[serde(default, skip_serializing_if = "Option::is_none")]
27 pub description: Option<String>,
28
29 #[serde(default, skip_serializing_if = "Option::is_none")]
34 pub deprecation: Option<DeprecationInfo>,
35}
36
37impl ArgumentDefinition {
38 #[must_use]
40 pub fn new(name: impl Into<String>, arg_type: FieldType) -> Self {
41 Self {
42 name: name.into(),
43 arg_type,
44 nullable: false,
45 default_value: None,
46 description: None,
47 deprecation: None,
48 }
49 }
50
51 #[must_use]
53 pub fn optional(name: impl Into<String>, arg_type: FieldType) -> Self {
54 Self {
55 name: name.into(),
56 arg_type,
57 nullable: true,
58 default_value: None,
59 description: None,
60 deprecation: None,
61 }
62 }
63
64 #[must_use]
66 pub fn with_description(mut self, description: impl Into<String>) -> Self {
67 self.description = Some(description.into());
68 self
69 }
70
71 #[must_use]
83 pub fn deprecated(mut self, reason: Option<String>) -> Self {
84 self.deprecation = Some(DeprecationInfo { reason });
85 self
86 }
87
88 #[must_use]
90 pub const fn is_deprecated(&self) -> bool {
91 self.deprecation.is_some()
92 }
93
94 #[must_use]
96 pub fn deprecation_reason(&self) -> Option<&str> {
97 self.deprecation.as_ref().and_then(|d| d.reason.as_deref())
98 }
99}
100
101#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]
105#[allow(clippy::struct_excessive_bools)] pub struct AutoParams {
107 #[serde(default)]
109 pub has_where: bool,
110
111 #[serde(default)]
113 pub has_order_by: bool,
114
115 #[serde(default)]
117 pub has_limit: bool,
118
119 #[serde(default)]
121 pub has_offset: bool,
122}
123
124impl AutoParams {
125 #[must_use]
127 pub const fn all() -> Self {
128 Self {
129 has_where: true,
130 has_order_by: true,
131 has_limit: true,
132 has_offset: true,
133 }
134 }
135
136 #[must_use]
138 pub fn none() -> Self {
139 Self::default()
140 }
141}