flowey_lib_hvlite/
init_openvmm_magicpath_virtio_win.rs1use flowey::node::prelude::*;
9
10flowey_request! {
11 pub struct Request(pub WriteVar<SideEffect>);
12}
13
14new_simple_flow_node!(struct Node);
15
16impl SimpleFlowNode for Node {
17 type Request = Request;
18
19 fn imports(ctx: &mut ImportCtx<'_>) {
20 ctx.import::<crate::cfg_openvmm_magicpath::Node>();
21 ctx.import::<crate::resolve_openvmm_test_virtio_win::Node>();
22 }
23
24 fn process_request(request: Self::Request, ctx: &mut NodeCtx<'_>) -> anyhow::Result<()> {
25 let Request(done) = request;
26 let magicpath = ctx.reqv(crate::cfg_openvmm_magicpath::Request);
27 let virtio_win_dir = ctx.reqv(crate::resolve_openvmm_test_virtio_win::Request::Get);
28
29 ctx.emit_rust_step("copy virtio-win drivers to magicpath", |ctx| {
30 let magicpath = magicpath.claim(ctx);
31 let virtio_win_dir = virtio_win_dir.claim(ctx);
32 done.claim(ctx);
33 move |rt| {
34 let magicpath = rt.read(magicpath);
35 let src = rt.read(virtio_win_dir);
36 let dst = magicpath.join("virtio-win");
37 let _ = fs_err::remove_dir_all(&dst);
38 flowey_lib_common::_util::copy_dir_all(&src, &dst)?;
39 Ok(())
40 }
41 });
42
43 Ok(())
44 }
45}