#[test] fn test_generalize() { let command = vec![make_command( 1, &[39, 40, 41, 42, 43, 44, 45, 46, 47, 48], "The command", )]; let jobs = vec![ make_job(39, &[10, 20], &[], "Install packages on server oss2.local."), make_job(40, &[11, 21], &[39], "Configure NTP on oss2.local."), make_job(41, &[12, 22], &[39], "Enable LNet on oss2.local."), make_job(42, &[13, 23], &[39], "Configure Corosync on oss2.local."), make_job(43, &[14, 24], &[42], "Start Corosync on oss2.local"), make_job(44, &[15, 25], &[41], "Load the LNet kernel modules."), make_job(45, &[16, 26], &[44], "Start the LNet networking layer."), make_job(46, &[17, 27], &[39, 43], "Configure Pacemaker on oss2.local."), make_job(47, &[18, 28], &[43, 46], "Start Pacemaker on oss2.local."), make_job( 48, &[19, 29], &[39, 40, 41, 42, 45, 46, 47], "Setup managed host oss2.local.", ), ]; let steps = vec![ make_step(10, "Step ten"), make_step(11, "Step eleven"), make_step(12, "Step twelve"), make_step(13, "Step thirteen"), make_step(14, "Step fourteen"), make_step(15, "Step fifteen"), make_step(16, "Step sixteen"), make_step(17, "Step seventeen"), make_step(18, "Step eighteen"), make_step(19, "Step nineteen"), make_step(20, "Step twenty"), make_step(21, "Step twenty one"), make_step(22, "Step twenty two"), make_step(23, "Step twenty three"), make_step(24, "Step twenty four"), make_step(25, "Step twenty five"), make_step(26, "Step twenty six"), make_step(27, "Step twenty seven"), make_step(28, "Step twenty eight"), make_step(29, "Step twenty nine"), ]; let mut model = Model::default(); model.commands = convert_to_rich_hashmap(command, extract_children_from_cmd); model.jobs = convert_to_rich_hashmap(jobs, extract_children_from_job); model.steps = convert_to_rich_hashmap(steps, extract_children_from_step); model.refresh_view((true, true, true)); let mut ctx = Context { steps_view: &model.steps_view, select: &model.select, }; let dag_view = traverse_graph( &model.jobs_graphs[&CmdId(1)], &graph_item_view, &graph_item_combine, &mut ctx, ); let dag_view = div![dag_view]; assert_eq!(format!("{:#?}", dag_view), NODE); } fn graph_item_combine(parent: Node, acc: Vec>, _ctx: &mut Context) -> Node { if !parent.is_empty() { // all the dependencies are shifted with the indent let acc_plus = acc.into_iter().map(|a| a.merge_attrs(class![C.ml_3, C.mt_1])); div![parent, acc_plus] } else { empty!() } } fn graph_item_view(job: Arc, is_new: bool, ctx: &mut Context) -> Node { if is_new { let icon = job_status_icon(job.as_ref()); // we don't use job.deps() since deps() now show interdependencies between jobs if job.steps.is_empty() { span![span![class![C.mr_1], icon], span![job.description]] } else { let is_open = ctx.select.contains(TypedId::Job(job.id)); let def_vec = Vec::new(); let steps = ctx.steps_view.get(&JobId(job.id)).unwrap_or(&def_vec); div![ a![ span![class![C.mr_1], icon], span![class![C.cursor_pointer, C.underline], job.description], simple_ev(Ev::Click, Msg::Click(TypedId::Job(job.id))), ], step_list_view(steps, &ctx.select, is_open), ] } } else { empty!() } } const NODE: &'static str = r#"Element( El { tag: Div, attrs: Attrs { vals: {}, }, style: Style { vals: {}, }, event_handler_manager: EventHandlerManager { groups: {}, }, children: [ Element( El { tag: Div, attrs: Attrs { vals: {}, }, style: Style { vals: {}, }, event_handler_manager: EventHandlerManager { groups: {}, }, children: [ Element( El { tag: Div, attrs: Attrs { vals: {}, }, style: Style { vals: {}, }, event_handler_manager: EventHandlerManager { groups: {}, }, children: [ Element( El { tag: A, attrs: Attrs { vals: {}, }, style: Style { vals: {}, }, event_handler_manager: EventHandlerManager { groups: { Click: Group { event_handlers: RefCell { value: [ EventHandler('click'), ], }, listener: None, }, }, }, children: [ Element( El { tag: Span, attrs: Attrs { vals: { Class: Some( "mr-1", ), }, }, style: Style { vals: {}, }, event_handler_manager: EventHandlerManager { groups: {}, }, children: [ Element( El { tag: Svg, attrs: Attrs { vals: { Class: Some( "fill-current fill-current w-4 h-4 inline text-green-500", ), }, }, style: Style { vals: {}, }, event_handler_manager: EventHandlerManager { groups: {}, }, children: [ Element( El { tag: Use, attrs: Attrs { vals: { Class: Some( "pointer-events-none", ), Href: Some( "sprites/solid.svg#check", ), }, }, style: Style { vals: {}, }, event_handler_manager: EventHandlerManager { groups: {}, }, children: [], namespace: Some( Svg, ), node_ws: None, refs: [], }, ), ], namespace: Some( Svg, ), node_ws: None, refs: [], }, ), ], namespace: None, node_ws: None, refs: [], }, ), Element( El { tag: Span, attrs: Attrs { vals: { Class: Some( "cursor-pointer underline", ), }, }, style: Style { vals: {}, }, event_handler_manager: EventHandlerManager { groups: {}, }, children: [ Text( Text { text: "Setup managed host oss2.local.", node_ws: None, }, ), ], namespace: None, node_ws: None, refs: [], }, ), ], namespace: None, node_ws: None, refs: [], }, ), Empty, ], namespace: None, node_ws: None, refs: [], }, ), Element( El { tag: Div, attrs: Attrs { vals: { Class: Some( "ml-3 mt-1", ), }, }, style: Style { vals: {}, }, event_handler_manager: EventHandlerManager { groups: {}, }, children: [ Element( El { tag: Div, attrs: Attrs { vals: {}, }, style: Style { vals: {}, }, event_handler_manager: EventHandlerManager { groups: {}, }, children: [ Element( El { tag: A, attrs: Attrs { vals: {}, }, style: Style { vals: {}, }, event_handler_manager: EventHandlerManager { groups: { Click: Group { event_handlers: RefCell { value: [ EventHandler('click'), ], }, listener: None, }, }, }, children: [ Element( El { tag: Span, attrs: Attrs { vals: { Class: Some( "mr-1", ), }, }, style: Style { vals: {}, }, event_handler_manager: EventHandlerManager { groups: {}, }, children: [ Element( El { tag: Svg, attrs: Attrs { vals: { Class: Some( "fill-current fill-current w-4 h-4 inline text-green-500", ), }, }, style: Style { vals: {}, }, event_handler_manager: EventHandlerManager { groups: {}, }, children: [ Element( El { tag: Use, attrs: Attrs { vals: { Class: Some( "pointer-events-none", ), Href: Some( "sprites/solid.svg#check", ), }, }, style: Style { vals: {}, }, event_handler_manager: EventHandlerManager { groups: {}, }, children: [], namespace: Some( Svg, ), node_ws: None, refs: [], }, ), ], namespace: Some( Svg, ), node_ws: None, refs: [], }, ), ], namespace: None, node_ws: None, refs: [], }, ), Element( El { tag: Span, attrs: Attrs { vals: { Class: Some( "cursor-pointer underline", ), }, }, style: Style { vals: {}, }, event_handler_manager: EventHandlerManager { groups: {}, }, children: [ Text( Text { text: "Install packages on server oss2.local.", node_ws: None, }, ), ], namespace: None, node_ws: None, refs: [], }, ), ], namespace: None, node_ws: None, refs: [], }, ), Empty, ], namespace: None, node_ws: None, refs: [], }, ), ], namespace: None, node_ws: None, refs: [], }, ), Element( El { tag: Div, attrs: Attrs { vals: { Class: Some( "ml-3 mt-1", ), }, }, style: Style { vals: {}, }, event_handler_manager: EventHandlerManager { groups: {}, }, children: [ Element( El { tag: Div, attrs: Attrs { vals: {}, }, style: Style { vals: {}, }, event_handler_manager: EventHandlerManager { groups: {}, }, children: [ Element( El { tag: A, attrs: Attrs { vals: {}, }, style: Style { vals: {}, }, event_handler_manager: EventHandlerManager { groups: { Click: Group { event_handlers: RefCell { value: [ EventHandler('click'), ], }, listener: None, }, }, }, children: [ Element( El { tag: Span, attrs: Attrs { vals: { Class: Some( "mr-1", ), }, }, style: Style { vals: {}, }, event_handler_manager: EventHandlerManager { groups: {}, }, children: [ Element( El { tag: Svg, attrs: Attrs { vals: { Class: Some( "fill-current fill-current w-4 h-4 inline text-green-500", ), }, }, style: Style { vals: {}, }, event_handler_manager: EventHandlerManager { groups: {}, }, children: [ Element( El { tag: Use, attrs: Attrs { vals: { Class: Some( "pointer-events-none", ), Href: Some( "sprites/solid.svg#check", ), }, }, style: Style { vals: {}, }, event_handler_manager: EventHandlerManager { groups: {}, }, children: [], namespace: Some( Svg, ), node_ws: None, refs: [], }, ), ], namespace: Some( Svg, ), node_ws: None, refs: [], }, ), ], namespace: None, node_ws: None, refs: [], }, ), Element( El { tag: Span, attrs: Attrs { vals: { Class: Some( "cursor-pointer underline", ), }, }, style: Style { vals: {}, }, event_handler_manager: EventHandlerManager { groups: {}, }, children: [ Text( Text { text: "Configure NTP on oss2.local.", node_ws: None, }, ), ], namespace: None, node_ws: None, refs: [], }, ), ], namespace: None, node_ws: None, refs: [], }, ), Empty, ], namespace: None, node_ws: None, refs: [], }, ), Empty, ], namespace: None, node_ws: None, refs: [], }, ), Element( El { tag: Div, attrs: Attrs { vals: { Class: Some( "ml-3 mt-1", ), }, }, style: Style { vals: {}, }, event_handler_manager: EventHandlerManager { groups: {}, }, children: [ Element( El { tag: Div, attrs: Attrs { vals: {}, }, style: Style { vals: {}, }, event_handler_manager: EventHandlerManager { groups: {}, }, children: [ Element( El { tag: A, attrs: Attrs { vals: {}, }, style: Style { vals: {}, }, event_handler_manager: EventHandlerManager { groups: { Click: Group { event_handlers: RefCell { value: [ EventHandler('click'), ], }, listener: None, }, }, }, children: [ Element( El { tag: Span, attrs: Attrs { vals: { Class: Some( "mr-1", ), }, }, style: Style { vals: {}, }, event_handler_manager: EventHandlerManager { groups: {}, }, children: [ Element( El { tag: Svg, attrs: Attrs { vals: { Class: Some( "fill-current fill-current w-4 h-4 inline text-green-500", ), }, }, style: Style { vals: {}, }, event_handler_manager: EventHandlerManager { groups: {}, }, children: [ Element( El { tag: Use, attrs: Attrs { vals: { Class: Some( "pointer-events-none", ), Href: Some( "sprites/solid.svg#check", ), }, }, style: Style { vals: {}, }, event_handler_manager: EventHandlerManager { groups: {}, }, children: [], namespace: Some( Svg, ), node_ws: None, refs: [], }, ), ], namespace: Some( Svg, ), node_ws: None, refs: [], }, ), ], namespace: None, node_ws: None, refs: [], }, ), Element( El { tag: Span, attrs: Attrs { vals: { Class: Some( "cursor-pointer underline", ), }, }, style: Style { vals: {}, }, event_handler_manager: EventHandlerManager { groups: {}, }, children: [ Text( Text { text: "Enable LNet on oss2.local.", node_ws: None, }, ), ], namespace: None, node_ws: None, refs: [], }, ), ], namespace: None, node_ws: None, refs: [], }, ), Empty, ], namespace: None, node_ws: None, refs: [], }, ), Empty, ], namespace: None, node_ws: None, refs: [], }, ), Element( El { tag: Div, attrs: Attrs { vals: { Class: Some( "ml-3 mt-1", ), }, }, style: Style { vals: {}, }, event_handler_manager: EventHandlerManager { groups: {}, }, children: [ Element( El { tag: Div, attrs: Attrs { vals: {}, }, style: Style { vals: {}, }, event_handler_manager: EventHandlerManager { groups: {}, }, children: [ Element( El { tag: A, attrs: Attrs { vals: {}, }, style: Style { vals: {}, }, event_handler_manager: EventHandlerManager { groups: { Click: Group { event_handlers: RefCell { value: [ EventHandler('click'), ], }, listener: None, }, }, }, children: [ Element( El { tag: Span, attrs: Attrs { vals: { Class: Some( "mr-1", ), }, }, style: Style { vals: {}, }, event_handler_manager: EventHandlerManager { groups: {}, }, children: [ Element( El { tag: Svg, attrs: Attrs { vals: { Class: Some( "fill-current fill-current w-4 h-4 inline text-green-500", ), }, }, style: Style { vals: {}, }, event_handler_manager: EventHandlerManager { groups: {}, }, children: [ Element( El { tag: Use, attrs: Attrs { vals: { Class: Some( "pointer-events-none", ), Href: Some( "sprites/solid.svg#check", ), }, }, style: Style { vals: {}, }, event_handler_manager: EventHandlerManager { groups: {}, }, children: [], namespace: Some( Svg, ), node_ws: None, refs: [], }, ), ], namespace: Some( Svg, ), node_ws: None, refs: [], }, ), ], namespace: None, node_ws: None, refs: [], }, ), Element( El { tag: Span, attrs: Attrs { vals: { Class: Some( "cursor-pointer underline", ), }, }, style: Style { vals: {}, }, event_handler_manager: EventHandlerManager { groups: {}, }, children: [ Text( Text { text: "Configure Corosync on oss2.local.", node_ws: None, }, ), ], namespace: None, node_ws: None, refs: [], }, ), ], namespace: None, node_ws: None, refs: [], }, ), Empty, ], namespace: None, node_ws: None, refs: [], }, ), Empty, ], namespace: None, node_ws: None, refs: [], }, ), Element( El { tag: Div, attrs: Attrs { vals: { Class: Some( "ml-3 mt-1", ), }, }, style: Style { vals: {}, }, event_handler_manager: EventHandlerManager { groups: {}, }, children: [ Element( El { tag: Div, attrs: Attrs { vals: {}, }, style: Style { vals: {}, }, event_handler_manager: EventHandlerManager { groups: {}, }, children: [ Element( El { tag: A, attrs: Attrs { vals: {}, }, style: Style { vals: {}, }, event_handler_manager: EventHandlerManager { groups: { Click: Group { event_handlers: RefCell { value: [ EventHandler('click'), ], }, listener: None, }, }, }, children: [ Element( El { tag: Span, attrs: Attrs { vals: { Class: Some( "mr-1", ), }, }, style: Style { vals: {}, }, event_handler_manager: EventHandlerManager { groups: {}, }, children: [ Element( El { tag: Svg, attrs: Attrs { vals: { Class: Some( "fill-current fill-current w-4 h-4 inline text-green-500", ), }, }, style: Style { vals: {}, }, event_handler_manager: EventHandlerManager { groups: {}, }, children: [ Element( El { tag: Use, attrs: Attrs { vals: { Class: Some( "pointer-events-none", ), Href: Some( "sprites/solid.svg#check", ), }, }, style: Style { vals: {}, }, event_handler_manager: EventHandlerManager { groups: {}, }, children: [], namespace: Some( Svg, ), node_ws: None, refs: [], }, ), ], namespace: Some( Svg, ), node_ws: None, refs: [], }, ), ], namespace: None, node_ws: None, refs: [], }, ), Element( El { tag: Span, attrs: Attrs { vals: { Class: Some( "cursor-pointer underline", ), }, }, style: Style { vals: {}, }, event_handler_manager: EventHandlerManager { groups: {}, }, children: [ Text( Text { text: "Start the LNet networking layer.", node_ws: None, }, ), ], namespace: None, node_ws: None, refs: [], }, ), ], namespace: None, node_ws: None, refs: [], }, ), Empty, ], namespace: None, node_ws: None, refs: [], }, ), Element( El { tag: Div, attrs: Attrs { vals: { Class: Some( "ml-3 mt-1", ), }, }, style: Style { vals: {}, }, event_handler_manager: EventHandlerManager { groups: {}, }, children: [ Element( El { tag: Div, attrs: Attrs { vals: {}, }, style: Style { vals: {}, }, event_handler_manager: EventHandlerManager { groups: {}, }, children: [ Element( El { tag: A, attrs: Attrs { vals: {}, }, style: Style { vals: {}, }, event_handler_manager: EventHandlerManager { groups: { Click: Group { event_handlers: RefCell { value: [ EventHandler('click'), ], }, listener: None, }, }, }, children: [ Element( El { tag: Span, attrs: Attrs { vals: { Class: Some( "mr-1", ), }, }, style: Style { vals: {}, }, event_handler_manager: EventHandlerManager { groups: {}, }, children: [ Element( El { tag: Svg, attrs: Attrs { vals: { Class: Some( "fill-current fill-current w-4 h-4 inline text-green-500", ), }, }, style: Style { vals: {}, }, event_handler_manager: EventHandlerManager { groups: {}, }, children: [ Element( El { tag: Use, attrs: Attrs { vals: { Class: Some( "pointer-events-none", ), Href: Some( "sprites/solid.svg#check", ), }, }, style: Style { vals: {}, }, event_handler_manager: EventHandlerManager { groups: {}, }, children: [], namespace: Some( Svg, ), node_ws: None, refs: [], }, ), ], namespace: Some( Svg, ), node_ws: None, refs: [], }, ), ], namespace: None, node_ws: None, refs: [], }, ), Element( El { tag: Span, attrs: Attrs { vals: { Class: Some( "cursor-pointer underline", ), }, }, style: Style { vals: {}, }, event_handler_manager: EventHandlerManager { groups: {}, }, children: [ Text( Text { text: "Load the LNet kernel modules.", node_ws: None, }, ), ], namespace: None, node_ws: None, refs: [], }, ), ], namespace: None, node_ws: None, refs: [], }, ), Empty, ], namespace: None, node_ws: None, refs: [], }, ), Empty, ], namespace: None, node_ws: None, refs: [], }, ), ], namespace: None, node_ws: None, refs: [], }, ), Element( El { tag: Div, attrs: Attrs { vals: { Class: Some( "ml-3 mt-1", ), }, }, style: Style { vals: {}, }, event_handler_manager: EventHandlerManager { groups: {}, }, children: [ Element( El { tag: Div, attrs: Attrs { vals: {}, }, style: Style { vals: {}, }, event_handler_manager: EventHandlerManager { groups: {}, }, children: [ Element( El { tag: A, attrs: Attrs { vals: {}, }, style: Style { vals: {}, }, event_handler_manager: EventHandlerManager { groups: { Click: Group { event_handlers: RefCell { value: [ EventHandler('click'), ], }, listener: None, }, }, }, children: [ Element( El { tag: Span, attrs: Attrs { vals: { Class: Some( "mr-1", ), }, }, style: Style { vals: {}, }, event_handler_manager: EventHandlerManager { groups: {}, }, children: [ Element( El { tag: Svg, attrs: Attrs { vals: { Class: Some( "fill-current fill-current w-4 h-4 inline text-green-500", ), }, }, style: Style { vals: {}, }, event_handler_manager: EventHandlerManager { groups: {}, }, children: [ Element( El { tag: Use, attrs: Attrs { vals: { Class: Some( "pointer-events-none", ), Href: Some( "sprites/solid.svg#check", ), }, }, style: Style { vals: {}, }, event_handler_manager: EventHandlerManager { groups: {}, }, children: [], namespace: Some( Svg, ), node_ws: None, refs: [], }, ), ], namespace: Some( Svg, ), node_ws: None, refs: [], }, ), ], namespace: None, node_ws: None, refs: [], }, ), Element( El { tag: Span, attrs: Attrs { vals: { Class: Some( "cursor-pointer underline", ), }, }, style: Style { vals: {}, }, event_handler_manager: EventHandlerManager { groups: {}, }, children: [ Text( Text { text: "Configure Pacemaker on oss2.local.", node_ws: None, }, ), ], namespace: None, node_ws: None, refs: [], }, ), ], namespace: None, node_ws: None, refs: [], }, ), Empty, ], namespace: None, node_ws: None, refs: [], }, ), Empty, Element( El { tag: Div, attrs: Attrs { vals: { Class: Some( "ml-3 mt-1", ), }, }, style: Style { vals: {}, }, event_handler_manager: EventHandlerManager { groups: {}, }, children: [ Element( El { tag: Div, attrs: Attrs { vals: {}, }, style: Style { vals: {}, }, event_handler_manager: EventHandlerManager { groups: {}, }, children: [ Element( El { tag: A, attrs: Attrs { vals: {}, }, style: Style { vals: {}, }, event_handler_manager: EventHandlerManager { groups: { Click: Group { event_handlers: RefCell { value: [ EventHandler('click'), ], }, listener: None, }, }, }, children: [ Element( El { tag: Span, attrs: Attrs { vals: { Class: Some( "mr-1", ), }, }, style: Style { vals: {}, }, event_handler_manager: EventHandlerManager { groups: {}, }, children: [ Element( El { tag: Svg, attrs: Attrs { vals: { Class: Some( "fill-current fill-current w-4 h-4 inline text-green-500", ), }, }, style: Style { vals: {}, }, event_handler_manager: EventHandlerManager { groups: {}, }, children: [ Element( El { tag: Use, attrs: Attrs { vals: { Class: Some( "pointer-events-none", ), Href: Some( "sprites/solid.svg#check", ), }, }, style: Style { vals: {}, }, event_handler_manager: EventHandlerManager { groups: {}, }, children: [], namespace: Some( Svg, ), node_ws: None, refs: [], }, ), ], namespace: Some( Svg, ), node_ws: None, refs: [], }, ), ], namespace: None, node_ws: None, refs: [], }, ), Element( El { tag: Span, attrs: Attrs { vals: { Class: Some( "cursor-pointer underline", ), }, }, style: Style { vals: {}, }, event_handler_manager: EventHandlerManager { groups: {}, }, children: [ Text( Text { text: "Start Corosync on oss2.local", node_ws: None, }, ), ], namespace: None, node_ws: None, refs: [], }, ), ], namespace: None, node_ws: None, refs: [], }, ), Empty, ], namespace: None, node_ws: None, refs: [], }, ), Empty, ], namespace: None, node_ws: None, refs: [], }, ), ], namespace: None, node_ws: None, refs: [], }, ), Element( El { tag: Div, attrs: Attrs { vals: { Class: Some( "ml-3 mt-1", ), }, }, style: Style { vals: {}, }, event_handler_manager: EventHandlerManager { groups: {}, }, children: [ Element( El { tag: Div, attrs: Attrs { vals: {}, }, style: Style { vals: {}, }, event_handler_manager: EventHandlerManager { groups: {}, }, children: [ Element( El { tag: A, attrs: Attrs { vals: {}, }, style: Style { vals: {}, }, event_handler_manager: EventHandlerManager { groups: { Click: Group { event_handlers: RefCell { value: [ EventHandler('click'), ], }, listener: None, }, }, }, children: [ Element( El { tag: Span, attrs: Attrs { vals: { Class: Some( "mr-1", ), }, }, style: Style { vals: {}, }, event_handler_manager: EventHandlerManager { groups: {}, }, children: [ Element( El { tag: Svg, attrs: Attrs { vals: { Class: Some( "fill-current fill-current w-4 h-4 inline text-green-500", ), }, }, style: Style { vals: {}, }, event_handler_manager: EventHandlerManager { groups: {}, }, children: [ Element( El { tag: Use, attrs: Attrs { vals: { Class: Some( "pointer-events-none", ), Href: Some( "sprites/solid.svg#check", ), }, }, style: Style { vals: {}, }, event_handler_manager: EventHandlerManager { groups: {}, }, children: [], namespace: Some( Svg, ), node_ws: None, refs: [], }, ), ], namespace: Some( Svg, ), node_ws: None, refs: [], }, ), ], namespace: None, node_ws: None, refs: [], }, ), Element( El { tag: Span, attrs: Attrs { vals: { Class: Some( "cursor-pointer underline", ), }, }, style: Style { vals: {}, }, event_handler_manager: EventHandlerManager { groups: {}, }, children: [ Text( Text { text: "Start Pacemaker on oss2.local.", node_ws: None, }, ), ], namespace: None, node_ws: None, refs: [], }, ), ], namespace: None, node_ws: None, refs: [], }, ), Empty, ], namespace: None, node_ws: None, refs: [], }, ), Empty, Empty, ], namespace: None, node_ws: None, refs: [], }, ), ], namespace: None, node_ws: None, refs: [], }, ), ], namespace: None, node_ws: None, refs: [], }, )"#;