Advertisement
Guest User

Untitled

a guest
Mar 28th, 2019
79
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
F# 1.38 KB | None | 0 0
  1. module ResponseMapping
  2.  
  3. open Newtonsoft.Json.Linq
  4. open Aggregation
  5.  
  6. /// Add each response to a json object
  7. /// Use the Rel for Fetch requests or the Href for Follow requests as the property name
  8. let defaultMapper responses =
  9.     let response = JObject()
  10.     responses
  11.     |> List.iter
  12.         (function
  13.          | CompletedFollow { Content = data; Href = uri } -> response.[uri] <- data
  14.          | CompletedFetch { Content = data; Rel = rel } -> response.[rel] <- data)
  15.  
  16.     response
  17.  
  18. /// Follow responses are added to an array of key value pairs
  19. /// the key in each pair is the href, the array is identified by the follow rel
  20. let codableMapper responses =
  21.     let response = JObject()
  22.     responses
  23.     |> List.choose (function | CompletedFetch x -> Some x | _ -> None)
  24.     |> List.iter (fun { Content = data; Rel = rel } -> response.[rel] <- data)
  25.  
  26.     responses
  27.     |> List.choose (function | CompletedFollow x -> Some x | _ -> None)
  28.     |> List.groupBy (fun x -> x.Rel)
  29.     |> List.iter
  30.         (fun (key, rs) ->
  31.             let responseArray = JArray()
  32.             rs
  33.             |> List.iter
  34.                  (fun r ->
  35.                      let entry = JObject()
  36.                      entry.["uri"] <- JValue(r.Href)
  37.                      entry.["body"] <- r.Content
  38.                      responseArray.Add entry)
  39.             response.[key] <- responseArray)
  40.  
  41.     response
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement