/list_to_tree

Transform a list to json tree for fontend

Primary LanguageRust

Nodes can be fetch from database, node should at least have id, parent_id field to construct parent/child relationships.

id | parent_id | name   
0  |           | Phone   
1  | 0         | iPhone 
2  | 0         | XiaoMi
mod tests {
    use super::*;
    use list_to_tree::convert_to_tree;

    #[test]
    fn test_name() {
        let root_menus = vec![Node::new(0, 1, 101), Node::new(0, 2, 102)];
        let sub_menus = vec![
            Node::new(1, 3, 201),
            Node::new(1, 4, 202),
            Node::new(2, 5, 203),
            Node::new(3, 6, 204),
            Node::new(6, 7, 205),
        ];
        let result = convert_to_tree(&root_menus, &sub_menus);
        // println!("{}", serde_json::to_string(&result).unwrap());
        // let s = r#"[{"id":1,"content":101,"parent_id":0,"children":[{"id":3,"content":201,"parent_id":1,"children":[{"id":6,"content":204,"parent_id":3,"children":[{"id":7,"content":205,"parent_id":6,"children":[]}]}]},{"id":4,"content":202,"parent_id":1,"children":[]}]},{"id":2,"content":102,"parent_id":0,"children":[{"id":5,"content":203,"parent_id":2,"children":[]}]}]"#;
        let s = r#"[{"parent_id":0,"id":1,"content":101,"children":[{"parent_id":1,"id":3,"content":201,"children":[{"parent_id":3,"id":6,"content":204,"children":[{"parent_id":6,"id":7,"content":205,"children":[]}]}]},{"parent_id":1,"id":4,"content":202,"children":[]}]},{"parent_id":0,"id":2,"content":102,"children":[{"parent_id":2,"id":5,"content":203,"children":[]}]}]"#;
        assert_eq!(s, serde_json::to_string(&result).unwrap());
    }
}