sausage-plugin part 2: import! with typed clients (sausage_interface::client_rs), TCP endpoints with rpc.endpoint, examples

Part 1 fixes: complete stdout writes, buffered stdin, Rust type names
in schemas, enum variant docs, -32603 for serde errors in handlers,
crate docs and modules. End-to-end check of a generated consumer through
a fake core.
This commit is contained in:
2026-10-23 00:35:45 +01:00
parent ae1cb4cc99
commit 8d3c163992
42 changed files with 3020 additions and 856 deletions
+92
View File
@@ -0,0 +1,92 @@
{
"components": {
"schemas": {
"AddParams": {
"description": "Parameters for a new note.",
"properties": {
"text": {
"description": "The complete note text, including any newlines.",
"type": "string"
}
},
"required": [
"text"
],
"type": "object"
},
"Added": {
"description": "The result after a note enters the list.",
"properties": {
"count": {
"description": "The number of notes, including the new note.",
"format": "uint",
"minimum": 0,
"type": "integer"
}
},
"required": [
"count"
],
"type": "object"
},
"Empty": {
"description": "Empty parameters for methods without arguments.",
"type": "object"
}
}
},
"info": {
"title": "notes",
"version": "0.1.0"
},
"methods": [
{
"description": "Add a note and return the new count.",
"name": "add",
"paramStructure": "by-name",
"params": [
{
"description": "The complete note text, including any newlines.",
"name": "text",
"required": true,
"schema": {
"description": "The complete note text, including any newlines.",
"type": "string"
}
}
],
"result": {
"name": "result",
"schema": {
"$ref": "#/components/schemas/Added"
}
},
"summary": "Add a note and return the new count.",
"x-sausage-params": {
"$ref": "#/components/schemas/AddParams"
}
},
{
"description": "List all notes, oldest first.",
"name": "list",
"paramStructure": "by-name",
"params": [],
"result": {
"name": "result",
"schema": {
"items": {
"type": "string"
},
"type": "array"
}
},
"summary": "List all notes, oldest first.",
"x-sausage-params": {
"$ref": "#/components/schemas/Empty"
}
}
],
"openrpc": "1.2.6",
"x-sausage-endpoints": {},
"x-sausage-imports": {}
}
+135
View File
@@ -0,0 +1,135 @@
{
"components": {
"schemas": {
"Empty": {
"description": "Empty parameters for methods without arguments.",
"type": "object"
},
"GetParams": {
"description": "The name of a secret to read.",
"properties": {
"name": {
"description": "The unique name within this vault.",
"type": "string"
}
},
"required": [
"name"
],
"type": "object"
},
"PutParams": {
"description": "The name and value of a secret.",
"properties": {
"name": {
"description": "The unique name within this vault.",
"type": "string"
},
"value": {
"description": "The text to store until process exit.",
"type": "string"
}
},
"required": [
"name",
"value"
],
"type": "object"
}
}
},
"info": {
"title": "secrets",
"version": "0.1.0"
},
"methods": [
{
"description": "Open the in-memory vault and publish its endpoint.",
"name": "serve",
"paramStructure": "by-name",
"params": [],
"result": {
"name": "result",
"schema": {
"type": "null"
}
},
"summary": "Open the in-memory vault and publish its endpoint.",
"x-sausage-params": {
"$ref": "#/components/schemas/Empty"
}
}
],
"openrpc": "1.2.6",
"x-sausage-endpoints": {
"vault": {
"methods": [
{
"description": "Store a secret and report its name to the caller.",
"name": "put",
"paramStructure": "by-name",
"params": [
{
"description": "The unique name within this vault.",
"name": "name",
"required": true,
"schema": {
"description": "The unique name within this vault.",
"type": "string"
}
},
{
"description": "The text to store until process exit.",
"name": "value",
"required": true,
"schema": {
"description": "The text to store until process exit.",
"type": "string"
}
}
],
"result": {
"name": "result",
"schema": {
"type": "null"
}
},
"summary": "Store a secret and report its name to the caller.",
"x-sausage-params": {
"$ref": "#/components/schemas/PutParams"
}
},
{
"description": "Read a secret, or return null when its name is absent.",
"name": "get",
"paramStructure": "by-name",
"params": [
{
"description": "The unique name within this vault.",
"name": "name",
"required": true,
"schema": {
"description": "The unique name within this vault.",
"type": "string"
}
}
],
"result": {
"name": "result",
"schema": {
"type": [
"string",
"null"
]
}
},
"summary": "Read a secret, or return null when its name is absent.",
"x-sausage-params": {
"$ref": "#/components/schemas/GetParams"
}
}
]
}
},
"x-sausage-imports": {}
}
+104
View File
@@ -0,0 +1,104 @@
{
"components": {
"schemas": {
"Empty": {
"description": "Empty parameters for methods without arguments.",
"type": "object"
},
"StartParams": {
"description": "The server configuration.",
"properties": {
"port": {
"description": "The HTTP port on all network interfaces.",
"format": "uint16",
"maximum": 65535,
"minimum": 0,
"type": "integer"
}
},
"required": [
"port"
],
"type": "object"
}
}
},
"info": {
"title": "www",
"version": "0.1.0"
},
"methods": [
{
"description": "Start the HTTP server and return its process ID.",
"name": "start",
"paramStructure": "by-name",
"params": [
{
"description": "The HTTP port on all network interfaces.",
"name": "port",
"required": true,
"schema": {
"description": "The HTTP port on all network interfaces.",
"format": "uint16",
"maximum": 65535,
"minimum": 0,
"type": "integer"
}
}
],
"result": {
"name": "result",
"schema": {
"type": "string"
}
},
"summary": "Start the HTTP server and return its process ID.",
"x-sausage-params": {
"$ref": "#/components/schemas/StartParams"
}
}
],
"openrpc": "1.2.6",
"x-sausage-endpoints": {
"control": {
"methods": [
{
"description": "Count the HTTP requests this server answered.",
"name": "stats",
"paramStructure": "by-name",
"params": [],
"result": {
"name": "result",
"schema": {
"format": "uint64",
"minimum": 0,
"type": "integer"
}
},
"summary": "Count the HTTP requests this server answered.",
"x-sausage-params": {
"$ref": "#/components/schemas/Empty"
}
},
{
"description": "End this process after the response reaches the client.",
"name": "stop",
"paramStructure": "by-name",
"params": [],
"result": {
"name": "result",
"schema": {
"type": "null"
}
},
"summary": "End this process after the response reaches the client.",
"x-sausage-params": {
"$ref": "#/components/schemas/Empty"
}
}
]
}
},
"x-sausage-grace": 5,
"x-sausage-imports": {}
}