blob: 3a7b4f4bff722d1aec9c840b592d9c0f9e2ee5c9 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
|
import asynchttpserver
import asyncdispatch
import random
import nimtwirp/nimtwirp
import nimtwirp/errors
import service_pb
import service_twirp
proc MakeHatImpl(service: Haberdasher, size: twirp_example_haberdasher_Size): Future[twirp_example_haberdasher_Hat] {.async.} =
if size.inches <= 0:
raise newTwirpError(TwirpInvalidArgument, "I can't make a hat that small!")
result = newtwirp_example_haberdasher_Hat()
result.inches = size.inches
result.color = rand(["white", "black", "brown", "red", "blue"])
result.name = rand(["bowler", "baseball cap", "top hat", "derby"])
# You can do serving this way if you want to customize the process a bit
var
server = newAsyncHttpServer()
service {.threadvar.}: Haberdasher
service = newHaberdasher()
service.MakeHatImpl = MakeHatImpl
proc handler(req: Request) {.async.} =
# Each service will have a generated handleRequest() proc which takes the
# service object and a asynchttpserver.Request object and returns a
# Future[nimtwirp.Response].
var fut = handleRequest(service, req)
yield fut
if fut.failed:
await respond(req, nimtwirp.newResponse(fut.readError()))
else:
await respond(req, fut.read())
waitFor server.serve(Port(8080), handler)
# Or this way (idea copied from Jester) if your needs are simple.
#
#var settings = newSettings(Port(8080))
#twirpServices(settings):
# service
#runForever()
|