Initial Dever 0.0.1

This commit is contained in:
Codex committed 2026-11-03 03:32:07 +00:00
commit 81233d098c
1479 files changed
+163782

No files matched your search

+82
View File
@@ -0,0 +1,82 @@
limits(http2: false) (value: dever.http.Limits) { value = dever.http.defaultLimits() }
limits(http2: true) (value: dever.http.Limits) {
value = dever.http.defaultLimits()
value.http2 = dever.http.defaultHttp2Limits()
}
append(event: dever.io.ReadEvent.Chunk(bytes), state: Bytes) (value: Bytes) { value = dever.bytes.concat(state, bytes) }
append(event: dever.io.ReadEvent.Failed(message), state: Bytes) (value: Bytes) { fail(dever.io.ReadEvent.Failed(message)) }
first(event: dever.io.ReadEvent.Chunk(bytes), state: Bytes) (value: Bytes, stop: Bool) { value = bytes
stop = true }
first(event: dever.io.ReadEvent.Failed(message), state: Bytes) (value: Bytes, stop: Bool) { fail(dever.io.ReadEvent.Failed(message)) }
route(request: dever.http.Request, reply: dever.system.HttpReply) () {
selected(request.target == "/wait", request, reply)
}
selected(waiting: false, request: dever.http.Request, reply: dever.system.HttpReply) () {
dever.http.start(reply, 200, [])
dever.http.write(reply, dever.bytes.fromText("head"))
dever.http.write(reply, request.body)
dever.task.sleep(20)
dever.http.write(reply, dever.bytes.fromText("last"))
}
selected(waiting: true, request: dever.http.Request, reply: dever.system.HttpReply) () {
dever.http.start(reply, 200, [])
dever.http.write(reply, dever.bytes.fromText("ready"))
dever.task.sleep(60000)
}
serve(listener: dever.system.Listener, http2: Bool) () {
dever.http.serveLive(route, listener, limits(http2), dever.http.defaultLiveLimits())
}
signal(event: dever.io.ReadEvent.Chunk(bytes), ready: Channel<Bool>) () { send(ready, true) }
signal(event: dever.io.ReadEvent.Failed(message), ready: Channel<Bool>) () { fail(dever.io.ReadEvent.Failed(message)) }
consume(body: AsyncStream<dever.io.ReadEvent>, ready: Channel<Bool>) () { each(signal, body, ready) }
failed(result: dever.http.StreamResponseResult.Read(response)) (value: Bool) recover("验证关闭池的预期失败") { consumed = reduce(append, response.body, dever.bytes.fromText(""))
value = false }
failed(result: dever.http.StreamResponseResult.Failed(message)) (value: Bool) recover("验证关闭池的预期失败") { value = true }
exercise(http2: Bool) (answer: Bool) {
listener = dever.net.listen("127.0.0.1", 0)
server = run(serve(listener, http2))
protocol = limits(http2)
protocol.connections = 1
protocol.body_bytes = 1
pool = dever.http.defaultPoolLimits()
pool.chunk_bytes = 3
client = dever.http.client("http://127.0.0.1:" + int.toText(dever.net.port(listener)), dever.tls.system(), protocol, pool)
request = dever.http.Request { method = "POST", target = "/echo", headers = [], body = dever.bytes.fromText("") }
response = dever.http.open(client, request)
plain = reduce(append, response.body, dever.bytes.fromText(""))
upload = stream([dever.io.ReadEvent.Chunk(dever.bytes.fromText("abc")), dever.io.ReadEvent.Chunk(dever.bytes.fromText("def"))])
sent = dever.http.openStream(client, dever.http.StreamRequest { method = "POST", target = "/echo", headers = [], body = upload })
echoed = reduce(append, sent.body, dever.bytes.fromText(""))
early = dever.http.open(client, request)
prefix = reduceUntil(first, early.body, dever.bytes.fromText(""))
remainder = reduce(append, early.body, dever.bytes.fromText(""))
waiting = dever.http.open(client, dever.http.Request { method = "GET", target = "/wait", headers = [], body = dever.bytes.fromText("") })
ready = channel(Bool, 4)
consumer = run(consume(waiting.body, ready))
observed = receive(ready)
stop(consumer)
cancelled = reduce(append, waiting.body, dever.bytes.fromText(""))
reused = dever.http.open(client, request)
after = reduce(append, reused.body, dever.bytes.fromText(""))
dever.http.closeClient(client)
closed = failed(result(dever.http.open(client, request)))
close(ready)
dever.net.closeListener(listener)
stop(server)
answer = plain == dever.bytes.fromText("headlast") and echoed == dever.bytes.fromText("headabcdeflast") and prefix == dever.bytes.fromText("hea") and remainder == dever.bytes.fromText("") and observed == true and cancelled == dever.bytes.fromText("") and after == plain and closed
}
verify() (answer: Bool) {
first = exercise(false)
second = exercise(true)
answer = first and second
}