60 lines
1.0 KiB
V
60 lines
1.0 KiB
V
module main
|
|
|
|
import vweb
|
|
import json
|
|
|
|
const (
|
|
port = 8080
|
|
)
|
|
|
|
struct App {
|
|
vweb.Context
|
|
mut:
|
|
state shared State
|
|
}
|
|
|
|
struct State {
|
|
mut:
|
|
kv_store string
|
|
}
|
|
|
|
fn main() {
|
|
mut app := &App{}
|
|
println('stupid kvstore')
|
|
lock app.state {
|
|
app.state.kv_store = '{}'
|
|
}
|
|
//vweb.run(app, port)
|
|
vweb.run_at(app, family: .ip, host: 'localhost', port: port) ?
|
|
}
|
|
|
|
['/get/:key']
|
|
pub fn (mut app App) kv_get(key string) vweb.Result {
|
|
lock app.state {
|
|
// data := json.decode(map[string]string, app.state.kv_store) or {
|
|
// return app.server_error(500)
|
|
// }
|
|
// if key in data {
|
|
// r := data[key]
|
|
// return app.ok(r)
|
|
// } else {
|
|
// return app.not_found()
|
|
// }
|
|
|
|
return app.ok(app.state.kv_store)
|
|
}
|
|
return app.server_error(500)
|
|
}
|
|
|
|
['/set/:key'; post]
|
|
fn (mut app App) kv_set(key string) vweb.Result {
|
|
lock app.state {
|
|
// mut data := json.decode(map[string]string, app.state.kv_store) or {
|
|
// return app.server_error(500)
|
|
// }
|
|
// data[key] = app.req.data
|
|
app.state.kv_store = app.req.data//json.encode(data)
|
|
}
|
|
return app.text('OK')
|
|
}
|