bluejay 0.1.0.alpha.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/Cargo.lock +423 -0
- data/Cargo.toml +2 -0
- data/LICENSE +21 -0
- data/README.md +33 -0
- data/ext/Cargo.toml +17 -0
- data/ext/extconf.rb +6 -0
- data/ext/src/execution/coerce_result.rs +54 -0
- data/ext/src/execution/engine.rs +466 -0
- data/ext/src/execution/execution_error.rs +28 -0
- data/ext/src/execution/field_error.rs +8 -0
- data/ext/src/execution/key_store.rs +23 -0
- data/ext/src/execution.rs +10 -0
- data/ext/src/helpers/public_name.rs +21 -0
- data/ext/src/helpers/typed_frozen_r_array.rs +56 -0
- data/ext/src/helpers/wrapped_definition.rs +79 -0
- data/ext/src/helpers/wrapped_struct.rs +97 -0
- data/ext/src/helpers.rs +8 -0
- data/ext/src/lib.rs +10 -0
- data/ext/src/ruby_api/arguments_definition.rs +8 -0
- data/ext/src/ruby_api/coerce_input.rs +6 -0
- data/ext/src/ruby_api/coercion_error.rs +61 -0
- data/ext/src/ruby_api/custom_scalar_type_definition.rs +62 -0
- data/ext/src/ruby_api/enum_type_definition.rs +107 -0
- data/ext/src/ruby_api/enum_value_definition.rs +58 -0
- data/ext/src/ruby_api/enum_value_definitions.rs +8 -0
- data/ext/src/ruby_api/execution_error.rs +48 -0
- data/ext/src/ruby_api/execution_result.rs +40 -0
- data/ext/src/ruby_api/field_definition.rs +112 -0
- data/ext/src/ruby_api/fields_definition.rs +8 -0
- data/ext/src/ruby_api/input_fields_definition.rs +8 -0
- data/ext/src/ruby_api/input_object_type_definition.rs +138 -0
- data/ext/src/ruby_api/input_type_reference.rs +358 -0
- data/ext/src/ruby_api/input_value_definition.rs +98 -0
- data/ext/src/ruby_api/interface_implementation.rs +42 -0
- data/ext/src/ruby_api/interface_implementations.rs +8 -0
- data/ext/src/ruby_api/interface_type_definition.rs +82 -0
- data/ext/src/ruby_api/json_value.rs +111 -0
- data/ext/src/ruby_api/object_type_definition.rs +100 -0
- data/ext/src/ruby_api/output_type_reference.rs +238 -0
- data/ext/src/ruby_api/r_result.rs +84 -0
- data/ext/src/ruby_api/scalar.rs +45 -0
- data/ext/src/ruby_api/schema_definition.rs +270 -0
- data/ext/src/ruby_api/union_member_type.rs +41 -0
- data/ext/src/ruby_api/union_member_types.rs +8 -0
- data/ext/src/ruby_api/union_type_definition.rs +89 -0
- data/ext/src/ruby_api/validation_error.rs +63 -0
- data/ext/src/ruby_api.rs +75 -0
- data/lib/bluejay/base_input_type_reference.rb +13 -0
- data/lib/bluejay/base_output_type_reference.rb +15 -0
- data/lib/bluejay/custom_scalar_type.rb +40 -0
- data/lib/bluejay/enum_type.rb +44 -0
- data/lib/bluejay/ext.bundle +0 -0
- data/lib/bluejay/finalize.rb +27 -0
- data/lib/bluejay/input_type.rb +64 -0
- data/lib/bluejay/input_type_reference_shorthands.rb +28 -0
- data/lib/bluejay/interface_type.rb +60 -0
- data/lib/bluejay/json_value.rb +16 -0
- data/lib/bluejay/name_from_class.rb +18 -0
- data/lib/bluejay/object_type.rb +68 -0
- data/lib/bluejay/output_type_reference_shorthands.rb +28 -0
- data/lib/bluejay/schema.rb +63 -0
- data/lib/bluejay/union_type.rb +43 -0
- data/lib/bluejay/version.rb +5 -0
- data/lib/bluejay.rb +28 -0
- data/lib/rbi_ext/model.rb +64 -0
- data/lib/tapioca/dsl/compilers/input_type.rb +34 -0
- data/lib/tapioca/dsl/compilers/interface_type.rb +29 -0
- data/lib/tapioca/dsl/compilers/object_type.rb +43 -0
- data/lib/tapioca/dsl/compilers/schema.rb +42 -0
- metadata +131 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 44d1325cd99c09116119d31ebceeb5d7e850c535fee0260c72056dfc8cd05f8c
|
4
|
+
data.tar.gz: bda7ecce529d6fe3b6f52e92e4783a60d2780dfaf6a082618ed40c7a7c0e3da9
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 1166725cafea346f279e20e588aec26f565946cf1eed78a4be4465e229c2524a123e36a577d2543f4a824ccbc8a280f37a1f9a8e738a4c04c123c2d34e6646b5
|
7
|
+
data.tar.gz: bc704bc76d57ec3f8f2c85e210d4df61bd24d94107532a1c6bbbb01c77f958b5f9d8a26e4f0d5998a7aa348faa7b7ae20456e8e4a9feab4ffa4350974c5f22c8
|
data/Cargo.lock
ADDED
@@ -0,0 +1,423 @@
|
|
1
|
+
# This file is automatically @generated by Cargo.
|
2
|
+
# It is not intended for manual editing.
|
3
|
+
version = 3
|
4
|
+
|
5
|
+
[[package]]
|
6
|
+
name = "aho-corasick"
|
7
|
+
version = "0.7.20"
|
8
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
9
|
+
checksum = "cc936419f96fa211c1b9166887b38e5e40b19958e5b895be7c1f93adec7071ac"
|
10
|
+
dependencies = [
|
11
|
+
"memchr",
|
12
|
+
]
|
13
|
+
|
14
|
+
[[package]]
|
15
|
+
name = "beef"
|
16
|
+
version = "0.5.2"
|
17
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
18
|
+
checksum = "3a8241f3ebb85c056b509d4327ad0358fbbba6ffb340bf388f26350aeda225b1"
|
19
|
+
|
20
|
+
[[package]]
|
21
|
+
name = "bindgen"
|
22
|
+
version = "0.60.1"
|
23
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
24
|
+
checksum = "062dddbc1ba4aca46de6338e2bf87771414c335f7b2f2036e8f3e9befebf88e6"
|
25
|
+
dependencies = [
|
26
|
+
"bitflags",
|
27
|
+
"cexpr",
|
28
|
+
"clang-sys",
|
29
|
+
"lazy_static",
|
30
|
+
"lazycell",
|
31
|
+
"peeking_take_while",
|
32
|
+
"proc-macro2",
|
33
|
+
"quote",
|
34
|
+
"regex",
|
35
|
+
"rustc-hash",
|
36
|
+
"shlex",
|
37
|
+
]
|
38
|
+
|
39
|
+
[[package]]
|
40
|
+
name = "bitflags"
|
41
|
+
version = "1.3.2"
|
42
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
43
|
+
checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
|
44
|
+
|
45
|
+
[[package]]
|
46
|
+
name = "bluejay-core"
|
47
|
+
version = "0.1.0-alpha.0"
|
48
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
49
|
+
checksum = "c91de4555af4889e59f7b84aa51469523aba476c5db98ce65db4e0b502feaa07"
|
50
|
+
dependencies = [
|
51
|
+
"itertools",
|
52
|
+
"paste",
|
53
|
+
"strum",
|
54
|
+
]
|
55
|
+
|
56
|
+
[[package]]
|
57
|
+
name = "bluejay-parser"
|
58
|
+
version = "0.1.0-alpha.0"
|
59
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
60
|
+
checksum = "6a412dfc891ec90dd8464ac6ea678b3561ac6660930d1183bc3d3afccffcba53"
|
61
|
+
dependencies = [
|
62
|
+
"bluejay-core",
|
63
|
+
"enum-as-inner",
|
64
|
+
"logos",
|
65
|
+
]
|
66
|
+
|
67
|
+
[[package]]
|
68
|
+
name = "cexpr"
|
69
|
+
version = "0.6.0"
|
70
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
71
|
+
checksum = "6fac387a98bb7c37292057cffc56d62ecb629900026402633ae9160df93a8766"
|
72
|
+
dependencies = [
|
73
|
+
"nom",
|
74
|
+
]
|
75
|
+
|
76
|
+
[[package]]
|
77
|
+
name = "cfg-if"
|
78
|
+
version = "1.0.0"
|
79
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
80
|
+
checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
|
81
|
+
|
82
|
+
[[package]]
|
83
|
+
name = "clang-sys"
|
84
|
+
version = "1.4.0"
|
85
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
86
|
+
checksum = "fa2e27ae6ab525c3d369ded447057bca5438d86dc3a68f6faafb8269ba82ebf3"
|
87
|
+
dependencies = [
|
88
|
+
"glob",
|
89
|
+
"libc",
|
90
|
+
"libloading",
|
91
|
+
]
|
92
|
+
|
93
|
+
[[package]]
|
94
|
+
name = "convert_case"
|
95
|
+
version = "0.6.0"
|
96
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
97
|
+
checksum = "ec182b0ca2f35d8fc196cf3404988fd8b8c739a4d270ff118a398feb0cbec1ca"
|
98
|
+
dependencies = [
|
99
|
+
"unicode-segmentation",
|
100
|
+
]
|
101
|
+
|
102
|
+
[[package]]
|
103
|
+
name = "either"
|
104
|
+
version = "1.8.0"
|
105
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
106
|
+
checksum = "90e5c1c8368803113bf0c9584fc495a58b86dc8a29edbf8fe877d21d9507e797"
|
107
|
+
|
108
|
+
[[package]]
|
109
|
+
name = "enum-as-inner"
|
110
|
+
version = "0.5.1"
|
111
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
112
|
+
checksum = "c9720bba047d567ffc8a3cba48bf19126600e249ab7f128e9233e6376976a116"
|
113
|
+
dependencies = [
|
114
|
+
"heck",
|
115
|
+
"proc-macro2",
|
116
|
+
"quote",
|
117
|
+
"syn",
|
118
|
+
]
|
119
|
+
|
120
|
+
[[package]]
|
121
|
+
name = "ext"
|
122
|
+
version = "0.1.0"
|
123
|
+
dependencies = [
|
124
|
+
"bluejay-core",
|
125
|
+
"bluejay-parser",
|
126
|
+
"convert_case",
|
127
|
+
"itertools",
|
128
|
+
"magnus",
|
129
|
+
"once_cell",
|
130
|
+
"rb-sys",
|
131
|
+
]
|
132
|
+
|
133
|
+
[[package]]
|
134
|
+
name = "fnv"
|
135
|
+
version = "1.0.7"
|
136
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
137
|
+
checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1"
|
138
|
+
|
139
|
+
[[package]]
|
140
|
+
name = "glob"
|
141
|
+
version = "0.3.0"
|
142
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
143
|
+
checksum = "9b919933a397b79c37e33b77bb2aa3dc8eb6e165ad809e58ff75bc7db2e34574"
|
144
|
+
|
145
|
+
[[package]]
|
146
|
+
name = "heck"
|
147
|
+
version = "0.4.0"
|
148
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
149
|
+
checksum = "2540771e65fc8cb83cd6e8a237f70c319bd5c29f78ed1084ba5d50eeac86f7f9"
|
150
|
+
|
151
|
+
[[package]]
|
152
|
+
name = "itertools"
|
153
|
+
version = "0.10.5"
|
154
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
155
|
+
checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473"
|
156
|
+
dependencies = [
|
157
|
+
"either",
|
158
|
+
]
|
159
|
+
|
160
|
+
[[package]]
|
161
|
+
name = "lazy_static"
|
162
|
+
version = "1.4.0"
|
163
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
164
|
+
checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
|
165
|
+
|
166
|
+
[[package]]
|
167
|
+
name = "lazycell"
|
168
|
+
version = "1.3.0"
|
169
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
170
|
+
checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55"
|
171
|
+
|
172
|
+
[[package]]
|
173
|
+
name = "libc"
|
174
|
+
version = "0.2.137"
|
175
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
176
|
+
checksum = "fc7fcc620a3bff7cdd7a365be3376c97191aeaccc2a603e600951e452615bf89"
|
177
|
+
|
178
|
+
[[package]]
|
179
|
+
name = "libloading"
|
180
|
+
version = "0.7.4"
|
181
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
182
|
+
checksum = "b67380fd3b2fbe7527a606e18729d21c6f3951633d0500574c4dc22d2d638b9f"
|
183
|
+
dependencies = [
|
184
|
+
"cfg-if",
|
185
|
+
"winapi",
|
186
|
+
]
|
187
|
+
|
188
|
+
[[package]]
|
189
|
+
name = "logos"
|
190
|
+
version = "0.12.1"
|
191
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
192
|
+
checksum = "bf8b031682c67a8e3d5446840f9573eb7fe26efe7ec8d195c9ac4c0647c502f1"
|
193
|
+
dependencies = [
|
194
|
+
"logos-derive",
|
195
|
+
]
|
196
|
+
|
197
|
+
[[package]]
|
198
|
+
name = "logos-derive"
|
199
|
+
version = "0.12.1"
|
200
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
201
|
+
checksum = "a1d849148dbaf9661a6151d1ca82b13bb4c4c128146a88d05253b38d4e2f496c"
|
202
|
+
dependencies = [
|
203
|
+
"beef",
|
204
|
+
"fnv",
|
205
|
+
"proc-macro2",
|
206
|
+
"quote",
|
207
|
+
"regex-syntax",
|
208
|
+
"syn",
|
209
|
+
]
|
210
|
+
|
211
|
+
[[package]]
|
212
|
+
name = "magnus"
|
213
|
+
version = "0.4.4"
|
214
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
215
|
+
checksum = "fc87660cd7daa49fddbfd524c836de54d5c927d520cd163f43700c5087c57d6c"
|
216
|
+
dependencies = [
|
217
|
+
"magnus-macros",
|
218
|
+
"rb-sys",
|
219
|
+
"rb-sys-env",
|
220
|
+
]
|
221
|
+
|
222
|
+
[[package]]
|
223
|
+
name = "magnus-macros"
|
224
|
+
version = "0.3.0"
|
225
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
226
|
+
checksum = "206cb23bfeea05180c97522ef6a3e52a4eb17b0ed2f30ee3ca9c4f994d2378ae"
|
227
|
+
dependencies = [
|
228
|
+
"proc-macro2",
|
229
|
+
"quote",
|
230
|
+
"syn",
|
231
|
+
]
|
232
|
+
|
233
|
+
[[package]]
|
234
|
+
name = "memchr"
|
235
|
+
version = "2.5.0"
|
236
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
237
|
+
checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d"
|
238
|
+
|
239
|
+
[[package]]
|
240
|
+
name = "minimal-lexical"
|
241
|
+
version = "0.2.1"
|
242
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
243
|
+
checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a"
|
244
|
+
|
245
|
+
[[package]]
|
246
|
+
name = "nom"
|
247
|
+
version = "7.1.1"
|
248
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
249
|
+
checksum = "a8903e5a29a317527874d0402f867152a3d21c908bb0b933e416c65e301d4c36"
|
250
|
+
dependencies = [
|
251
|
+
"memchr",
|
252
|
+
"minimal-lexical",
|
253
|
+
]
|
254
|
+
|
255
|
+
[[package]]
|
256
|
+
name = "once_cell"
|
257
|
+
version = "1.17.0"
|
258
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
259
|
+
checksum = "6f61fba1741ea2b3d6a1e3178721804bb716a68a6aeba1149b5d52e3d464ea66"
|
260
|
+
|
261
|
+
[[package]]
|
262
|
+
name = "paste"
|
263
|
+
version = "1.0.11"
|
264
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
265
|
+
checksum = "d01a5bd0424d00070b0098dd17ebca6f961a959dead1dbcbbbc1d1cd8d3deeba"
|
266
|
+
|
267
|
+
[[package]]
|
268
|
+
name = "peeking_take_while"
|
269
|
+
version = "0.1.2"
|
270
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
271
|
+
checksum = "19b17cddbe7ec3f8bc800887bab5e717348c95ea2ca0b1bf0837fb964dc67099"
|
272
|
+
|
273
|
+
[[package]]
|
274
|
+
name = "proc-macro2"
|
275
|
+
version = "1.0.47"
|
276
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
277
|
+
checksum = "5ea3d908b0e36316caf9e9e2c4625cdde190a7e6f440d794667ed17a1855e725"
|
278
|
+
dependencies = [
|
279
|
+
"unicode-ident",
|
280
|
+
]
|
281
|
+
|
282
|
+
[[package]]
|
283
|
+
name = "quote"
|
284
|
+
version = "1.0.21"
|
285
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
286
|
+
checksum = "bbe448f377a7d6961e30f5955f9b8d106c3f5e449d493ee1b125c1d43c2b5179"
|
287
|
+
dependencies = [
|
288
|
+
"proc-macro2",
|
289
|
+
]
|
290
|
+
|
291
|
+
[[package]]
|
292
|
+
name = "rb-sys"
|
293
|
+
version = "0.9.53"
|
294
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
295
|
+
checksum = "aa291f69bcc44f8e96597a3f39e9933fde6977b825415cfaa670ac49b8ab7c99"
|
296
|
+
dependencies = [
|
297
|
+
"rb-sys-build",
|
298
|
+
]
|
299
|
+
|
300
|
+
[[package]]
|
301
|
+
name = "rb-sys-build"
|
302
|
+
version = "0.9.53"
|
303
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
304
|
+
checksum = "d998fd6ef588471d6d7cca24c4da88eda5e6757b6885c55760e856ecdb254c3d"
|
305
|
+
dependencies = [
|
306
|
+
"bindgen",
|
307
|
+
"regex",
|
308
|
+
"shell-words",
|
309
|
+
]
|
310
|
+
|
311
|
+
[[package]]
|
312
|
+
name = "rb-sys-env"
|
313
|
+
version = "0.1.1"
|
314
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
315
|
+
checksum = "74c38752410925faeb82c400c06ba2fd9ee6aa8f719dd33994c9e53f5242d25f"
|
316
|
+
|
317
|
+
[[package]]
|
318
|
+
name = "regex"
|
319
|
+
version = "1.7.0"
|
320
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
321
|
+
checksum = "e076559ef8e241f2ae3479e36f97bd5741c0330689e217ad51ce2c76808b868a"
|
322
|
+
dependencies = [
|
323
|
+
"aho-corasick",
|
324
|
+
"memchr",
|
325
|
+
"regex-syntax",
|
326
|
+
]
|
327
|
+
|
328
|
+
[[package]]
|
329
|
+
name = "regex-syntax"
|
330
|
+
version = "0.6.28"
|
331
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
332
|
+
checksum = "456c603be3e8d448b072f410900c09faf164fbce2d480456f50eea6e25f9c848"
|
333
|
+
|
334
|
+
[[package]]
|
335
|
+
name = "rustc-hash"
|
336
|
+
version = "1.1.0"
|
337
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
338
|
+
checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2"
|
339
|
+
|
340
|
+
[[package]]
|
341
|
+
name = "rustversion"
|
342
|
+
version = "1.0.9"
|
343
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
344
|
+
checksum = "97477e48b4cf8603ad5f7aaf897467cf42ab4218a38ef76fb14c2d6773a6d6a8"
|
345
|
+
|
346
|
+
[[package]]
|
347
|
+
name = "shell-words"
|
348
|
+
version = "1.1.0"
|
349
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
350
|
+
checksum = "24188a676b6ae68c3b2cb3a01be17fbf7240ce009799bb56d5b1409051e78fde"
|
351
|
+
|
352
|
+
[[package]]
|
353
|
+
name = "shlex"
|
354
|
+
version = "1.1.0"
|
355
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
356
|
+
checksum = "43b2853a4d09f215c24cc5489c992ce46052d359b5109343cbafbf26bc62f8a3"
|
357
|
+
|
358
|
+
[[package]]
|
359
|
+
name = "strum"
|
360
|
+
version = "0.24.1"
|
361
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
362
|
+
checksum = "063e6045c0e62079840579a7e47a355ae92f60eb74daaf156fb1e84ba164e63f"
|
363
|
+
dependencies = [
|
364
|
+
"strum_macros",
|
365
|
+
]
|
366
|
+
|
367
|
+
[[package]]
|
368
|
+
name = "strum_macros"
|
369
|
+
version = "0.24.3"
|
370
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
371
|
+
checksum = "1e385be0d24f186b4ce2f9982191e7101bb737312ad61c1f2f984f34bcf85d59"
|
372
|
+
dependencies = [
|
373
|
+
"heck",
|
374
|
+
"proc-macro2",
|
375
|
+
"quote",
|
376
|
+
"rustversion",
|
377
|
+
"syn",
|
378
|
+
]
|
379
|
+
|
380
|
+
[[package]]
|
381
|
+
name = "syn"
|
382
|
+
version = "1.0.103"
|
383
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
384
|
+
checksum = "a864042229133ada95abf3b54fdc62ef5ccabe9515b64717bcb9a1919e59445d"
|
385
|
+
dependencies = [
|
386
|
+
"proc-macro2",
|
387
|
+
"quote",
|
388
|
+
"unicode-ident",
|
389
|
+
]
|
390
|
+
|
391
|
+
[[package]]
|
392
|
+
name = "unicode-ident"
|
393
|
+
version = "1.0.5"
|
394
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
395
|
+
checksum = "6ceab39d59e4c9499d4e5a8ee0e2735b891bb7308ac83dfb4e80cad195c9f6f3"
|
396
|
+
|
397
|
+
[[package]]
|
398
|
+
name = "unicode-segmentation"
|
399
|
+
version = "1.10.0"
|
400
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
401
|
+
checksum = "0fdbf052a0783de01e944a6ce7a8cb939e295b1e7be835a1112c3b9a7f047a5a"
|
402
|
+
|
403
|
+
[[package]]
|
404
|
+
name = "winapi"
|
405
|
+
version = "0.3.9"
|
406
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
407
|
+
checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419"
|
408
|
+
dependencies = [
|
409
|
+
"winapi-i686-pc-windows-gnu",
|
410
|
+
"winapi-x86_64-pc-windows-gnu",
|
411
|
+
]
|
412
|
+
|
413
|
+
[[package]]
|
414
|
+
name = "winapi-i686-pc-windows-gnu"
|
415
|
+
version = "0.4.0"
|
416
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
417
|
+
checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
|
418
|
+
|
419
|
+
[[package]]
|
420
|
+
name = "winapi-x86_64-pc-windows-gnu"
|
421
|
+
version = "0.4.0"
|
422
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
423
|
+
checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
|
data/Cargo.toml
ADDED
data/LICENSE
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
MIT License
|
2
|
+
|
3
|
+
Copyright (c) 2023 Adam Petro
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
7
|
+
in the Software without restriction, including without limitation the rights
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
10
|
+
furnished to do so, subject to the following conditions:
|
11
|
+
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
13
|
+
copies or substantial portions of the Software.
|
14
|
+
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
21
|
+
SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,33 @@
|
|
1
|
+
# `bluejay-rb`
|
2
|
+
|
3
|
+
> **Warning**
|
4
|
+
> This project is still very early in its development and should be considered highly unstable and experimental. It is not ready for production use.
|
5
|
+
|
6
|
+
> **Note**
|
7
|
+
> In an effort to get a working proof-of-concept, documentation and test coverage has been sacrificied. This will be corrected prior to a stable release.
|
8
|
+
|
9
|
+
`bluejay-rb` is a GraphQL engine for Ruby written primarily in Rust through the use of [`magnus`](https://github.com/matsadler/magnus).
|
10
|
+
|
11
|
+
## Goal
|
12
|
+
|
13
|
+
`bluejay-rb`'s goal is to provide a lightning fast GraphQL engine with first-class integration with [Sorbet](https://sorbet.org/).
|
14
|
+
|
15
|
+
## Installation
|
16
|
+
|
17
|
+
Install the gem and add to the application's Gemfile by executing:
|
18
|
+
|
19
|
+
$ bundle add bluejay
|
20
|
+
|
21
|
+
If bundler is not being used to manage dependencies, install the gem by executing:
|
22
|
+
|
23
|
+
$ gem install bluejay
|
24
|
+
|
25
|
+
## Usage
|
26
|
+
|
27
|
+
See an example in the [`/example`](/example) directory. Note the usage of [Tapioca](https://github.com/Shopify/tapioca) RBI generation for the DSL at [`/example/sorbet/rbi/dsl/graph`](/example/sorbet/rbi/dsl/graph)
|
28
|
+
|
29
|
+
## Development
|
30
|
+
|
31
|
+
After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake test` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
|
32
|
+
|
33
|
+
To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and the created tag, and push the `.gem` file to [rubygems.org](https://rubygems.org).
|
data/ext/Cargo.toml
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
[package]
|
2
|
+
name = "ext"
|
3
|
+
version = "0.1.0"
|
4
|
+
edition = "2021"
|
5
|
+
publish = false
|
6
|
+
|
7
|
+
[lib]
|
8
|
+
crate-type = ["cdylib"]
|
9
|
+
|
10
|
+
[dependencies]
|
11
|
+
magnus = { version = "0.4", features = ["rb-sys-interop"] }
|
12
|
+
rb-sys = "0.9"
|
13
|
+
once_cell = "1.17"
|
14
|
+
convert_case = "0.6.0"
|
15
|
+
itertools = "0.10.5"
|
16
|
+
bluejay-parser = { version = "0.1.0-alpha.0" }
|
17
|
+
bluejay-core = { version = "0.1.0-alpha.0" }
|
data/ext/extconf.rb
ADDED
@@ -0,0 +1,54 @@
|
|
1
|
+
use crate::execution::FieldError;
|
2
|
+
use magnus::{Value, Float, Integer};
|
3
|
+
use bluejay_core::BuiltinScalarDefinition;
|
4
|
+
|
5
|
+
pub trait CoerceResult {
|
6
|
+
fn coerce_result(&self, value: Value) -> Result<Value, FieldError>;
|
7
|
+
}
|
8
|
+
|
9
|
+
impl CoerceResult for BuiltinScalarDefinition {
|
10
|
+
fn coerce_result(&self, value: Value) -> Result<Value, FieldError> {
|
11
|
+
match self {
|
12
|
+
Self::Boolean => {
|
13
|
+
if value.is_kind_of(magnus::class::true_class()) || value.is_kind_of(magnus::class::false_class()) {
|
14
|
+
Ok(value)
|
15
|
+
} else {
|
16
|
+
Err(FieldError::CannotCoerceResultToBuiltinScalar { builtin_scalar: *self })
|
17
|
+
}
|
18
|
+
},
|
19
|
+
Self::Float => {
|
20
|
+
// TODO: handle BigDecimal and possibly Numeric
|
21
|
+
if matches!(Float::from_value(value), Some(f) if f.to_f64().is_finite()) {
|
22
|
+
Ok(value)
|
23
|
+
} else if value.is_kind_of(magnus::class::integer()) {
|
24
|
+
Ok(value.funcall("to_f", ()).unwrap())
|
25
|
+
} else {
|
26
|
+
Err(FieldError::CannotCoerceResultToBuiltinScalar { builtin_scalar: *self })
|
27
|
+
}
|
28
|
+
},
|
29
|
+
Self::ID => {
|
30
|
+
if value.is_kind_of(magnus::class::string()) {
|
31
|
+
Ok(value)
|
32
|
+
} else if value.is_kind_of(magnus::class::integer()) {
|
33
|
+
Ok(value.funcall("to_s", ()).unwrap())
|
34
|
+
} else {
|
35
|
+
Err(FieldError::CannotCoerceResultToBuiltinScalar { builtin_scalar: *self })
|
36
|
+
}
|
37
|
+
},
|
38
|
+
Self::Int => {
|
39
|
+
if matches!(Integer::from_value(value), Some(i) if i.to_i32().is_ok()) {
|
40
|
+
Ok(value)
|
41
|
+
} else {
|
42
|
+
Err(FieldError::CannotCoerceResultToBuiltinScalar { builtin_scalar: *self })
|
43
|
+
}
|
44
|
+
},
|
45
|
+
Self::String => {
|
46
|
+
if value.is_kind_of(magnus::class::string()) {
|
47
|
+
Ok(value)
|
48
|
+
} else {
|
49
|
+
Err(FieldError::CannotCoerceResultToBuiltinScalar { builtin_scalar: *self })
|
50
|
+
}
|
51
|
+
},
|
52
|
+
}
|
53
|
+
}
|
54
|
+
}
|