mirror of
https://github.com/zap-proto/zip.git
synced 2026-10-19 15:38:57 +00:00
An op is an async fn. It may take &zip::Cx (request headers; the answer's status, headers and trailers) and a zip::Body read as it arrives, and may answer zip::Sse or zip::Body, each chunk written as the op yields it. A client that leaves drops the op's stream. The blocking std::net door is gone: HTTP/1.1 keep-alive and h2c on one port (hyper_util auto), graceful shutdown bounded by a grace. The ZAP door runs on tokio and streams with zap-proto/http's head, data and end frames. Wire names are serde's: the derive reads rename, rename_all, skip and with, and the hand-rolled JSON is deleted. The info manifest comes out byte for byte as before. No zapgen emits Rust, so the crate never built; the frame codec is written in zap.rs and pinned to frames Go wrote. The length prefix is big-endian, as zap-proto/http's transport writes it. examples/stream is a JSON op, an SSE op with a trailer and a byte relay, tested over raw HTTP/1.1, h2c and ZAP sockets. Claude-Session: https://claude.ai/code/session_01SCPMGSQsLNF2YtHFL4bwyp
26 lines
678 B
Plaintext
26 lines
678 B
Plaintext
# Generated from typed ops. Do not edit.
|
|
# Every struct and method below is derived from one op's In and Out, and
|
|
# every offset from the layout the op-call plane encodes against.
|
|
|
|
package stream
|
|
|
|
struct Count {
|
|
n u32 @0
|
|
every_ms u64 @8
|
|
}
|
|
|
|
struct Text {
|
|
text_ text @0
|
|
}
|
|
|
|
interface stream {
|
|
# Count streams n ticks as server-sent events, then [DONE], and reports how
|
|
# many it sent in the x-sent trailer.
|
|
post_count(req: Count)
|
|
# Echo answers the text it was sent.
|
|
post_echo(req: Text) returns (rep: Text)
|
|
# Relay answers the body it was sent, each chunk as it arrives, under the
|
|
# content type it was sent with.
|
|
post_relay()
|
|
}
|