///|
fn main {
try {
let body : Json = {
"type": "object",
"required": ["name"],
"properties": { "name": { "type": "string", "maxLength": 64 } },
}
let record : Json = {
"type": "object",
"properties": {
"id": { "type": "integer" },
"name": { "type": "string" },
},
}
let id : Json = {
"name": "id",
"in": "path",
"required": true,
"schema": { "type": "integer" },
}
let spec : @engine.Spec = {
operations: [
{
id: "new",
verb: "POST",
path: "/notes",
parameters: [],
request: body,
responses: { "201": record },
},
{
id: "find",
verb: "GET",
path: "/notes/{id}",
parameters: [id],
request: null,
responses: { "200": record, "404": null },
},
{
id: "edit",
verb: "PATCH",
path: "/notes/{id}",
parameters: [id],
request: body,
responses: { "200": record },
},
{
id: "remove",
verb: "DELETE",
path: "/notes/{id}",
parameters: [id],
request: null,
responses: { "204": null },
},
],
}
let generated = @engine.crud_plan(
spec, "/notes", "name", "moonapi_111111111111111111111111", "moonapi_222222222222222222222222",
)
@engine.validate_sequence(@engine.field(generated, "trace"))
assert_eq(@engine.field(generated, "profile"), "owned-crud-v1")
println("portable CRUD consumer verified")
} catch {
_ => abort("portable CRUD consumer failed")
}
}