summaryrefslogtreecommitdiff
path: root/src/mcp/tools/update_message.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/mcp/tools/update_message.c')
-rw-r--r--src/mcp/tools/update_message.c22
1 files changed, 18 insertions, 4 deletions
diff --git a/src/mcp/tools/update_message.c b/src/mcp/tools/update_message.c
index aca1bed..9b02a6f 100644
--- a/src/mcp/tools/update_message.c
+++ b/src/mcp/tools/update_message.c
@@ -22,6 +22,8 @@ call_update_message(const mcpc_tool_t *tool, mcpc_ucbr_t *result)
tiny_json_buffer_t json;
bool changed = false;
tiny_metadata_mask_t metadata_mask = 0;
+ const char *metadata_error = NULL;
+ tiny_metadata_parse_status_t metadata_status = TINY_METADATA_PARSE_OK;
tiny_message_init(&parsed);
tiny_message_init(&updated);
patch.content = content;
@@ -29,10 +31,22 @@ call_update_message(const mcpc_tool_t *tool, mcpc_ucbr_t *result)
patch.metadata_mask = 0;
patch.expected_revision = (uint64_t)expected;
patch.has_expected_revision = expected_status == MCPC_EC_0;
- if (!context || !message_id || (!content && !metadata_json)
- || (metadata_json && !tiny_mcp_parse_metadata(metadata_json, &parsed, &metadata_mask))
- || (expected_status != MCPC_EC_0 && expected_status != MCPC_EC_ANYDATA_NOTFOUND)
- || (patch.has_expected_revision && expected < 1))
+ if (metadata_json)
+ {
+ metadata_status
+ = tiny_mcp_parse_metadata(metadata_json, &parsed, &metadata_mask, &metadata_error);
+ }
+ if (metadata_status == TINY_METADATA_PARSE_NO_MEMORY)
+ {
+ tiny_mcp_tool_add_error(result, "INTERNAL_ERROR", metadata_error);
+ }
+ else if (metadata_status == TINY_METADATA_PARSE_INVALID)
+ {
+ tiny_mcp_tool_add_error(result, "VALIDATION_ERROR", metadata_error);
+ }
+ else if (!context || !message_id || (!content && !metadata_json)
+ || (expected_status != MCPC_EC_0 && expected_status != MCPC_EC_ANYDATA_NOTFOUND)
+ || (patch.has_expected_revision && expected < 1))
{
tiny_mcp_tool_add_error(result, "VALIDATION_ERROR", "invalid update_message arguments");
}