1 import Base 2 import ../system/effs/io.bend as X 3 import bend-kit-files@0.1.0.0/files.bend as Fs 4 import ../type.bend as A 5 import ./type.bend as Vw 6 import ./ops.bend as VO 7 8 # Drawing views to files: each as /.d2, and as .png through the d2 program. 9 10 def draw(+a: A.Architecture, +dir: String, vs: List<&2, Vw.Named>) -> IO(Unit): 11 match vs: 12 case []: 13 IO.pure(Unit, Unit{}) 14 case v <> rest: 15 match v: 16 case Vw.Named{+name, view}: 17 do IO: 18 X.write(dir ++ "/" ++ name ++ ".d2", VO.d2(a, view)) 19 ok : Bool <- X.succeeds("d2", ["--layout", "elk", "--pad", "40", dir ++ "/" ++ name ++ ".d2", dir ++ "/" ++ name ++ ".png"]) 20 IO.print(name ++ ": " ++ Bool.pick(String, ok, "drawn", "d2 failed")) 21 draw(a, dir, rest) 22 23 def render(+a: A.Architecture, +dir: String, vs: List<&2, Vw.Named>) -> IO(Unit): 24 do IO: 25 _ : Result<&1, &1, U32 & String, Unit> <- Fs.mkdir(dir) 26 draw(a, dir, vs)