75 lines
3.1 KiB
V
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))
|
|
} |