add basic support for serializing objects to xml

This commit is contained in:
2022-12-16 02:48:07 +01:00
parent a3c337355d
commit 794051fa15
7 changed files with 492 additions and 1 deletions

View File

@@ -139,6 +139,31 @@ public:
put_field_value_or_null(field_value, getter_method, field_type, model_env);
}
}
else
if( work_mode == MORM_WORK_MODE_MODEL_FIELDS_VALUES_FIELDS )
{
(*out_stream) << '\n';
put_field_name_and_table_if_needed(field_name, field_type, model_env);
put_name_value_separator();
put_field_value_or_null(field_value, getter_method, field_type, model_env);
put_name_value_separator();
/*
* IMPROVEME currently only used in XML serializer so we put / directly here
* we need some virtual methods for it
*/
before_field_name(); // here should be a different method such as before_closing_field_name()
if( out_stream )
{
(*out_stream) << '/';
}
esc(field_name, *out_stream, FT::default_type, nullptr); /* do not use provided field_type here - it would use e.g. binary mode if it was set, similar don't use model_env */
after_field_name(); // here too, e.g. after_closing_field_name()
/*
*
*/
}
field_after();
}
@@ -209,6 +234,31 @@ public:
put_name_value_separator();
put_field_value_list(field_value, model_container_type, model_connector, model_env, foo);
}
else
if( work_mode == MORM_WORK_MODE_MODEL_FIELDS_VALUES_FIELDS )
{
(*out_stream) << '\n';
put_field_name_and_table_if_needed(field_name, field_type, model_env);
put_name_value_separator();
put_field_value_list(field_value, model_container_type, model_connector, model_env, foo);
put_name_value_separator();
/*
* IMPROVEME currently only used in XML serializer so we put / directly here
* we need some virtual methods for it
*/
before_field_name(); // here should be a different method such as before_closing_field_name()
if( out_stream )
{
(*out_stream) << '/';
}
esc(field_name, *out_stream, FT::default_type, nullptr); /* do not use provided field_type here - it would use e.g. binary mode if it was set, similar don't use model_env */
after_field_name(); // here too, e.g. after_closing_field_name()
/*
*
*/
}
field_after();
}
@@ -237,6 +287,32 @@ public:
put_name_value_separator();
generate_from_model(field_model);
}
else
if( work_mode == MORM_WORK_MODE_MODEL_FIELDS_VALUES_FIELDS )
{
(*out_stream) << '\n';
put_field_name_and_table_if_needed(field_name, field_type, model_env);
put_name_value_separator();
generate_from_model(field_model);
put_name_value_separator();
/*
* IMPROVEME currently only used in XML serializer so we put / directly here
* we need some virtual methods for it
*/
before_field_name(); // here should be a different method such as before_closing_field_name()
if( out_stream )
{
(*out_stream) << '/';
}
esc(field_name, *out_stream, FT::default_type, nullptr); /* do not use provided field_type here - it would use e.g. binary mode if it was set, similar don't use model_env */
after_field_name(); // here too, e.g. after_closing_field_name()
(*out_stream) << '\n';
/*
*
*/
}
field_after();
}