removed cli for the good
This commit is contained in:
parent
a64acafbc9
commit
b47bff55af
@ -3,35 +3,36 @@ import forest
|
||||
import gleam/bit_array
|
||||
import gleam/bytes_tree
|
||||
import gleam/dict
|
||||
import gleam/erlang
|
||||
import gleam/erlang/process
|
||||
import gleam/int
|
||||
import gleam/io
|
||||
import gleam/list
|
||||
import gleam/option
|
||||
import gleam/otp/actor
|
||||
import gleam/result
|
||||
import gleam/string
|
||||
import gleam_community/ansi
|
||||
import glisten
|
||||
import query
|
||||
import query_error
|
||||
import spinner
|
||||
import tree_events
|
||||
|
||||
pub fn main() {
|
||||
let forest = init("./treevault.json")
|
||||
|
||||
io.println(
|
||||
"Hello from Treevault! 🌳\n
|
||||
To exit gracefully, use \"exit\".
|
||||
To list available commands, use \"help\".
|
||||
",
|
||||
)
|
||||
read_next(forest)
|
||||
init("./treevault.json")
|
||||
process.sleep_forever()
|
||||
}
|
||||
|
||||
pub fn init(config_path) {
|
||||
let config = config.load(config_path) |> io.debug
|
||||
io.println("🌳 Hello from Treevault! 🌳")
|
||||
let spinner =
|
||||
spinner.new("Loading configuration file...")
|
||||
|> spinner.with_colour(ansi.pink)
|
||||
|> spinner.start
|
||||
let config = config.load(config_path)
|
||||
spinner |> spinner.stop
|
||||
|
||||
let spinner =
|
||||
spinner.new("Loading trees...")
|
||||
|> spinner.with_colour(ansi.pink)
|
||||
|> spinner.start
|
||||
let forest = case forest.load(config.snapshots_path, config.forest) {
|
||||
Error(err) -> {
|
||||
let reason = err |> string.inspect
|
||||
@ -39,7 +40,15 @@ pub fn init(config_path) {
|
||||
}
|
||||
Ok(forest) -> forest
|
||||
}
|
||||
spinner |> spinner.stop
|
||||
|
||||
forest |> serve(config.port)
|
||||
io.println(
|
||||
"All set! Listening on port " <> config.port |> int.to_string <> ".",
|
||||
)
|
||||
}
|
||||
|
||||
fn serve(forest: forest.Forest, port: Int) {
|
||||
let assert Ok(_) =
|
||||
glisten.handler(fn(_conn) { #(Nil, option.None) }, fn(msg, state, conn) {
|
||||
let assert glisten.Packet(msg) = msg
|
||||
@ -67,7 +76,7 @@ pub fn init(config_path) {
|
||||
}
|
||||
actor.continue(state)
|
||||
})
|
||||
|> glisten.serve(config.port)
|
||||
|> glisten.serve(port)
|
||||
|
||||
forest
|
||||
}
|
||||
@ -85,79 +94,3 @@ fn run_query(forest: forest.Forest, root, evt) {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fn read_next(forest) {
|
||||
let command = erlang.get_line("> ")
|
||||
case command {
|
||||
Error(err) -> {
|
||||
err |> string.inspect |> io.println
|
||||
read_next(forest)
|
||||
}
|
||||
|
||||
Ok(term) -> {
|
||||
let term = term |> string.drop_end(1)
|
||||
case term {
|
||||
"exit" -> {
|
||||
graceful(forest)
|
||||
}
|
||||
"help" -> {
|
||||
"Available commands:" |> io.println
|
||||
"help" |> io.println
|
||||
"exit" |> io.println
|
||||
"get <path>" |> io.println
|
||||
"set <path> <data>" |> io.println
|
||||
"trees" |> io.println
|
||||
|
||||
read_next(forest)
|
||||
}
|
||||
"trees" -> {
|
||||
forest.trees |> dict.keys |> list.each(io.println)
|
||||
read_next(forest)
|
||||
}
|
||||
_ -> {
|
||||
case query.parse(term) {
|
||||
Error(_) -> {
|
||||
"Unknown command" |> io.println
|
||||
}
|
||||
Ok(#(root, evt)) -> {
|
||||
let res = run_query(forest, root, evt)
|
||||
res |> result.unwrap_both |> io.println
|
||||
}
|
||||
}
|
||||
|
||||
read_next(forest)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fn graceful(forest: forest.Forest) {
|
||||
let spinner =
|
||||
spinner.new("Shutting down...")
|
||||
|> spinner.with_colour(ansi.pink)
|
||||
|> spinner.start
|
||||
|
||||
forest.trees
|
||||
|> dict.to_list
|
||||
|> list.each(fn(tree) {
|
||||
let ps = tree.1.1
|
||||
let path = tree.1.0
|
||||
|
||||
{ "Exiting: " <> tree.0 } |> io.println
|
||||
let res =
|
||||
ps
|
||||
|> process.call_forever(fn(actor) { tree_events.Snapshot(path, actor) })
|
||||
case res {
|
||||
Ok(ok) -> ok
|
||||
Error(err) -> err
|
||||
}
|
||||
|> io.println
|
||||
|
||||
ps |> process.send(tree_events.Shutdown)
|
||||
})
|
||||
|
||||
process.sleep(1000)
|
||||
"Bye" |> io.println
|
||||
spinner |> spinner.stop
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user