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/bit_array
|
||||||
import gleam/bytes_tree
|
import gleam/bytes_tree
|
||||||
import gleam/dict
|
import gleam/dict
|
||||||
import gleam/erlang
|
|
||||||
import gleam/erlang/process
|
import gleam/erlang/process
|
||||||
|
import gleam/int
|
||||||
import gleam/io
|
import gleam/io
|
||||||
import gleam/list
|
|
||||||
import gleam/option
|
import gleam/option
|
||||||
import gleam/otp/actor
|
import gleam/otp/actor
|
||||||
import gleam/result
|
|
||||||
import gleam/string
|
import gleam/string
|
||||||
import gleam_community/ansi
|
import gleam_community/ansi
|
||||||
import glisten
|
import glisten
|
||||||
import query
|
import query
|
||||||
import query_error
|
import query_error
|
||||||
import spinner
|
import spinner
|
||||||
import tree_events
|
|
||||||
|
|
||||||
pub fn main() {
|
pub fn main() {
|
||||||
let forest = init("./treevault.json")
|
init("./treevault.json")
|
||||||
|
process.sleep_forever()
|
||||||
io.println(
|
|
||||||
"Hello from Treevault! 🌳\n
|
|
||||||
To exit gracefully, use \"exit\".
|
|
||||||
To list available commands, use \"help\".
|
|
||||||
",
|
|
||||||
)
|
|
||||||
read_next(forest)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn init(config_path) {
|
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) {
|
let forest = case forest.load(config.snapshots_path, config.forest) {
|
||||||
Error(err) -> {
|
Error(err) -> {
|
||||||
let reason = err |> string.inspect
|
let reason = err |> string.inspect
|
||||||
@ -39,7 +40,15 @@ pub fn init(config_path) {
|
|||||||
}
|
}
|
||||||
Ok(forest) -> forest
|
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(_) =
|
let assert Ok(_) =
|
||||||
glisten.handler(fn(_conn) { #(Nil, option.None) }, fn(msg, state, conn) {
|
glisten.handler(fn(_conn) { #(Nil, option.None) }, fn(msg, state, conn) {
|
||||||
let assert glisten.Packet(msg) = msg
|
let assert glisten.Packet(msg) = msg
|
||||||
@ -67,7 +76,7 @@ pub fn init(config_path) {
|
|||||||
}
|
}
|
||||||
actor.continue(state)
|
actor.continue(state)
|
||||||
})
|
})
|
||||||
|> glisten.serve(config.port)
|
|> glisten.serve(port)
|
||||||
|
|
||||||
forest
|
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