mirror of
https://github.com/zap-proto/go.git
synced 2026-10-30 15:05:00 +00:00
zapgen — interface (RPC) support: - Parse `interface` decls (brace + whitespace forms, one parser) with 1-based auto-assigned method ordinals; methods take ≤1 struct request and (after `returns`) ≤1 struct response, matching the spec README grammar. - desugar: `interface` opens a whitespace block; method lines pass through verbatim (no @N). Block headers now honored only at file scope, so a struct field NAMED `interface`/`struct` stays a field (H4 preserved). - emit: per interface a 1-based ordinal table, a typed Client over a Channel seam, and an abstract Handler + Dispatch<Iface> ordinal router, all over the new runtime call envelope. Method names exported. - New `rpc` package: the ZAP call envelope (BuildRequest/ParseRequest, BuildResponse/ParseResponse, Call, Response, status codes), byte-compatible with the other runtimes' transport envelopes (Version2 header + router msgType flags). Adds zap.NewBuilderV2. - examples/echo: generated service + end-to-end client↔dispatch↔handler test covering request/response, void, no-request, bare, handler-error, and unknown-ordinal paths. Golden fixtures for the interface codegen. cap — reconcile to SPEC v1.1: - B3 signature scope: sign SPEC §3 canonical bytes (Capability[0..164) || canonical(Caveats), Kind:u32||len:u32||Value), via Cap.CanonicalBytes — one definition shared by signer and verifier; excludes Sig and heap indirection so caps verify cross-language. CapID = Hash32(Canonical||Sig). - B2 delegation gate: define cross-cutting Permission bits (PermAttenuate 1<<32, PermAudit, PermRoot); enforce SPEC §2.3 step 3d in VerifyChain and at mint time in Attenuate (refuse a cap the verifier would reject). - B4/B6: VerifyRevocation is scheme-aware (dispatches on the tag byte); verifySig fails closed on SchemeReserved/unknown instead of falling back to ed25519. Verifier.VerifyRevocation added for PQ revocations. - spec_test.go covers all four. Rebrand finish + docs: - Zero capnp/Cap'n Proto and zero hanzo/avalabs/capnproto.org tokens in zap-native source (zap.go doc neutralized; cap doc-comment brand refs generalized). LLM.md refreshed: zapgen shipped (not "forthcoming"), rpc package, interface DSL, cap signature scope. Ignore the agents example binary. go build ./... and go test ./... -count=1 pass; race-clean on changed pkgs.
43 lines
914 B
Go
43 lines
914 B
Go
// Code generated by zapgen; DO NOT EDIT.
|
|
// source: echo.zap
|
|
|
|
package echo
|
|
|
|
import (
|
|
zap "github.com/zap-proto/go"
|
|
)
|
|
|
|
const (
|
|
pingSeqOff = 0
|
|
pingSize = 8
|
|
)
|
|
|
|
// Ping is a zero-copy view into a ZAP-encoded Ping message.
|
|
type Ping struct{ o zap.Object }
|
|
|
|
// WrapPing parses b and returns a typed view. Returns an error if the
|
|
// wire-level checks (magic, version, size) fail.
|
|
func WrapPing(b []byte) (Ping, error) {
|
|
m, err := zap.Parse(b)
|
|
if err != nil {
|
|
return Ping{}, err
|
|
}
|
|
return Ping{o: m.Root()}, nil
|
|
}
|
|
|
|
func (t Ping) Seq() uint64 { return t.o.Uint64(pingSeqOff) }
|
|
|
|
// PingInput collects the field values for NewPing.
|
|
type PingInput struct {
|
|
Seq uint64
|
|
}
|
|
|
|
// NewPing builds a ZAP-encoded Ping message from in and returns the bytes.
|
|
func NewPing(in PingInput) []byte {
|
|
b := zap.NewBuilder(256)
|
|
ob := b.StartObject(pingSize)
|
|
ob.SetUint64(pingSeqOff, in.Seq)
|
|
ob.FinishAsRoot()
|
|
return b.Finish()
|
|
}
|