From 031ec5a012d43854a581263d84a8d90bb26896c2 Mon Sep 17 00:00:00 2001 From: "Claudius \"keldu\" Holeksa" Date: Wed, 29 Nov 2023 11:24:19 +0100 Subject: tools: Thinking about generating json schema info for jinja2 use --- c++/tools/c_gen_iface.hpp | 76 +++++++++++++++++++++++++++-------------------- 1 file changed, 43 insertions(+), 33 deletions(-) (limited to 'c++/tools/c_gen_iface.hpp') diff --git a/c++/tools/c_gen_iface.hpp b/c++/tools/c_gen_iface.hpp index 68c8779..42f694f 100644 --- a/c++/tools/c_gen_iface.hpp +++ b/c++/tools/c_gen_iface.hpp @@ -23,18 +23,11 @@ struct c_types { bool is_primitive; }; - struct c_param { - std::string key; - std::string name; - bool is_primitive; - }; - struct c_struct { - std::string def; + std::string kind; + std::string type; std::string cpp_schema; - std::vector member_keys; - std::string translate_to_c_source; - std::string translate_to_cpp_source; + std::vector members; }; struct c_response { @@ -43,12 +36,10 @@ struct c_types { }; struct c_func { - std::string def; std::string cpp_schema; - c_response response; - std::vector requests; - std::string source; std::string cpp_name; + c_response response; + std::vector requests; }; using c_struct_map = std::map; @@ -59,10 +50,37 @@ struct c_types { c_struct_map struct_map; c_func_map func_map; std::string prefix; + std::string postfix; std::string encoding; }; }; +namespace schema { +using namespace saw::schema; + +using StructBindingSchema = Struct< + Member, + Member, + Member, + Member, "members"> +>; + +using FunctionBindingSchema = Struct< + Member, + Member, + Member +>; + +using BindingSchema = Struct< + Member, + Member, + Member, + Member, + Member, "structs">, + Member, "functions"> +>; +} + /** * Helper to determine if we are dealing with primitive types */ @@ -154,8 +172,7 @@ struct c_data_translater> { using StructMap = typename c_types::c_struct_map; static error_or generate(c_types::state& c_state, std::string& type_str){ - type_str = c_state.prefix + "_"; - type_str += "array_"; + type_str = "array_"; std::string inner_type_str; auto eov = impl::c_data_translater::generate(c_state, inner_type_str); @@ -185,30 +202,23 @@ struct c_data_translater> { return make_error(); } - str.translate_to_c_source = "int translate_"; - str.translate_to_c_source += type_str; - str.translate_to_c_source += "(const saw::data<"; - str.translate_to_c_source += str.cpp_schema; - str.translate_to_c_source += ","; - str.translate_to_c_source += c_state.encoding; - str.translate_to_c_source += ">& cpp_data, struct "; - str.translate_to_c_source += type_str; - str.translate_to_c_source += "* c_data"; - - - str.translate_to_c_source += "int translate_"; - str.translate_to_c_source += inner_type_str; - str.translate_to_c_source += "(; - - + /** + * Adding heap alloc data ptr + */ { c_types::c_member memb; memb.key = inner_type_str; memb.name = "data"; memb.is_primitive = c_is_primitive::value; // fn.members.emplace_back(std::move(memb)); + str.members.emplace_back(std::move(memb)); } + { + c_types::c_member memb; + memb.key + } + str.def = "struct "; str.def += type_str; @@ -314,7 +324,7 @@ struct c_iface_translater