WARNING: THIS SITE IS A MIRROR OF GITHUB.COM / IT CANNOT LOGIN OR REGISTER ACCOUNTS / THE CONTENTS ARE PROVIDED AS-IS / THIS SITE ASSUMES NO RESPONSIBILITY FOR ANY DISPLAYED CONTENT OR LINKS / IF YOU FOUND SOMETHING MAY NOT GOOD FOR EVERYONE, CONTACT ADMIN AT ilovescratch@foxmail.com
Skip to content

Commit 0007780

Browse files
committed
🚀 0.19.0: Use [email protected]
1 parent 7533cac commit 0007780

File tree

3 files changed

+52
-25
lines changed

3 files changed

+52
-25
lines changed

‎package-lock.json‎

Lines changed: 4 additions & 4 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

‎package.json‎

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "rescript-json-schema",
3-
"version": "0.18.0",
3+
"version": "0.19.0",
44
"description": "Typesafe JSON Schema for ReScript",
55
"keywords": [
66
"ReScript",
@@ -42,9 +42,9 @@
4242
"devDependencies": {
4343
"rescript": "9.1.4",
4444
"rescript-ava": "github:DZakh/rescript-ava#007d9f63e17310f73fabab1223eb75a0c9c36035",
45-
"rescript-struct": "0.10.0"
45+
"rescript-struct": "0.11.0"
4646
},
4747
"peerDependencies": {
48-
"rescript-struct": "0.10.x"
48+
"rescript-struct": "0.11.x"
4949
}
5050
}

‎src/JsonSchema.res‎

Lines changed: 45 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,32 @@
1+
module Inline = {
2+
module Result: {
3+
let mapError: (result<'ok, 'error1>, 'error1 => 'error2) => result<'ok, 'error2>
4+
let map: (result<'ok1, 'error>, 'ok1 => 'ok2) => result<'ok2, 'error>
5+
let flatMap: (result<'ok1, 'error>, 'ok1 => result<'ok2, 'error>) => result<'ok2, 'error>
6+
} = {
7+
@inline
8+
let mapError = (result, fn) =>
9+
switch result {
10+
| Ok(_) as ok => ok
11+
| Error(error) => Error(fn(error))
12+
}
13+
14+
@inline
15+
let map = (result, fn) =>
16+
switch result {
17+
| Ok(value) => Ok(fn(value))
18+
| Error(_) as error => error
19+
}
20+
21+
@inline
22+
let flatMap = (result, fn) =>
23+
switch result {
24+
| Ok(value) => fn(value)
25+
| Error(_) as error => error
26+
}
27+
}
28+
}
29+
130
type t
231

332
external unsafeToJsonSchema: 'a => t = "%identity"
@@ -85,23 +114,23 @@ type node = {rawSchema: Raw.t, isRequired: bool}
85114
let rec makeNode:
86115
type value. S.t<value> => result<node, JsonSchema_Error.t> =
87116
struct => {
88-
let maybeMetadataRawSchema = struct->Raw.Metadata.extract
117+
let maybeMetadataRawSchema = struct->Raw.Metadata.get
89118

90119
switch struct->S.classify {
91120
| S.String => Ok({rawSchema: Raw.string, isRequired: true})
92121
| S.Int => Ok({rawSchema: Raw.integer, isRequired: true})
93122
| S.Bool => Ok({rawSchema: Raw.boolean, isRequired: true})
94123
| S.Float => Ok({rawSchema: Raw.number, isRequired: true})
95124
| S.Array(innerStruct) =>
96-
makeNode(innerStruct)->Belt.Result.flatMap(innerNode => {
125+
makeNode(innerStruct)->Inline.Result.flatMap(innerNode => {
97126
if innerNode.isRequired {
98127
Ok({rawSchema: Raw.array(innerNode.rawSchema), isRequired: true})
99128
} else {
100129
Error(JsonSchema_Error.UnsupportedOptionalDictItem.make())
101130
}
102131
})
103132
| S.Option(innerStruct) =>
104-
makeNode(innerStruct)->Belt.Result.flatMap(innerNode => {
133+
makeNode(innerStruct)->Inline.Result.flatMap(innerNode => {
105134
if innerNode.isRequired {
106135
Ok({rawSchema: innerNode.rawSchema, isRequired: false})
107136
} else {
@@ -110,13 +139,11 @@ let rec makeNode:
110139
})
111140
| S.Record({fields, unknownKeys}) =>
112141
fields
113-
->RescriptStruct_ResultX.Array.mapi((field, _) => {
142+
->RescriptStruct_ResultX.Array.mapi((. field, _) => {
114143
let (fieldName, fieldStruct) = field
115-
makeNode(fieldStruct)->RescriptStruct_ResultX.mapError(
116-
JsonSchema_Error.prependField(_, fieldName),
117-
)
144+
makeNode(fieldStruct)->Inline.Result.mapError(JsonSchema_Error.prependField(_, fieldName))
118145
})
119-
->Belt.Result.map(fieldNodes => {
146+
->Inline.Result.map(fieldNodes => {
120147
let rawSchema = {
121148
let properties = Js.Dict.empty()
122149
let required = []
@@ -144,7 +171,7 @@ let rec makeNode:
144171
})
145172
| S.Unknown => Ok({rawSchema: Raw.empty, isRequired: true})
146173
| S.Null(innerStruct) =>
147-
makeNode(innerStruct)->Belt.Result.flatMap(innerNode => {
174+
makeNode(innerStruct)->Inline.Result.flatMap(innerNode => {
148175
if innerNode.isRequired {
149176
Ok({rawSchema: Raw.null(innerNode.rawSchema), isRequired: true})
150177
} else {
@@ -159,15 +186,15 @@ let rec makeNode:
159186
| S.Literal(S.EmptyNull) => Ok({rawSchema: Raw.Literal.null, isRequired: true})
160187
| S.Literal(S.EmptyOption) => Error(JsonSchema_Error.UnsupportedEmptyOptionLiteral.make())
161188
| S.Dict(innerStruct) =>
162-
makeNode(innerStruct)->Belt.Result.flatMap(innerNode => {
189+
makeNode(innerStruct)->Inline.Result.flatMap(innerNode => {
163190
if innerNode.isRequired {
164191
Ok({rawSchema: Raw.dict(innerNode.rawSchema), isRequired: true})
165192
} else {
166193
Error(JsonSchema_Error.UnsupportedOptionalDictItem.make())
167194
}
168195
})
169196
| S.Deprecated({struct: innerStruct, maybeMessage}) =>
170-
makeNode(innerStruct)->Belt.Result.flatMap(innerNode => {
197+
makeNode(innerStruct)->Inline.Result.flatMap(innerNode => {
171198
let rawSchema = {
172199
let rawSchema' = Raw.merge(innerNode.rawSchema, Raw.deprecated)
173200
switch maybeMessage {
@@ -178,18 +205,18 @@ let rec makeNode:
178205
Ok({rawSchema: rawSchema, isRequired: false})
179206
})
180207
| S.Default({struct: innerStruct, value}) =>
181-
switch Some(value)->S.destructWith(innerStruct) {
208+
switch Some(value)->S.serializeWith(~mode=Safe, innerStruct) {
182209
| Error(destructingErrorMessage) =>
183210
Error(JsonSchema_Error.DefaultDestructingFailed.make(~destructingErrorMessage))
184211
| Ok(destructedValue) =>
185-
makeNode(innerStruct)->Belt.Result.map(innerNode => {
212+
makeNode(innerStruct)->Inline.Result.map(innerNode => {
186213
{
187214
rawSchema: Raw.merge(innerNode.rawSchema, Raw.default(destructedValue)),
188215
isRequired: false,
189216
}
190217
})
191218
}
192-
}->Belt.Result.map(node => {
219+
}->Inline.Result.map(node => {
193220
switch maybeMetadataRawSchema {
194221
| Some(metadataRawSchema) => {
195222
rawSchema: Raw.merge(node.rawSchema, metadataRawSchema),
@@ -202,22 +229,22 @@ let rec makeNode:
202229

203230
let make = struct => {
204231
makeNode(struct)
205-
->Belt.Result.flatMap(node => {
232+
->Inline.Result.flatMap(node => {
206233
if node.isRequired {
207234
Ok(Raw.merge(node.rawSchema, Raw.schemaDialect)->unsafeToJsonSchema)
208235
} else {
209236
Error(JsonSchema_Error.UnsupportedRootOptional.make())
210237
}
211238
})
212-
->RescriptStruct_ResultX.mapError(JsonSchema_Error.toString)
239+
->Inline.Result.mapError(JsonSchema_Error.toString)
213240
}
214241

215242
let raw = (struct, providedRawSchema) => {
216-
let rawSchema = switch struct->Raw.Metadata.extract {
243+
let rawSchema = switch struct->Raw.Metadata.get {
217244
| Some(existingRawSchema) => Raw.merge(existingRawSchema, providedRawSchema->Raw.make)
218245
| None => providedRawSchema->Raw.make
219246
}
220-
struct->Raw.Metadata.mixin(rawSchema)
247+
struct->Raw.Metadata.set(rawSchema)
221248
}
222249

223250
let description = (struct, value) => {

0 commit comments

Comments
 (0)