haste_codegen/serde_gen/
deserialize.rs

1// #![allow(unused)]
2// use std::{cell::RefCell, rc::Rc};
3
4// use indexmap::IndexMap;
5// use proc_macro2::TokenStream;
6// use quote::quote;
7// use serde_json::Value;
8
9// use crate::{
10//     traversal,
11//     utilities::{extract, generate, load},
12// };
13
14// type NestedTypes = IndexMap<String, TokenStream>;
15
16// fn process_leaf(sd: &Value, element: &Value, types: Rc<RefCell<NestedTypes>>) {}
17
18// fn process_complex(
19//     sd: &Value,
20//     element: &Value,
21//     children: Vec<&Value>,
22//     serde_impls: Rc<RefCell<NestedTypes>>,
23// ) {
24//     let struct_name = generate::struct_name(sd, element);
25//     for child_elem in children {}
26
27//     quote! { impl Deserialization for #struct_name {
28//         fn serialize(&self) -> String {
29//             serde_json::to_string(self).unwrap()
30//         }
31//     }};
32// }
33
34// fn create_visitor<'a>(
35//     sd: &'a Value,
36//     nested_serdes: Rc<RefCell<NestedTypes>>,
37// ) -> impl FnMut(&'a Value, Vec<&'a Value>, usize) -> &'a Value {
38//     move |element: &'a Value, children: Vec<&'a Value>, _index: usize| -> &'a Value {
39//         if children.len() == 0 {
40//             element
41//         } else {
42//             process_complex(&sd, element, children, nested_serdes.clone());
43//             element
44//         }
45//     }
46// }
47
48// fn generate_deserialize_for_sd(sd: &Value) -> Result<TokenStream, String> {
49//     let nested_serdes = Rc::new(RefCell::new(IndexMap::<String, TokenStream>::new()));
50
51//     let mut visitor = create_visitor(sd, nested_serdes.clone());
52
53//     traversal::traversal(sd, &mut visitor)?;
54
55//     let binding = nested_serdes.borrow_mut();
56//     let types_generated = binding.values();
57
58//     let generated_code = quote! {
59//         #(#types_generated)*
60//     };
61
62//     Ok(generated_code)
63// }
64
65// pub fn generate_deserialize_for_sds(
66//     file_path: &str,
67//     level: Option<&'static str>,
68// ) -> Result<Vec<TokenStream>, String> {
69//     let json_data = load::load_from_file(file_path)?;
70//     let structure_definitions = load::get_structure_definitions(&json_data, level)?;
71
72//     let mut generated_code = vec![];
73
74//     for sd in structure_definitions {
75//         generated_code.push(generate_deserialize_for_sd(sd)?);
76//     }
77
78//     Ok(generated_code)
79// }
80
81// pub fn generate_fhir_types_from_files(
82//     file_paths: &Vec<String>,
83//     level: Option<&'static str>,
84// ) -> Result<String, String> {
85//     let mut serde_generated_code = quote! {
86//         #![allow(non_snake_case)]
87//         use serde::{Deserialize};
88//     };
89
90//     for file_path in file_paths {
91//         let serde_code_for_sds = generate_deserialize_for_sds(file_path, level)?;
92
93//         serde_generated_code = quote! {
94//             #serde_generated_code
95//             #(#serde_code_for_sds)*
96//         }
97//     }
98
99//     Ok(quote! {
100//         #serde_generated_code
101//     }
102//     .to_string())
103// }