///|
/// The contract used by the reproducible quickstart package.
pub fn quickstart_source() -> String {
(
#|{
#| "openrpc":"1.4.0",
#| "info":{"title":"Inventory","version":"1.0.0","description":"A small inventory JSON-RPC API"},
#| "servers":[{"name":"primary","url":"https://{region}.inventory.example/rpc","variables":{"region":{"default":"dev","enum":["dev","staging"]}}}],
#| "components":{
#| "schemas":{
#| "InventoryId":{"type":"string","minLength":1},
#| "InventoryItem":{"type":"object","properties":{"id":{"$ref":"#/components/schemas/InventoryId"}}}
#| }
#| },
#| "methods":[
#| {"name":"inventory.get","summary":"Look up one item","tags":[{"name":"inventory"}],"params":[{"name":"id","required":true,"schema":{"$ref":"#/components/schemas/InventoryId"}}],"result":{"name":"item","schema":{"$ref":"#/components/schemas/InventoryItem"}},"examples":[{"name":"example-item","params":[{"name":"id","value":"abc"}],"result":{"name":"item","value":{"id":"abc"}}}]}
#| ]
#|}
)
}
///|
/// Produce the deterministic summary printed by the quickstart executable.
pub fn quickstart_summary() -> Result[String, Array[Diagnostic]] {
let document = match Document::parse(quickstart_source()) {
Ok(value) => value
Err(diagnostics) => return Err(diagnostics)
}
let method_value = match document.find_method("inventory.get") {
Some(value) => value
None =>
return Err([
diagnostic("$.methods", UnknownMethod, "quickstart method is missing"),
])
}
let request = match method_value.build_request(7, { "id": "abc" }) {
Ok(value) => value
Err(diagnostics) => return Err(diagnostics)
}
match document.validate_named_params("inventory.get", { "id": "abc" }) {
Ok(_) => ()
Err(diagnostics) => return Err(diagnostics)
}
match document.validate_examples("inventory.get") {
Ok(_) => ()
Err(diagnostics) => return Err(diagnostics)
}
let server = match document.find_server("primary") {
Some(value) => value
None =>
return Err([
diagnostic(
"$.servers",
UnknownServerVariable,
"quickstart server is missing",
),
])
}
let server_url = match server.render_url(Map([])) {
Ok(value) => value
Err(diagnostics) => return Err(diagnostics)
}
Ok(
"method=" +
method_value.name +
", server=" +
server_url +
", request=" +
request.stringify(),
)
}