diff options
Diffstat (limited to 'example')
| -rw-r--r-- | example/Makefile | 10 | ||||
| -rw-r--r-- | example/README.md | 3 | ||||
| -rw-r--r-- | example/haberdasherclient.nim | 25 | ||||
| -rw-r--r-- | example/haberdasherserver.nim | 26 | ||||
| -rw-r--r-- | example/nim.cfg | 1 | ||||
| -rw-r--r-- | example/service.proto | 22 |
6 files changed, 87 insertions, 0 deletions
diff --git a/example/Makefile b/example/Makefile new file mode 100644 index 0000000..63da56f --- /dev/null +++ b/example/Makefile @@ -0,0 +1,10 @@ +all: haberdasherserver haberdasherclient + +haberdasherserver: haberdasherserver.nim service_pb.nim service_twirp.nim + nim c haberdasherserver.nim + +haberdasherclient: haberdasherclient.nim service_pb.nim service_twirp.nim + nim c haberdasherclient.nim + +%_pb.nim %_twirp.nim: %.proto + ../nimtwirp/nimtwirp_build -I. --out=. $^ diff --git a/example/README.md b/example/README.md new file mode 100644 index 0000000..acdee60 --- /dev/null +++ b/example/README.md @@ -0,0 +1,3 @@ +# Nimtwirp usage example + +This example is basically stolen from [twirp](https://twitchtv.github.io/twirp/docs/example.html). diff --git a/example/haberdasherclient.nim b/example/haberdasherclient.nim new file mode 100644 index 0000000..d402356 --- /dev/null +++ b/example/haberdasherclient.nim @@ -0,0 +1,25 @@ +import os +import strformat +import strutils + +import service_pb +import service_twirp + +if paramCount() != 1: + echo("usage: " & getAppFilename() & " <size>") + quit(QuitFailure) + +var size = newtwirp_example_haberdasher_Size() +try: + size.inches = parseInt(paramStr(1)).int32 +except: + echo("invalid size") + quit(QuitFailure) + +let client = newHaberdasherClient("http://localhost:8080") + +try: + let hat = MakeHat(client, size) + echo(&"I have a nice new hat: {hat.inches} inch {hat.color} {hat.name}") +except Exception as exc: + echo(&"oh no: {exc.msg}") diff --git a/example/haberdasherserver.nim b/example/haberdasherserver.nim new file mode 100644 index 0000000..a41c3b8 --- /dev/null +++ b/example/haberdasherserver.nim @@ -0,0 +1,26 @@ +import asynchttpserver +import asyncdispatch +import random + +import nimtwirp/errors + +import service_pb +import service_twirp + +type + HaberdasherService = object + +proc MakeHat(x: HaberdasherService, size: twirp_example_haberdasher_Size): twirp_example_haberdasher_Hat = + 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"]) + +var + server = newAsyncHttpServer() + service: HaberdasherService + +waitFor server.serve(Port(8080), HaberdasherServer(service, "/")) diff --git a/example/nim.cfg b/example/nim.cfg new file mode 100644 index 0000000..8ea4922 --- /dev/null +++ b/example/nim.cfg @@ -0,0 +1 @@ +--path=".." diff --git a/example/service.proto b/example/service.proto new file mode 100644 index 0000000..1945a72 --- /dev/null +++ b/example/service.proto @@ -0,0 +1,22 @@ +syntax = "proto3"; + +package twirp.example.haberdasher; +option go_package = "haberdasher"; + +// Haberdasher service makes hats for clients. +service Haberdasher { + // MakeHat produces a hat of mysterious, randomly-selected color! + rpc MakeHat(Size) returns (Hat); +} + +// Size of a Hat, in inches. +message Size { + int32 inches = 1; // must be > 0 +} + +// A Hat is a piece of headwear made by a Haberdasher. +message Hat { + int32 inches = 1; + string color = 2; // anything but "invisible" + string name = 3; // i.e. "bowler" +} |
