Files
herolib/lib/schemas/openrpc/codegen/generate_interface.v
2025-01-02 01:40:01 -05:00

71 lines
2.4 KiB
V

module codegen
import freeflowuniverse.herolib.core.code { VFile, CustomCode, parse_function, parse_import }
import freeflowuniverse.herolib.core.texttools
import freeflowuniverse.herolib.schemas.openrpc {OpenRPC}
// pub fn (mut handler AccountantHandler) handle_ws(client &websocket.Client, message string) string {
// return handler.handle(message) or { panic(err) }
// }
// pub fn run_wsserver(port int) ! {
// mut logger := log.Logger(&log.Log{level: .debug})
// mut handler := AccountantHandler{get(name: 'accountant')!}
// mut server := rpcwebsocket.new_rpcwsserver(port, handler.handle_ws, logger)!
// server.run()!
// }
pub fn generate_interface_file(specification OpenRPC) !VFile {
name := texttools.name_fix(specification.info.title)
mut handle_ws_fn := parse_function('pub fn (mut handler ${name.title()}Handler) handle_ws(client &websocket.Client, message string) string ')!
handle_ws_fn.body = 'return handler.handle(message) or { panic(err) }'
mut run_wsserver_fn := parse_function('pub fn run_wsserver(port int) !')!
run_wsserver_fn.body = "
log_ := log.Log{level: .debug}
mut logger := log.Logger(&log_)
mut handler := ${name.title()}Handler{get(name: '${name}')!}
mut server := rpcwebsocket.new_rpcwsserver(port, handler.handle_ws, logger)!
server.run()!"
items := handle_ws_fn
return VFile{
mod: name
name: 'server'
imports: [
parse_import('log'),
parse_import('net.websocket'),
parse_import('freeflowuniverse.herolib.schemas.rpcwebsocket {RpcWsServer}'),
]
items: [
handle_ws_fn, run_wsserver_fn
]
}
}
pub fn generate_interface_test_file(specification OpenRPC) !VFile {
name := texttools.name_fix(specification.info.title)
// mut handle_ws_fn := parse_function('pub fn (mut handler ${name.title()}Handler) handle_ws(client &websocket.Client, message string) string ')!
// handle_ws_fn.body = "return handler.handle(message) or { panic(err) }"
// mut run_wsserver_fn := parse_function('pub fn run_wsserver(port int) !')!
// run_wsserver_fn.body = "mut logger := log.Logger(&log.Log{level: .debug})
// mut handler := ${name.title()}Handler{get(name: '${name}')!}
// mut server := rpcwebsocket.new_rpcwsserver(port, handler.handle_ws, logger)!
// server.run()!"
// items := handle_ws_fn
mut test_fn := parse_function('pub fn test_wsserver() !')!
test_fn.body = 'spawn run_wsserver(port)'
return VFile{
mod: name
name: 'server_test'
items: [
CustomCode{'const port = 3000'},
test_fn,
]
}
}