~/bend-docscommunity

cli/main.bend source

cli/main.bend on the hub · documented module

# V: data structures for your Bend algorithms.import Baseimport ./v.bend as Mimport ./project.bend as Pimport ./vimport.bend as Iimport ./vdry.bend as D# The `v` command. Its commands are namespaced by what they act on: `v system ...` for a system.def usage() -> IO(Unit):  IO.print("usage: v system check | plan | snapshot | import | dryrun | deploy | diagram [out.png]")def plan() -> IO(Unit):  do IO<Unit>:    p : String <- P.run_bend("plan.bend")    IO.print(p)def pick_io(c: Bool, a: IO(Unit), b: IO(Unit)) -> IO(Unit):  match c:    case True{}:      a    case False{}:      bdef first_or(xs: List<String>, d: String) -> String:  match xs:    case []:      d    case x <> _:      xdef run(+cmd: String, rest: List<String>) -> IO(Unit):  pick_io(String.eq(cmd, "check"), M.check(),  pick_io(String.eq(cmd, "plan"), plan(),  pick_io(String.eq(cmd, "snapshot"), M.snapshot_only(),  pick_io(String.eq(cmd, "import"), I.import_mac(),  pick_io(String.eq(cmd, "dryrun"), D.dryrun(),  pick_io(String.eq(cmd, "deploy"), M.deploy(),  pick_io(String.eq(cmd, "diagram"), M.diagram(first_or(rest, "diagram.png")), usage())))))))def system(args: List<String>) -> IO(Unit):  match args:    case []:      usage()    case cmd <> rest:      run(cmd, rest)def dispatch(args: List<String>) -> IO(Unit):  match args:    case []:      usage()    case +ns <> rest:      pick_io(String.eq(ns, "system"), system(rest), usage())def main() -> IO(Unit):  do IO<Unit>:    args : List<String> <- IO.args()    dispatch(args)