Reputation: 837
Suave.Json.mapJson
maps the input JSON to an object into your function, then maps the output of your function into JSON.
The problem is that I'm happy with the way it maps into my function, but I need to return a json string response rather than have suave serialise my output into JSON for me. How can I do this?
Currently i'm getting my output serialised twice. My code so far:
let executeQuery : Query -> string = //Query is my deserialised json input, the return value is a json string
let app = POST >=> path "/graphql" >=> Json.mapJson executeQuery >=> setMimeType "application/json; charset=utf-8"
startWebServer defaultConfig app
Upvotes: 4
Views: 291
Reputation: 36688
If you look at the Suave source code, you'll see that mapJson
is shorthand for mapJsonWith fromJson toJson
. The fromJson
and toJson
functions are the default JSON deserializer and serializer (respectively), but you could create your own instead -- or just use id
to say "map this direction without changing it". E.g.,
let oneWayMapJson = mapJsonWith fromJson id
Note that I haven't tested this, just typed it into the Stack Overflow answer box, so some tweaking may be required. I don't have time to expand on this answer right now, but if you need more help than this rather barebones answer, let me know and I'll try to give you more help sometime tomorrow.
Upvotes: 5