private static void ToString_impl()

in src/Trinity.TSL/Trinity.TSL.CodeTemplates/Serializer.cs [97:206]


        private static void ToString_impl(t_data_type value, StringBuilder str_builder, bool in_json)
        {
            //For top-level element, just return the literal representation.
            //For non-top-level element, it would be an element in a json structure. (object, or array)
            //Thus we have to escape strings, surround fields with quotes (") if necessary.

            IF("$t_data_type->is_string()");
            if (in_json)
            {
                str_builder.Append(JsonStringProcessor.escape(value));
            }
            else
            {
                str_builder.Append(value);
            }
            ELIF("$t_data_type->is_struct()");
            {
                IF("$t_data_type->is_optional()");
                if (value == null)
                    return;
                END();
                str_builder.Append('{');
                bool first_field = true;
                FOREACH();
                {
                    IF("$t_field_type->is_nullable() || !$t_field_type->is_value_type()");
                    IF("$t_data_type->is_optional()");
                    if (value.Value.t_field_name != null)
                        ELSE();
                    if (value.t_field_name != null)
                    /*END*/
                    {
                        END();
                        if(first_field)
                            first_field = false;
                        else
                            str_builder.Append(',');

                        str_builder.Append("\"t_field_name\":");


                        IF("$t_data_type->is_optional()");
                        ToString_impl(value.Value.t_field_name, str_builder, in_json: true);
                        ELSE();
                        ToString_impl(value.t_field_name, str_builder, in_json: true);
                        END();

                        IF("$t_field_type->is_nullable() || !$t_field_type->is_value_type()");
                    }
                    END();
                }
                END();
                str_builder.Append('}');
            }
            ELIF("$t_data_type->is_value_type()");
            {
                IF("$t_data_type->is_enum() || $t_data_type->is_datetime() || $t_data_type->is_guid()");
                if(in_json)
                    str_builder.Append('"');
                END();

                IF("$t_data_type->is_bool()");
                {
                    str_builder.Append(value.ToString().ToLowerInvariant());
                }
                ELIF("$t_data_type->is_datetime()");
                {
                    IF("$t_data_type->is_nullable()");
                    {
                        str_builder.Append(value.Value.ToString("o", CultureInfo.InvariantCulture));
                    }
                    ELSE();
                    {
                        str_builder.Append(value.ToString("o", CultureInfo.InvariantCulture));
                    }
                    END();
                }
                ELSE();
                {
                    str_builder.Append(value);
                }
                END();

                IF("$t_data_type->is_enum() || $t_data_type->is_datetime() || $t_data_type->is_guid()");
                if(in_json)
                    str_builder.Append('"');
                END();
            }
            ELIF("$t_data_type->is_array() || $t_data_type->is_list()");
            {
                str_builder.Append('[');
                bool first = true;
                foreach (var element in value)
                {
                    if (first)
                    {
                        first = false;
                    }
                    else
                    {
                        str_builder.Append(',');
                    }
                    ToString_impl(element, str_builder, in_json:true);
                }
                str_builder.Append(']');
            }
            ELSE();
            throw new Exception("Internal error T5007");
            END();
        }