Files
herolib/lib/hero/herohandlers/handler.v
2025-09-13 16:26:25 +02:00

75 lines
3.1 KiB
V

module openrpc
import json
import freeflowuniverse.herolib.schemas.openrpc
import freeflowuniverse.herolib.hero.heromodels
import freeflowuniverse.herolib.schemas.jsonrpc
import os
const openrpc_path = os.join_path(os.dir(@FILE), 'openrpc.json')
pub fn new_heromodels_handler() !openrpc.Handler {
mut openrpc_handler := openrpc.Handler {
specification: openrpc.new(path: openrpc_path)!
}
openrpc_handler.register_procedure_handle('comment_get', comment_get)
openrpc_handler.register_procedure_handle('comment_set', comment_set)
openrpc_handler.register_procedure_handle('comment_delete', comment_delete)
openrpc_handler.register_procedure_handle('comment_list', comment_list)
openrpc_handler.register_procedure_handle('calendar_get', calendar_get)
openrpc_handler.register_procedure_handle('calendar_set', calendar_set)
openrpc_handler.register_procedure_handle('calendar_delete', calendar_delete)
openrpc_handler.register_procedure_handle('calendar_list', calendar_list)
return openrpc_handler
}
pub fn comment_get(request jsonrpc.Request) !jsonrpc.Response {
payload := jsonrpc.decode_payload[u32](request.params) or { return jsonrpc.invalid_params }
result := heromodels.comment_get(payload) or { return jsonrpc.internal_error }
return jsonrpc.new_response(request.id, json.encode(result))
}
pub fn comment_set(request jsonrpc.Request) !jsonrpc.Response{
payload := jsonrpc.decode_payload[heromodels.CommentArg](request.params) or { return jsonrpc.invalid_params }
return jsonrpc.new_response(request.id, heromodels.comment_set(payload)!.str())
}
pub fn comment_delete(request jsonrpc.Request) !jsonrpc.Response {
payload := jsonrpc.decode_payload[u32](request.params) or { return jsonrpc.invalid_params }
return jsonrpc.new_response(request.id, '')
}
pub fn comment_list(request jsonrpc.Request) !jsonrpc.Response {
result := heromodels.list[heromodels.Comment]() or { return jsonrpc.internal_error }
return jsonrpc.new_response(request.id, json.encode(result))
}
pub fn calendar_get(request jsonrpc.Request) !jsonrpc.Response {
payload := jsonrpc.decode_payload[u32](request.params) or { return jsonrpc.invalid_params }
result := heromodels.get[heromodels.Calendar](payload) or { return jsonrpc.internal_error }
return jsonrpc.new_response(request.id, json.encode(result))
}
pub fn calendar_set(request jsonrpc.Request) !jsonrpc.Response{
mut payload := json.decode(heromodels.Calendar, request.params) or {
return jsonrpc.invalid_params }
id := heromodels.set[heromodels.Calendar](mut payload) or {
println('error setting calendar $err')
return jsonrpc.internal_error
}
return jsonrpc.new_response(request.id, id.str())
}
pub fn calendar_delete(request jsonrpc.Request) !jsonrpc.Response {
payload := jsonrpc.decode_payload[u32](request.params) or { return jsonrpc.invalid_params }
heromodels.delete[heromodels.Calendar](payload) or { return jsonrpc.internal_error }
return jsonrpc.new_response(request.id, '')
}
pub fn calendar_list(request jsonrpc.Request) !jsonrpc.Response {
result := heromodels.list[heromodels.Calendar]() or { return jsonrpc.internal_error }
return jsonrpc.new_response(request.id, json.encode(result))
}