@@ -254,13 +254,13 @@ let private resolveField (execute: ExecuteField) (ctx: ResolveFieldContext) (par
254
254
|> AsyncVal.map( fun v -> if isNull v then None else Some v)
255
255
256
256
257
- type ResolverResult < 'T > = Result< 'T * IObservable< GQLDeferredResponseContent> option * GQLProblemDetails list, GQLProblemDetails list>
257
+ type ResolverResult < 'T > = Result< 'T * IObservable< GQLDeferredResponseContent> voption * GQLProblemDetails list, GQLProblemDetails list>
258
258
259
259
[<RequireQualifiedAccess>]
260
260
module ResolverResult =
261
261
262
- let data data = Ok ( data, None , [])
263
- let defered data deferred = Ok ( data, Some deferred, [])
262
+ let data data = Ok ( data, ValueNone , [])
263
+ let defered data deferred = Ok ( data, ValueSome deferred, [])
264
264
265
265
let mapValue ( f : 'T -> 'U ) ( r : ResolverResult < 'T >) : ResolverResult < 'U > =
266
266
Result.map( fun ( data , deferred , errs ) -> ( f data, deferred, errs)) r
@@ -296,7 +296,7 @@ let deferResults path (res : ResolverResult<obj>) : IObservable<GQLDeferredRespo
296
296
| [] -> DeferredResult ( data, formattedPath)
297
297
| _ -> DeferredErrors ( data, errs, formattedPath)
298
298
|> Observable.singleton
299
- Option .foldBack Observable.concat deferred deferredData
299
+ ValueOption .foldBack Observable.concat deferred deferredData
300
300
| Error errs -> Observable.singleton <| DeferredErrors ( null , errs, formattedPath)
301
301
302
302
/// Collect together an array of results using the appropriate execution strategy.
@@ -312,12 +312,12 @@ let collectFields (strategy : ExecutionStrategy) (rs : AsyncVal<ResolverResult<K
312
312
match ( r, acc) with
313
313
| Ok( field, d, e), Ok( i, deferred, errs) ->
314
314
Array.set data i field
315
- Ok( i - 1 , Option .mergeWith Observable.merge deferred d, e @ errs)
315
+ Ok( i - 1 , ValueOption .mergeWith Observable.merge deferred d, e @ errs)
316
316
| Error e, Ok (_, _, errs) -> Error ( e @ errs)
317
317
| Ok (_, _, e), Error errs -> Error ( e @ errs)
318
318
| Error e, Error errs -> Error ( e @ errs)
319
319
return
320
- Array.foldBack merge collected ( Ok ( data.Length - 1 , None , []))
320
+ Array.foldBack merge collected ( Ok ( data.Length - 1 , ValueNone , []))
321
321
|> ResolverResult.mapValue( fun _ -> data)
322
322
}
323
323
@@ -363,7 +363,7 @@ let rec private direct (returnDef : OutputDef) (ctx : ResolveFieldContext) (path
363
363
| Nullable ( Output innerDef) ->
364
364
let innerCtx = { ctx with ExecutionInfo = { ctx.ExecutionInfo with IsNullable = true ; ReturnDef = innerDef } }
365
365
executeResolvers innerCtx path parent ( toOption value |> AsyncVal.wrap)
366
- |> AsyncVal.map( Result.valueOr ( fun errs -> ( KeyValuePair( name, null ), None , errs)) >> Ok)
366
+ |> AsyncVal.map( Result.valueOr ( fun errs -> ( KeyValuePair( name, null ), ValueNone , errs)) >> Ok)
367
367
368
368
| Interface iDef ->
369
369
let possibleTypesFn = ctx.Schema.GetPossibleTypes
@@ -398,7 +398,7 @@ and deferred (ctx : ResolveFieldContext) (path : FieldPath) (parent : obj) (valu
398
398
executeResolvers ctx path parent ( toOption value |> AsyncVal.wrap)
399
399
|> Observable.ofAsyncVal
400
400
|> Observable.bind( ResolverResult.mapValue( fun d -> d.Value) >> deferResults path)
401
- ResolverResult.defered ( KeyValuePair ( info.Identifier , null )) deferred |> AsyncVal.wrap
401
+ ResolverResult.defered ( KeyValuePair ( name , null )) deferred |> AsyncVal.wrap
402
402
403
403
and private streamed ( options : BufferedStreamOptions ) ( innerDef : OutputDef ) ( ctx : ResolveFieldContext ) ( path : FieldPath ) ( parent : obj ) ( value : obj ) =
404
404
let info = ctx.ExecutionInfo
@@ -420,9 +420,9 @@ and private streamed (options : BufferedStreamOptions) (innerDef : OutputDef) (c
420
420
match r with
421
421
| Ok ( item, d, e) ->
422
422
Array.set data i item.Value
423
- ( i - 1 , box index :: indicies, Option .mergeWith Observable.merge deferred d, e @ errs)
423
+ ( i - 1 , box index :: indicies, ValueOption .mergeWith Observable.merge deferred d, e @ errs)
424
424
| Error e -> ( i - 1 , box index :: indicies, deferred, e @ errs)
425
- let ( _ , indicies , deferred , errs ) = List.foldBack merge chunk ( chunk.Length - 1 , [], None , [])
425
+ let ( _ , indicies , deferred , errs ) = List.foldBack merge chunk ( chunk.Length - 1 , [], ValueNone , [])
426
426
deferResults ( box indicies :: path) ( Ok ( box data, deferred, errs))
427
427
428
428
let buffer ( items : IObservable < int * ResolverResult < KeyValuePair < string , obj >>>) : IObservable < GQLDeferredResponseContent > =
@@ -449,8 +449,8 @@ and private streamed (options : BufferedStreamOptions) (innerDef : OutputDef) (c
449
449
|> Array.mapi resolveItem
450
450
|> Observable.ofAsyncValSeq
451
451
|> buffer
452
- ResolverResult.defered ( KeyValuePair ( info.Identifier , box [])) stream |> AsyncVal.wrap
453
- | _ -> raise <| GQLMessageException ( ErrorMessages.expectedEnumerableValue ctx.ExecutionInfo.Identifier ( value.GetType()))
452
+ ResolverResult.defered ( KeyValuePair ( name , box [])) stream |> AsyncVal.wrap
453
+ | _ -> raise <| GQLMessageException ( ErrorMessages.expectedEnumerableValue name ( value.GetType()))
454
454
455
455
and private live ( ctx : ResolveFieldContext ) ( path : FieldPath ) ( parent : obj ) ( value : obj ) =
456
456
let info = ctx.ExecutionInfo
@@ -485,7 +485,7 @@ and private live (ctx : ResolveFieldContext) (path : FieldPath) (parent : obj) (
485
485
486
486
executeResolvers ctx path parent ( value |> Some |> AsyncVal.wrap)
487
487
// TODO: Add tests for `Observable.merge deferred updates` correct order
488
- |> AsyncVal.map( Result.map( fun ( data , deferred , errs ) -> ( data, Some <| Option .foldBack Observable.merge deferred updates, errs)))
488
+ |> AsyncVal.map( Result.map( fun ( data , deferred , errs ) -> ( data, ValueSome <| ValueOption .foldBack Observable.merge deferred updates, errs)))
489
489
490
490
/// Actually execute the resolvers.
491
491
and private executeResolvers ( ctx : ResolveFieldContext ) ( path : FieldPath ) ( parent : obj ) ( value : AsyncVal < obj option >) : AsyncVal < ResolverResult < KeyValuePair < string , obj >>> =
@@ -505,8 +505,8 @@ and private executeResolvers (ctx : ResolveFieldContext) (path : FieldPath) (par
505
505
let resolveWith ( ctx : ResolveFieldContext ) ( onSuccess : ResolveFieldContext -> FieldPath -> obj -> obj -> AsyncVal < ResolverResult < KeyValuePair < string , obj >>>) : AsyncVal < ResolverResult < KeyValuePair < string , obj >>> = asyncVal {
506
506
let! resolved = value |> AsyncVal.rescue path ctx.Schema.ParseError
507
507
match resolved with
508
- | Error errs when ctx.ExecutionInfo.IsNullable -> return Ok ( KeyValuePair( name, null ), None , errs)
509
- | Ok None when ctx.ExecutionInfo.IsNullable -> return Ok ( KeyValuePair( name, null ), None , [])
508
+ | Error errs when ctx.ExecutionInfo.IsNullable -> return Ok ( KeyValuePair( name, null ), ValueNone , errs)
509
+ | Ok None when ctx.ExecutionInfo.IsNullable -> return Ok ( KeyValuePair( name, null ), ValueNone , [])
510
510
| Error errs -> return Error errs
511
511
| Ok None -> return Error ( nullResolverError name path ctx)
512
512
| Ok ( Some v) -> return ! onSuccess ctx path parent v
@@ -604,16 +604,16 @@ let private executeQueryOrMutation (resultSet: (string * ExecutionInfo) []) (ctx
604
604
| Ok ( Error errs)
605
605
| Error errs -> Error errs
606
606
match result with
607
- | Error errs when info.IsNullable -> return Ok ( KeyValuePair( name, null ), None , errs)
607
+ | Error errs when info.IsNullable -> return Ok ( KeyValuePair( name, null ), ValueNone , errs)
608
608
| Error errs -> return Error errs
609
609
| Ok r -> return Ok r
610
610
}
611
611
612
612
asyncVal {
613
613
let documentId = ctx.ExecutionPlan.DocumentId
614
- match ! resultSet |> Array .map executeRootOperation |> collectFields ctx.ExecutionPlan.Strategy with
615
- | Ok ( data, Some deferred, errs) -> return GQLExecutionResult.Deferred( documentId, NameValueLookup( data), errs, deferred, ctx.Metadata)
616
- | Ok ( data, None , errs) -> return GQLExecutionResult.Direct( documentId, NameValueLookup( data), errs, ctx.Metadata)
614
+ match ! resultSet |> Seq .map executeRootOperation |> collectFields ctx.ExecutionPlan.Strategy with
615
+ | Ok ( data, ValueSome deferred, errs) -> return GQLExecutionResult.Deferred( documentId, NameValueLookup( data), errs, deferred, ctx.Metadata)
616
+ | Ok ( data, ValueNone , errs) -> return GQLExecutionResult.Direct( documentId, NameValueLookup( data), errs, ctx.Metadata)
617
617
| Error errs -> return GQLExecutionResult.RequestError( documentId, errs, ctx.Metadata)
618
618
}
619
619
@@ -635,9 +635,9 @@ let private executeSubscription (resultSet: (string * ExecutionInfo) []) (ctx: E
635
635
Path = fieldPath |> List.rev }
636
636
let onValue v = asyncVal {
637
637
match ! executeResolvers fieldCtx fieldPath value ( toOption v |> AsyncVal.wrap) with
638
- | Ok ( data, None , []) -> return SubscriptionResult ( NameValueLookup.ofList [ nameOrAlias, data.Value])
639
- | Ok ( data, None , errs) -> return SubscriptionErrors ( NameValueLookup.ofList [ nameOrAlias, data.Value], errs)
640
- | Ok (_, Some _, _) -> return failwith " Deferred/Streamed/Live are not supported for subscriptions!"
638
+ | Ok ( data, ValueNone , []) -> return SubscriptionResult ( NameValueLookup.ofList [ nameOrAlias, data.Value])
639
+ | Ok ( data, ValueNone , errs) -> return SubscriptionErrors ( NameValueLookup.ofList [ nameOrAlias, data.Value], errs)
640
+ | Ok (_, ValueSome _, _) -> return failwith " Deferred/Streamed/Live are not supported for subscriptions!"
641
641
| Error errs -> return SubscriptionErrors ( null , errs)
642
642
}
643
643
return
0 commit comments