  wapp_debug_assert(list != NULL && node != NULL && (node->item) != NULL, "`list`, `node` and `node->item` should not be NULL");

  if (index == 0) {{
    wapp_{Tlower}_list_push_front(list, node);
    return;
  }} else if (index == list->node_count) {{
    wapp_{Tlower}_list_push_back(list, node);
    return;
  }}

  {NodeType} *dst_node = wapp_{Tlower}_list_get(list, index);
  if (!dst_node) {{
    return;
  }}

  {ListType} node_list = {Tlower}_node_to_list(node);

  list->node_count += node_list.node_count;

  {NodeType} *prev = dst_node->prev;

  dst_node->prev = node_list.last;
  prev->next     = node_list.first;

  node_list.first->prev = prev;
  node_list.last->next  = dst_node;
