/
httpserver.smithy
92 lines (76 loc) · 2 KB
/
httpserver.smithy
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
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
// httpserver.smithy
// Definition of the wasmcloud:httpserver capability contract
//
metadata package = [{
namespace: "org.wasmcloud.interface.httpserver",
crate: "wasmcloud_interface_httpserver"
py_module: "wasmcloud_interface_httpserver",
doc: "Httpserver: wasmcloud capability contract for http server",
}]
namespace org.wasmcloud.interface.httpserver
use org.wasmcloud.model#codegenRust
use org.wasmcloud.model#n
use org.wasmcloud.model#U16
use org.wasmcloud.model#wasmbus
/// HttpServer is the contract to be implemented by actor
@wasmbus(
contractId: "wasmcloud:httpserver",
actorReceive: true )
service HttpServer {
version: "0.1",
operations: [ HandleRequest ]
}
operation HandleRequest {
input: HttpRequest,
output: HttpResponse,
}
/// HttpRequest contains data sent to actor about the http request
structure HttpRequest {
/// HTTP method. One of: GET,POST,PUT,DELETE,HEAD,OPTIONS,CONNECT,PATCH,TRACE
@required
@n(0)
method: String,
/// full request path
@required
@n(1)
path: String,
/// query string. May be an empty string if there were no query parameters.
@required
@n(2)
queryString: String,
/// map of request headers (string key, string value)
@required
@n(3)
header: HeaderMap,
/// Request body as a byte array. May be empty.
@required
@n(4)
body: Blob,
}
/// HttpResponse contains the actor's response to return to the http client
// don't generate Default so we can customize it
@codegenRust( noDeriveDefault: true )
structure HttpResponse {
/// statusCode is a three-digit number, usually in the range 100-599,
/// A value of 200 indicates success.
@required
@n(0)
statusCode: U16,
/// Map of headers (string keys, list of values)
@required
@n(1)
header: HeaderMap,
/// Body of response as a byte array. May be an empty array.
@required
@n(2)
body: Blob,
}
/// map data structure for holding http headers
///
map HeaderMap {
key: String,
value: HeaderValues,
}
list HeaderValues {
member: String
}