Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[struct_json] support user-defined serialize/deserialize #619

Merged
merged 2 commits into from
Mar 5, 2024

Conversation

poor-circle
Copy link
Collaborator

@poor-circle poor-circle commented Mar 4, 2024

Why

Fix #616

What is changing

allow serialize user-defined type.

Example

namespace my_space {
struct my_struct {
  int x, y, z;
  bool operator==(const my_struct& o) const {
    return x == o.x && y == o.y && z == o.z;
  }
};

template <bool Is_writing_escape, typename Stream>
inline void to_json_impl(Stream& s, const my_struct& t) {
  struct_json::to_json<Is_writing_escape>(*(int(*)[3]) & t, s);
}

template <typename It>
IGUANA_INLINE void from_json_impl(my_struct& value, It&& it, It&& end) {
  struct_json::from_json(*(int(*)[3]) & value, it, end);
}

}  // namespace my_space

Copy link

github-actions bot commented Mar 4, 2024

Code Coverage Report
for detail, goto summary download Artifacts

Filename                                       Functions  Missed Functions  Executed       Lines      Missed Lines     Cover    Branches   Missed Branches     Cover
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
coro_io/channel.hpp                                   14                 0   100.00%         105                 3    97.14%          30                 2    93.33%
coro_io/client_pool.hpp                               29                 1    96.55%         358                52    85.47%         140                39    72.14%
coro_io/coro_file.hpp                                 22                 2    90.91%         213                46    78.40%          56                21    62.50%
coro_io/coro_io.hpp                                   37                 1    97.30%         212                 9    95.75%           4                 0   100.00%
coro_io/detail/client_queue.hpp                       10                 1    90.00%          47                 1    97.87%          10                 0   100.00%
coro_io/io_context_pool.hpp                           34                 3    91.18%         206                19    90.78%          26                 6    76.92%
coro_io/rate_limiter.hpp                              13                 1    92.31%          85                 9    89.41%           8                 3    62.50%
coro_rpc/impl/common_service.hpp                       1                 0   100.00%           8                 0   100.00%           4                 0   100.00%
coro_rpc/impl/coro_connection.hpp                     25                 7    72.00%         267               149    44.19%          80                56    30.00%
coro_rpc/impl/coro_rpc_client.hpp                     20                 5    75.00%         166                18    89.16%          44                12    72.73%
coro_rpc/impl/coro_rpc_server.hpp                     12                 0   100.00%         174                16    90.80%          62                27    56.45%
coro_rpc/impl/errno.h                                 10                 3    70.00%          43                31    27.91%          26                13    50.00%
coro_rpc/impl/protocol/coro_rpc_protocol.hpp           6                 1    83.33%          83                26    68.67%          24                 9    62.50%
coro_rpc/impl/router.hpp                               5                 0   100.00%          93                17    81.72%          30                13    56.67%
easylog.hpp                                            8                 0   100.00%          41                 3    92.68%          12                 4    66.67%
easylog/appender.hpp                                  22                 0   100.00%         266                18    93.23%          88                26    70.45%
easylog/record.hpp                                    17                 0   100.00%         111                 4    96.40%          16                 2    87.50%
struct_pack.hpp                                        3                 2    33.33%          29                 7    75.86%           0                 0         -
struct_pack/calculate_size.hpp                         7                 0   100.00%         215                17    92.09%           6                 5    16.67%
struct_pack/derived_helper.hpp                         2                 2     0.00%           6                 6     0.00%           0                 0         -
struct_pack/endian_wrapper.hpp                         6                 3    50.00%          86                28    67.44%           2                 1    50.00%
struct_pack/error_code.hpp                             6                 6     0.00%          30                30     0.00%           0                 0         -
struct_pack/foreach_macro.h                            1                 1     0.00%           1                 1     0.00%           0                 0         -
struct_pack/md5_constexpr.hpp                          7                 7     0.00%          31                31     0.00%           0                 0         -
struct_pack/packer.hpp                                 9                 2    77.78%         385                27    92.99%          18                13    27.78%
struct_pack/reflection.hpp                             9                 6    33.33%         628                81    87.10%           0                 0         -
struct_pack/size_info.hpp                              2                 0   100.00%          10                 0   100.00%           0                 0         -
struct_pack/tuple.hpp                                  1                 1     0.00%           1                 1     0.00%           0                 0         -
struct_pack/type_calculate.hpp                        21                21     0.00%         479               479     0.00%           0                 0         -
struct_pack/type_id.hpp                                2                 2     0.00%         198               198     0.00%           0                 0         -
struct_pack/util.h                                     5                 3    40.00%          43                14    67.44%           4                 0   100.00%
struct_pack/varint.hpp                                 1                 1     0.00%           3                 3     0.00%           0                 0         -
util/concurrentqueue.h                                79                19    75.95%        1249               572    54.20%         292               157    46.23%
util/dragonbox.h                                      90                50    44.44%         735               388    47.21%          38                34    10.53%
util/dragonbox_to_chars.h                              6                 2    66.67%         440               381    13.41%          54                46    14.81%
util/expected.hpp                                     17                 3    82.35%          21                 3    85.71%           2                 0   100.00%
util/function_name.h                                   1                 1     0.00%           7                 7     0.00%           0                 0         -
util/meta_string.hpp                                  10                 3    70.00%          46                23    50.00%           8                 0   100.00%
util/time_util.h                                      13                13     0.00%         156               156     0.00%           0                 0         -

Files which contain no functions:
struct_pack/marco.h                                    0                 0         -           0                 0         -           0                 0         -
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
TOTAL                                                583               173    70.33%        7277              2874    60.51%        1084               489    54.89%

Copy link

github-actions bot commented Mar 5, 2024

Code Coverage Report
for detail, goto summary download Artifacts

Filename                                       Functions  Missed Functions  Executed       Lines      Missed Lines     Cover    Branches   Missed Branches     Cover
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
coro_io/channel.hpp                                   14                 0   100.00%         105                 3    97.14%          30                 2    93.33%
coro_io/client_pool.hpp                               29                 1    96.55%         358                61    82.96%         140                46    67.14%
coro_io/coro_file.hpp                                 22                 2    90.91%         213                46    78.40%          56                21    62.50%
coro_io/coro_io.hpp                                   37                 1    97.30%         212                 9    95.75%           4                 0   100.00%
coro_io/detail/client_queue.hpp                       10                 1    90.00%          47                 1    97.87%          10                 1    90.00%
coro_io/io_context_pool.hpp                           34                 3    91.18%         206                19    90.78%          26                 6    76.92%
coro_io/rate_limiter.hpp                              13                 1    92.31%          85                 9    89.41%           8                 3    62.50%
coro_rpc/impl/common_service.hpp                       1                 0   100.00%           8                 0   100.00%           4                 0   100.00%
coro_rpc/impl/coro_connection.hpp                     25                 7    72.00%         267               149    44.19%          80                56    30.00%
coro_rpc/impl/coro_rpc_client.hpp                     20                 5    75.00%         166                18    89.16%          44                12    72.73%
coro_rpc/impl/coro_rpc_server.hpp                     12                 0   100.00%         174                16    90.80%          62                27    56.45%
coro_rpc/impl/errno.h                                 10                 3    70.00%          43                31    27.91%          26                13    50.00%
coro_rpc/impl/protocol/coro_rpc_protocol.hpp           6                 1    83.33%          83                26    68.67%          24                 9    62.50%
coro_rpc/impl/router.hpp                               5                 0   100.00%          93                17    81.72%          30                13    56.67%
easylog.hpp                                            8                 0   100.00%          41                 3    92.68%          12                 4    66.67%
easylog/appender.hpp                                  22                 0   100.00%         266                18    93.23%          88                26    70.45%
easylog/record.hpp                                    17                 0   100.00%         111                 4    96.40%          16                 2    87.50%
struct_pack.hpp                                        3                 2    33.33%          29                 7    75.86%           0                 0         -
struct_pack/calculate_size.hpp                         7                 0   100.00%         215                17    92.09%           6                 5    16.67%
struct_pack/derived_helper.hpp                         2                 2     0.00%           6                 6     0.00%           0                 0         -
struct_pack/endian_wrapper.hpp                         6                 3    50.00%          86                28    67.44%           2                 1    50.00%
struct_pack/error_code.hpp                             6                 6     0.00%          30                30     0.00%           0                 0         -
struct_pack/foreach_macro.h                            1                 1     0.00%           1                 1     0.00%           0                 0         -
struct_pack/md5_constexpr.hpp                          7                 7     0.00%          31                31     0.00%           0                 0         -
struct_pack/packer.hpp                                 9                 2    77.78%         385                27    92.99%          18                13    27.78%
struct_pack/reflection.hpp                             9                 6    33.33%         628                81    87.10%           0                 0         -
struct_pack/size_info.hpp                              2                 0   100.00%          10                 0   100.00%           0                 0         -
struct_pack/tuple.hpp                                  1                 1     0.00%           1                 1     0.00%           0                 0         -
struct_pack/type_calculate.hpp                        21                21     0.00%         479               479     0.00%           0                 0         -
struct_pack/type_id.hpp                                2                 2     0.00%         198               198     0.00%           0                 0         -
struct_pack/util.h                                     5                 3    40.00%          43                14    67.44%           4                 0   100.00%
struct_pack/varint.hpp                                 1                 1     0.00%           3                 3     0.00%           0                 0         -
util/concurrentqueue.h                                79                19    75.95%        1249               566    54.68%         292               157    46.23%
util/dragonbox.h                                      90                50    44.44%         735               388    47.21%          38                34    10.53%
util/dragonbox_to_chars.h                              6                 2    66.67%         440               381    13.41%          54                46    14.81%
util/expected.hpp                                     17                 3    82.35%          21                 3    85.71%           2                 0   100.00%
util/function_name.h                                   1                 1     0.00%           7                 7     0.00%           0                 0         -
util/meta_string.hpp                                  10                 3    70.00%          46                23    50.00%           8                 0   100.00%
util/time_util.h                                      13                13     0.00%         156               156     0.00%           0                 0         -

Files which contain no functions:
struct_pack/marco.h                                    0                 0         -           0                 0         -           0                 0         -
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
TOTAL                                                583               173    70.33%        7277              2877    60.46%        1084               497    54.15%

Copy link

github-actions bot commented Mar 5, 2024

Code Coverage Report
for detail, goto summary download Artifacts

Filename                                       Functions  Missed Functions  Executed       Lines      Missed Lines     Cover    Branches   Missed Branches     Cover
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
coro_io/channel.hpp                                   14                 0   100.00%         105                 3    97.14%          30                 2    93.33%
coro_io/client_pool.hpp                               29                 1    96.55%         358                77    78.49%         140                53    62.14%
coro_io/coro_file.hpp                                 22                 2    90.91%         213                46    78.40%          56                21    62.50%
coro_io/coro_io.hpp                                   37                 1    97.30%         212                 9    95.75%           4                 0   100.00%
coro_io/detail/client_queue.hpp                       10                 1    90.00%          47                 1    97.87%          10                 0   100.00%
coro_io/io_context_pool.hpp                           34                 3    91.18%         206                19    90.78%          26                 6    76.92%
coro_io/rate_limiter.hpp                              13                 1    92.31%          85                 9    89.41%           8                 3    62.50%
coro_rpc/impl/common_service.hpp                       1                 0   100.00%           8                 0   100.00%           4                 0   100.00%
coro_rpc/impl/coro_connection.hpp                     25                 7    72.00%         267               149    44.19%          80                56    30.00%
coro_rpc/impl/coro_rpc_client.hpp                     20                 5    75.00%         166                18    89.16%          44                12    72.73%
coro_rpc/impl/coro_rpc_server.hpp                     12                 0   100.00%         174                16    90.80%          62                27    56.45%
coro_rpc/impl/errno.h                                 10                 3    70.00%          43                31    27.91%          26                13    50.00%
coro_rpc/impl/protocol/coro_rpc_protocol.hpp           6                 1    83.33%          83                26    68.67%          24                 9    62.50%
coro_rpc/impl/router.hpp                               5                 0   100.00%          93                17    81.72%          30                13    56.67%
easylog.hpp                                            8                 0   100.00%          41                 3    92.68%          12                 4    66.67%
easylog/appender.hpp                                  22                 0   100.00%         266                18    93.23%          88                26    70.45%
easylog/record.hpp                                    17                 0   100.00%         111                 4    96.40%          16                 2    87.50%
struct_pack.hpp                                        3                 2    33.33%          29                 7    75.86%           0                 0         -
struct_pack/calculate_size.hpp                         7                 0   100.00%         215                17    92.09%           6                 5    16.67%
struct_pack/derived_helper.hpp                         2                 2     0.00%           6                 6     0.00%           0                 0         -
struct_pack/endian_wrapper.hpp                         6                 3    50.00%          86                28    67.44%           2                 1    50.00%
struct_pack/error_code.hpp                             6                 6     0.00%          30                30     0.00%           0                 0         -
struct_pack/foreach_macro.h                            1                 1     0.00%           1                 1     0.00%           0                 0         -
struct_pack/md5_constexpr.hpp                          7                 7     0.00%          31                31     0.00%           0                 0         -
struct_pack/packer.hpp                                 9                 2    77.78%         385                27    92.99%          18                13    27.78%
struct_pack/reflection.hpp                             9                 6    33.33%         628                81    87.10%           0                 0         -
struct_pack/size_info.hpp                              2                 0   100.00%          10                 0   100.00%           0                 0         -
struct_pack/tuple.hpp                                  1                 1     0.00%           1                 1     0.00%           0                 0         -
struct_pack/type_calculate.hpp                        21                21     0.00%         479               479     0.00%           0                 0         -
struct_pack/type_id.hpp                                2                 2     0.00%         198               198     0.00%           0                 0         -
struct_pack/util.h                                     5                 3    40.00%          43                14    67.44%           4                 0   100.00%
struct_pack/varint.hpp                                 1                 1     0.00%           3                 3     0.00%           0                 0         -
util/concurrentqueue.h                                79                19    75.95%        1249               572    54.20%         292               160    45.21%
util/dragonbox.h                                      90                50    44.44%         735               388    47.21%          38                34    10.53%
util/dragonbox_to_chars.h                              6                 2    66.67%         440               381    13.41%          54                46    14.81%
util/expected.hpp                                     17                 3    82.35%          21                 3    85.71%           2                 0   100.00%
util/function_name.h                                   1                 1     0.00%           7                 7     0.00%           0                 0         -
util/meta_string.hpp                                  10                 3    70.00%          46                23    50.00%           8                 0   100.00%
util/time_util.h                                      13                13     0.00%         156               156     0.00%           0                 0         -

Files which contain no functions:
struct_pack/marco.h                                    0                 0         -           0                 0         -           0                 0         -
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
TOTAL                                                583               173    70.33%        7277              2899    60.16%        1084               506    53.32%

@poor-circle poor-circle merged commit 244c92a into alibaba:main Mar 5, 2024
33 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

[feature][struct_json] support user-defined type
1 participant