71 lines
2.4 KiB
V
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,
|
|
]
|
|
}
|
|
}
|