Files
go-omni/contract

contract

Generated API projects use this package to compile Go field tags once and bind each request without depending on a specific HTTP server. New[T] validates a struct and returns an immutable Binder. ForType provides the same compiler to the CLI. BodySchema, Parameters, and ResponseSchema return detached OpenAPI snapshots. MustNew[T] is intended for generated, already checked declarations.

type Request struct {
    ID int64 `path:"id,range=[1:100]"`
    Name string `json:"name" binding:"required,max=50"`
}

var request = contract.MustNew[Request]()

func Handle(c *httpx.Context) error {
    var req Request
    if err := request.Bind(c.Request(), httpx.RouteParams(c.Context()), &req); err != nil {
        return err
    }
    return c.OK(req.Name)
}

The default body limit is 1 MiB. An optional positive final argument to Bind overrides it. Application transport read timeouts still control slow clients. See API.md for source tags, validation rules, null/presence behavior, strict decoding and supported type limits. This API leaves the existing Context.BindJSON/BindQuery/BindURI behavior unchanged.