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+
130type t
231
332external unsafeToJsonSchema : 'a => t = "%identity"
@@ -85,23 +114,23 @@ type node = {rawSchema: Raw.t, isRequired: bool}
85114let 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
203230let 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
215242let 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
223250let description = (struct , value ) => {
0 commit comments