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// }