Skip to content

Commit 5eda9ae

Browse files
committed
Add "any" to convert operation names and add S.convertAnyAsyncWith
1 parent fe44f40 commit 5eda9ae

File tree

5 files changed

+95
-100
lines changed

5 files changed

+95
-100
lines changed

src/S.bs.mjs

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -86,11 +86,13 @@ var parseAsyncWith = S_Core$RescriptSchema.parseAsyncWith;
8686

8787
var parseAnyAsyncWith = S_Core$RescriptSchema.parseAnyAsyncWith;
8888

89-
var convertWith = S_Core$RescriptSchema.convertWith;
89+
var convertAnyWith = S_Core$RescriptSchema.convertAnyWith;
9090

91-
var convertToJsonWith = S_Core$RescriptSchema.convertToJsonWith;
91+
var convertAnyToJsonWith = S_Core$RescriptSchema.convertAnyToJsonWith;
9292

93-
var convertToJsonStringWith = S_Core$RescriptSchema.convertToJsonStringWith;
93+
var convertAnyToJsonStringWith = S_Core$RescriptSchema.convertAnyToJsonStringWith;
94+
95+
var convertAnyAsyncWith = S_Core$RescriptSchema.convertAnyAsyncWith;
9496

9597
var serializeWith = S_Core$RescriptSchema.serializeWith;
9698

@@ -235,9 +237,10 @@ export {
235237
parseAnyOrRaiseWith ,
236238
parseAsyncWith ,
237239
parseAnyAsyncWith ,
238-
convertWith ,
239-
convertToJsonWith ,
240-
convertToJsonStringWith ,
240+
convertAnyWith ,
241+
convertAnyToJsonWith ,
242+
convertAnyToJsonStringWith ,
243+
convertAnyAsyncWith ,
241244
serializeWith ,
242245
serializeToUnknownWith ,
243246
serializeToJsonStringWith ,

src/S.resi

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -224,9 +224,10 @@ let parseAsyncWith: (Js.Json.t, t<'value>) => promise<result<'value, error>>
224224

225225
let parseAnyAsyncWith: ('any, t<'value>) => promise<result<'value, error>>
226226

227-
let convertWith: ('any, t<'value>) => result<'value, error>
228-
let convertToJsonWith: ('any, t<'value>) => result<Js.Json.t, error>
229-
let convertToJsonStringWith: ('any, t<'value>) => result<string, error>
227+
let convertAnyWith: ('any, t<'value>) => result<'value, error>
228+
let convertAnyToJsonWith: ('any, t<'value>) => result<Js.Json.t, error>
229+
let convertAnyToJsonStringWith: ('any, t<'value>) => result<string, error>
230+
let convertAnyAsyncWith: ('any, t<'value>) => promise<result<'value, error>>
230231

231232
let serializeWith: ('value, t<'value>) => result<Js.Json.t, error>
232233

src/S_Core.bs.mjs

Lines changed: 44 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -727,19 +727,25 @@ function $tildeexperimentalReverse(schema) {
727727
return schema.r();
728728
}
729729

730-
function parseAnyOrRaiseWith(any, schema) {
731-
return schema.parseOrThrow(any);
730+
function asyncPrepareOk(value) {
731+
return {
732+
TAG: "Ok",
733+
_0: value
734+
};
732735
}
733736

734-
function assertOrRaiseWith(any, schema) {
735-
schema.assert(any);
737+
function asyncPrepareError(jsExn) {
738+
return {
739+
TAG: "Error",
740+
_0: getOrRethrow(jsExn)
741+
};
736742
}
737743

738-
function parseAnyWith(any, schema) {
744+
function convertAnyWith(any, schema) {
739745
try {
740746
return {
741747
TAG: "Ok",
742-
_0: schema.parseOrThrow(any)
748+
_0: (schema[0] ? undefined : (schema[0] = compile(schema.b, schema, 0), undefined), schema[0](any))
743749
};
744750
}
745751
catch (raw_exn){
@@ -751,11 +757,11 @@ function parseAnyWith(any, schema) {
751757
}
752758
}
753759

754-
function convertWith(any, schema) {
760+
function convertAnyToJsonWith(any, schema) {
755761
try {
756762
return {
757763
TAG: "Ok",
758-
_0: (schema[0] ? undefined : (schema[0] = compile(schema.b, schema, 0), undefined), schema[0](any))
764+
_0: (schema[8] ? undefined : (schema[8] = compile(schema.b, schema, 8), undefined), schema[8](any))
759765
};
760766
}
761767
catch (raw_exn){
@@ -767,11 +773,11 @@ function convertWith(any, schema) {
767773
}
768774
}
769775

770-
function convertToJsonWith(any, schema) {
776+
function convertAnyToJsonStringWith(any, schema) {
771777
try {
772778
return {
773779
TAG: "Ok",
774-
_0: (schema[8] ? undefined : (schema[8] = compile(schema.b, schema, 8), undefined), schema[8](any))
780+
_0: (schema[16] ? undefined : (schema[16] = compile(schema.b, schema, 16), undefined), schema[16](any))
775781
};
776782
}
777783
catch (raw_exn){
@@ -783,11 +789,32 @@ function convertToJsonWith(any, schema) {
783789
}
784790
}
785791

786-
function convertToJsonStringWith(any, schema) {
792+
function convertAnyAsyncWith(any, schema) {
793+
try {
794+
return (schema[2] ? undefined : (schema[2] = compile(schema.b, schema, 2), undefined), schema[2](any)).then(asyncPrepareOk, asyncPrepareError);
795+
}
796+
catch (raw_exn){
797+
var exn = Caml_js_exceptions.internalToOCamlException(raw_exn);
798+
return Promise.resolve({
799+
TAG: "Error",
800+
_0: getOrRethrow(exn)
801+
});
802+
}
803+
}
804+
805+
function parseAnyOrRaiseWith(any, schema) {
806+
return schema.parseOrThrow(any);
807+
}
808+
809+
function assertOrRaiseWith(any, schema) {
810+
schema.assert(any);
811+
}
812+
813+
function parseAnyWith(any, schema) {
787814
try {
788815
return {
789816
TAG: "Ok",
790-
_0: (schema[16] ? undefined : (schema[16] = compile(schema.b, schema, 16), undefined), schema[16](any))
817+
_0: schema.parseOrThrow(any)
791818
};
792819
}
793820
catch (raw_exn){
@@ -799,23 +826,9 @@ function convertToJsonStringWith(any, schema) {
799826
}
800827
}
801828

802-
function asyncPrepareOk(value) {
803-
return {
804-
TAG: "Ok",
805-
_0: value
806-
};
807-
}
808-
809-
function asyncPrepareError(jsExn) {
810-
return {
811-
TAG: "Error",
812-
_0: getOrRethrow(jsExn)
813-
};
814-
}
815-
816829
function parseAnyAsyncWith(any, schema) {
817830
try {
818-
return schema.a(any).then(asyncPrepareOk, asyncPrepareError);
831+
return (schema[3] ? undefined : (schema[3] = compile(schema.b, schema, 3), undefined), schema[3](any)).then(asyncPrepareOk, asyncPrepareError);
819832
}
820833
catch (raw_exn){
821834
var exn = Caml_js_exceptions.internalToOCamlException(raw_exn);
@@ -924,13 +937,6 @@ function initialParseOrRaise(unknown) {
924937
return operation(unknown);
925938
}
926939

927-
function initialParseAsyncOrRaise(unknown) {
928-
var schema = this;
929-
var operation = compile(schema.b, schema, 3);
930-
schema.a = operation;
931-
return operation(unknown);
932-
}
933-
934940
function initialAssertOrRaise(unknown) {
935941
var schema = this;
936942
var operation = compile(schema.b, schema, 5);
@@ -1006,7 +1012,6 @@ function makeReverseSchema(name, tagged, metadataMap, builder, maybeTypeFilter)
10061012
f: maybeTypeFilter,
10071013
i: 0,
10081014
m: metadataMap,
1009-
a: initialParseAsyncOrRaise,
10101015
parseOrThrow: initialParseOrRaise,
10111016
parse: jsParse,
10121017
parseAsync: jsParseAsync,
@@ -1034,7 +1039,6 @@ function makeSchema(name, tagged, metadataMap, builder, maybeTypeFilter, reverse
10341039
f: maybeTypeFilter,
10351040
i: 0,
10361041
m: metadataMap,
1037-
a: initialParseAsyncOrRaise,
10381042
parseOrThrow: initialParseOrRaise,
10391043
parse: jsParse,
10401044
parseAsync: jsParseAsync,
@@ -1720,7 +1724,6 @@ function factory$3(definer) {
17201724
d: definer,
17211725
c: ctx,
17221726
m: empty,
1723-
a: initialParseAsyncOrRaise,
17241727
parseOrThrow: initialParseOrRaise,
17251728
parse: jsParse,
17261729
parseAsync: jsParseAsync,
@@ -1877,7 +1880,6 @@ function setUnknownKeys(schema, unknownKeys) {
18771880
d: schema.d,
18781881
c: schema.c,
18791882
m: schema.m,
1880-
a: initialParseAsyncOrRaise,
18811883
parseOrThrow: initialParseOrRaise,
18821884
parse: jsParse,
18831885
parseAsync: jsParseAsync,
@@ -3114,7 +3116,6 @@ function setGlobalConfig(override) {
31143116
if (prevDisableNanNumberCheck !== globalConfig.n) {
31153117
schema$5.assert = initialAssertOrRaise;
31163118
schema$5.parseOrThrow = initialParseOrRaise;
3117-
schema$5.a = initialParseAsyncOrRaise;
31183119
return ;
31193120
}
31203121

@@ -3280,9 +3281,10 @@ export {
32803281
parseAnyOrRaiseWith ,
32813282
parseAsyncWith ,
32823283
parseAnyAsyncWith ,
3283-
convertWith ,
3284-
convertToJsonWith ,
3285-
convertToJsonStringWith ,
3284+
convertAnyWith ,
3285+
convertAnyToJsonWith ,
3286+
convertAnyToJsonStringWith ,
3287+
convertAnyAsyncWith ,
32863288
serializeWith ,
32873289
serializeToUnknownWith ,
32883290
serializeToJsonStringWith ,

src/S_Core.res

Lines changed: 34 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -249,9 +249,6 @@ type rec t<'value> = {
249249
mutable definerCtx?: char,
250250
@as("m")
251251
metadataMap: dict<unknown>,
252-
@as("a")
253-
mutable // FIXME: Remove
254-
parseAsyncOrRaise: unknown => promise<unknown>,
255252
@as("parseOrThrow")
256253
mutable parseOrRaise: unknown => unknown,
257254
@as("parse")
@@ -1292,59 +1289,67 @@ let useSyncOperation = (schema, operation, input) => {
12921289
}
12931290
}
12941291

1295-
@inline
1296-
let parseAnyOrRaiseWith = (any, schema) => {
1297-
schema.parseOrRaise(any->castAnyToUnknown)->castUnknownToAny
1298-
}
1292+
let asyncPrepareOk = value => Ok(value->castUnknownToAny)
12991293

1300-
let assertOrRaiseWith = (any, schema) => {
1301-
schema.assertOrRaise(any->castAnyToUnknown)
1294+
let asyncPrepareError = jsExn => {
1295+
jsExn->(Obj.magic: Js.Exn.t => exn)->InternalError.getOrRethrow->Error
13021296
}
13031297

1304-
let parseAnyWith = (any, schema) => {
1298+
@inline
1299+
let useAsyncOperation = (schema, operation, input) => {
13051300
try {
1306-
parseAnyOrRaiseWith(any->castAnyToUnknown, schema)->castUnknownToAny->Ok
1301+
schema
1302+
->callMemoizedOperation(operation->Operation.addFlag(Operation.Flag.async), input)
1303+
->Stdlib.Promise.thenResolveWithCatch(asyncPrepareOk, asyncPrepareError)
13071304
} catch {
1308-
| exn => exn->InternalError.getOrRethrow->Error
1305+
| exn => exn->InternalError.getOrRethrow->Error->Stdlib.Promise.resolve
13091306
}
13101307
}
13111308

1312-
let parseWith: (Js.Json.t, t<'value>) => result<'value, error> = parseAnyWith
1313-
1314-
let parseOrRaiseWith: (Js.Json.t, t<'value>) => 'value = parseAnyOrRaiseWith
1315-
1316-
let convertWith = (any, schema) => {
1309+
let convertAnyWith = (any, schema) => {
13171310
schema->useSyncOperation(Operation.make(), any)
13181311
}
13191312

1320-
let convertToJsonWith = (any, schema) => {
1313+
let convertAnyToJsonWith = (any, schema) => {
13211314
schema->useSyncOperation(Operation.make()->Operation.addFlag(Operation.Flag.jsonableOutput), any)
13221315
}
13231316

1324-
let convertToJsonStringWith = (any, schema) => {
1317+
let convertAnyToJsonStringWith = (any, schema) => {
13251318
schema->useSyncOperation(
13261319
Operation.make()->Operation.addFlag(Operation.Flag.jsonStringOutput),
13271320
any,
13281321
)
13291322
}
13301323

1331-
let asyncPrepareOk = value => Ok(value->castUnknownToAny)
1324+
let convertAnyAsyncWith = (any, schema) => {
1325+
schema->useAsyncOperation(Operation.make(), any)
1326+
}
13321327

1333-
let asyncPrepareError = jsExn => {
1334-
jsExn->(Obj.magic: Js.Exn.t => exn)->InternalError.getOrRethrow->Error
1328+
@inline
1329+
let parseAnyOrRaiseWith = (any, schema) => {
1330+
schema.parseOrRaise(any->castAnyToUnknown)->castUnknownToAny
13351331
}
13361332

1337-
let parseAnyAsyncWith = (any, schema) => {
1333+
let assertOrRaiseWith = (any, schema) => {
1334+
schema.assertOrRaise(any->castAnyToUnknown)
1335+
}
1336+
1337+
let parseAnyWith = (any, schema) => {
13381338
try {
1339-
schema.parseAsyncOrRaise(any->castAnyToUnknown)->Stdlib.Promise.thenResolveWithCatch(
1340-
asyncPrepareOk,
1341-
asyncPrepareError,
1342-
)
1339+
parseAnyOrRaiseWith(any->castAnyToUnknown, schema)->castUnknownToAny->Ok
13431340
} catch {
1344-
| exn => exn->InternalError.getOrRethrow->Error->Stdlib.Promise.resolve
1341+
| exn => exn->InternalError.getOrRethrow->Error
13451342
}
13461343
}
13471344

1345+
let parseWith: (Js.Json.t, t<'value>) => result<'value, error> = parseAnyWith
1346+
1347+
let parseOrRaiseWith: (Js.Json.t, t<'value>) => 'value = parseAnyOrRaiseWith
1348+
1349+
let parseAnyAsyncWith = (any, schema) => {
1350+
schema->useAsyncOperation(Operation.make()->Operation.addFlag(Operation.Flag.typeValidation), any)
1351+
}
1352+
13481353
let parseAsyncWith = parseAnyAsyncWith
13491354

13501355
let serializeOrRaiseWith = (value, schema) => {
@@ -1416,18 +1421,6 @@ let initialParseOrRaise = unknown => {
14161421
operation(unknown)
14171422
}
14181423

1419-
let initialParseAsyncOrRaise = unknown => {
1420-
let schema = %raw(`this`)
1421-
let operation = schema.builder->Builder.compile(
1422-
~schema,
1423-
~operation=Operation.make()
1424-
->Operation.addFlag(Operation.Flag.typeValidation)
1425-
->Operation.addFlag(Operation.Flag.async),
1426-
)
1427-
schema.parseAsyncOrRaise = operation
1428-
operation(unknown)
1429-
}
1430-
14311424
let initialAssertOrRaise = unknown => {
14321425
let schema = %raw(`this`)
14331426
let operation = schema.builder->Builder.compile(
@@ -1501,7 +1494,6 @@ let makeReverseSchema = (~name, ~tagged, ~metadataMap, ~builder, ~maybeTypeFilte
15011494
name,
15021495
metadataMap,
15031496
parseOrRaise: initialParseOrRaise,
1504-
parseAsyncOrRaise: initialParseAsyncOrRaise,
15051497
serializeToUnknownOrRaise: initialSerializeToUnknownOrRaise,
15061498
serializeOrRaise: initialSerializeOrRaise,
15071499
assertOrRaise: initialAssertOrRaise,
@@ -1519,7 +1511,6 @@ let makeSchema = (~name, ~tagged, ~metadataMap, ~builder, ~maybeTypeFilter, ~rev
15191511
name,
15201512
metadataMap,
15211513
parseOrRaise: initialParseOrRaise,
1522-
parseAsyncOrRaise: initialParseAsyncOrRaise,
15231514
serializeToUnknownOrRaise: initialSerializeToUnknownOrRaise,
15241515
serializeOrRaise: initialSerializeOrRaise,
15251516
assertOrRaise: initialAssertOrRaise,
@@ -2757,7 +2748,6 @@ module Object = {
27572748
definer: definer->Obj.magic,
27582749
definerCtx: ctx->Obj.magic,
27592750
parseOrRaise: initialParseOrRaise,
2760-
parseAsyncOrRaise: initialParseAsyncOrRaise,
27612751
serializeToUnknownOrRaise: initialSerializeToUnknownOrRaise,
27622752
serializeOrRaise: initialSerializeOrRaise,
27632753
assertOrRaise: initialAssertOrRaise,
@@ -2786,7 +2776,6 @@ module Object = {
27862776
definer: ?schema.definer,
27872777
definerCtx: ?schema.definerCtx,
27882778
parseOrRaise: initialParseOrRaise,
2789-
parseAsyncOrRaise: initialParseAsyncOrRaise,
27902779
serializeToUnknownOrRaise: initialSerializeToUnknownOrRaise,
27912780
serializeOrRaise: initialSerializeOrRaise,
27922781
assertOrRaise: initialAssertOrRaise,
@@ -4253,8 +4242,7 @@ let setGlobalConfig = override => {
42534242
}
42544243
if prevDisableNanNumberCheck != globalConfig.disableNanNumberCheck {
42554244
float.assertOrRaise = initialAssertOrRaise
4256-
float.parseOrRaise = initialParseOrRaise
4257-
float.parseAsyncOrRaise = initialParseAsyncOrRaise
4245+
float.parseOrRaise = initialParseOrRaise // FIXME: Reset all memoid operations by flag
42584246
}
42594247
}
42604248

0 commit comments

Comments
 (0)