domain/architecture/view/effects.bend

near-v-framework@0.3.0.2 · 26 lines · 0 definitions

1import Base
2import near-v-framework@0.3.0.2/domain/architecture/system/effs/io.bend as X
3import bend-kit-files@0.1.0.0/files.bend as Fs
4import near-v-framework@0.3.0.2/domain/architecture/type.bend as A
5import near-v-framework@0.3.0.2/domain/architecture/view/type.bend as Vw
6import near-v-framework@0.3.0.2/domain/architecture/view/ops.bend as VO
7
8# Drawing views to files: each as <dir>/<name>.d2, and as .png through the d2 program.
9
10def 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<Unit>:
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
23def render(+a: A.Architecture, +dir: String, vs: List<&2, Vw.Named>) -> IO(Unit):
24  do IO<Unit>:
25    _ : Result<&1, &1, U32 & String, Unit> <- Fs.mkdir(dir)
26    draw(a, dir, vs)