|
| struct | mcp::protocol::FieldDescriptor< Struct, Field > |
| | Describes a single DTO field: its JSON wire name, pointer-to-member, and optional post-deserialization validator. More...
|
| |
| struct | mcp::protocol::ExtensionsField< Struct > |
| | Tag-only field descriptor for the extensions member. More...
|
| |
| struct | mcp::protocol::DeserializeOnlyField< Struct, Field > |
| | Tag-only field descriptor for fields that are populated during deserialization only (e.g. More...
|
| |
| struct | mcp::protocol::is_optional< T > |
| | Detects std::optional<T>. More...
|
| |
| struct | mcp::protocol::is_optional< std::optional< T > > |
| |
| struct | mcp::protocol::is_nullable_variant< T > |
| | Detects std::variant containing std::monostate (nullable on wire). More...
|
| |
| struct | mcp::protocol::is_nullable_variant< std::variant< Ts... > > |
| |
| struct | mcp::protocol::has_extensions_member< T, typename > |
| | Detects whether a type has an extensions member of type Json. More...
|
| |
| struct | mcp::protocol::has_extensions_member< T, std::void_t< decltype(std::declval< T >().extensions)> > |
| |
| struct | mcp::protocol::detail::has_known_keys< T, typename > |
| |
| struct | mcp::protocol::detail::has_known_keys< T, std::void_t< decltype(T::known_keys())> > |
| |
| struct | mcp::protocol::Reflect< T > |
| | Primary template. More...
|
| |
| struct | mcp::protocol::has_reflect< T, typename > |
| | Detects whether Reflect<T> is specialized for a given type. More...
|
| |
| struct | mcp::protocol::has_reflect< T, std::void_t< decltype(Reflect< T >::defined)> > |
| |
| struct | mcp::protocol::JsonFieldTraits< T, Enable > |
| | Type-specific serialization and deserialization logic. More...
|
| |
| struct | mcp::protocol::JsonFieldTraits< T, std::enable_if_t< has_reflect_v< T > > > |
| | Generic support for nested DTOs that opt into Reflect<T>. More...
|
| |
| struct | mcp::protocol::JsonFieldTraits< std::string > |
| |
| struct | mcp::protocol::JsonFieldTraits< Json > |
| |
| struct | mcp::protocol::JsonFieldTraits< IconTheme > |
| |
| struct | mcp::protocol::JsonFieldTraits< std::optional< T > > |
| |
| struct | mcp::protocol::JsonFieldTraits< std::optional< Json > > |
| |
| struct | mcp::protocol::JsonFieldTraits< std::vector< T > > |
| |
| struct | mcp::protocol::JsonFieldTraits< std::vector< std::string > > |
| |
| struct | mcp::protocol::JsonFieldTraits< std::map< std::string, std::string > > |
| |
| struct | mcp::protocol::JsonFieldTraits< std::variant< std::monostate, std::int64_t > > |
| |
| struct | mcp::protocol::JsonFieldTraits< std::variant< std::int64_t, std::string > > |
| |
|
| #define | CXXMCP_REFL_IMPL_1(T, f1) |
| |
| #define | CXXMCP_REFL_IMPL_2(T, f1, f2) |
| |
| #define | CXXMCP_REFL_IMPL_3(T, f1, f2, f3) |
| |
| #define | CXXMCP_REFL_IMPL_4(T, f1, f2, f3, f4) |
| |
| #define | CXXMCP_REFL_IMPL_5(T, f1, f2, f3, f4, f5) |
| |
| #define | CXXMCP_REFL_IMPL_6(T, f1, f2, f3, f4, f5, f6) |
| |
| #define | CXXMCP_REFL_IMPL_7(T, f1, f2, f3, f4, f5, f6, f7) |
| |
| #define | CXXMCP_REFL_IMPL_8(T, f1, f2, f3, f4, f5, f6, f7, f8) |
| |
| #define | CXXMCP_REFL_IMPL_9(T, f1, f2, f3, f4, f5, f6, f7, f8, f9) |
| |
| #define | CXXMCP_REFL_IMPL_10(T, f1, f2, f3, f4, f5, f6, f7, f8, f9, f10) |
| |
| #define | CXXMCP_REFL_IMPL_11(T, f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11) |
| |
| #define | CXXMCP_REFL_IMPL_12(T, f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12) |
| |
| #define | CXXMCP_REFL_IMPL_13(T, f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13) |
| |
| #define | CXXMCP_REFL_IMPL_14(T, f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14) |
| |
| #define | CXXMCP_REFL_IMPL_15(T, f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15) |
| |
| #define | CXXMCP_REFL_IMPL_16(T, f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16) |
| |
|
#define | CXXMCP_REFLECT_CHOOSER(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, NAME, ...) NAME |
| |
|
#define | CXXMCP_REFLECT_EXPAND(expr) expr |
| |
| #define | CXXMCP_REFLECT(Type, ...) |
| | One-line Reflect<T> specialization.
|
| |
| #define | CXXMCP_REFLECT_CHECK(Struct, expected_count) |
| | Validates that a Reflect<> specialization covers the expected number of fields.
|
| |
|
|
template<typename Struct , typename Field > |
| constexpr FieldDescriptor< Struct, Field > | mcp::protocol::field (const char *wire_name, Field Struct::*pointer) |
| | Creates a FieldDescriptor with wire name and pointer-to-member.
|
| |
|
template<typename Struct , typename Field > |
| constexpr FieldDescriptor< Struct, Field > | mcp::protocol::validated_field (const char *wire_name, Field Struct::*pointer, core::Result< core::Unit >(*validator)(const Field &)) |
| | Creates a FieldDescriptor with a post-deserialization validator.
|
| |
|
template<typename Struct > |
| ExtensionsField< Struct > | mcp::protocol::extensions_field (Json Struct::*pointer, std::vector< std::string > own_keys) |
| | Creates an ExtensionsField descriptor.
|
| |
|
template<typename Struct , typename Field > |
| constexpr DeserializeOnlyField< Struct, Field > | mcp::protocol::deserialize_only (const char *wire_name, Field Struct::*pointer) |
| | Creates a DeserializeOnlyField descriptor.
|
| |
| template<typename Struct , typename Field > |
| constexpr FieldDescriptor< Struct, Field > | mcp::protocol::nullable_field (const char *wire_name, Field Struct::*pointer) |
| | Creates a FieldDescriptor whose missing wire value maps to std::monostate.
|
| |
|
template<typename Struct , typename Field > |
| constexpr FieldDescriptor< Struct, Field > | mcp::protocol::defaulted_field (const char *wire_name, Field Struct::*pointer) |
| | Creates a FieldDescriptor whose missing wire value keeps the C++ default value.
|
| |
| template<typename S , typename F > |
| void | mcp::protocol::detail::push_wire_name (std::vector< std::string > &keys, const FieldDescriptor< S, F > &fd) |
| | Overloads that extract wire_name from field descriptors.
|
| |
|
template<typename S , typename F > |
| void | mcp::protocol::detail::push_wire_name (std::vector< std::string > &keys, const DeserializeOnlyField< S, F > &fd) |
| |
|
template<typename S > |
| void | mcp::protocol::detail::push_wire_name (std::vector< std::string > &, const ExtensionsField< S > &) |
| |
| template<typename T > |
| std::vector< std::string > | mcp::protocol::extract_known_keys () |
| | Extracts known wire names from the fields() tuple at runtime.
|
| |
| template<typename T > |
| Json | mcp::protocol::reflect_to_json (const T &obj) |
| | Serializes a DTO to JSON using its Reflect<T> trait.
|
| |
| template<typename T > |
| core::Result< T > | mcp::protocol::reflect_from_json (const Json &json) |
| | Deserializes a DTO from JSON using its Reflect<T> trait.
|
| |
|
template<typename Struct , typename Field > |
| void | mcp::protocol::serialize_one (Json &json, const Struct &obj, const FieldDescriptor< Struct, Field > &fd) |
| | Serializes a single field into the JSON object.
|
| |
|
template<typename Struct , typename Field > |
| void | mcp::protocol::serialize_one (Json &, const Struct &, const DeserializeOnlyField< Struct, Field > &) |
| | No-op for deserialize-only fields during serialization.
|
| |
|
template<typename Struct > |
| void | mcp::protocol::serialize_one (Json &json, const Struct &obj, const ExtensionsField< Struct > &fd) |
| | Merges extension members into the parent JSON object.
|
| |
| template<typename Struct , typename Field > |
| bool | mcp::protocol::deserialize_one (const Json &json, Struct &obj, const FieldDescriptor< Struct, Field > &fd, core::Result< core::Unit > &status) |
| | Deserializes a single field from the JSON object.
|
| |
|
template<typename Struct > |
| bool | mcp::protocol::deserialize_one (const Json &, Struct &, const ExtensionsField< Struct > &, core::Result< core::Unit > &) |
| | No-op for extensions fields during deserialization.
|
| |
|
template<typename Struct , typename Field > |
| bool | mcp::protocol::deserialize_one (const Json &json, Struct &obj, const DeserializeOnlyField< Struct, Field > &fd, core::Result< core::Unit > &status) |
| | Deserializes a deserialize-only field.
|
| |
C++17 tuple-reflection infrastructure for zero-boilerplate DTO serialization.
Each DTO that opts into reflection provides a Reflect<T> specialization with fields() returning a tuple of FieldDescriptor. The generic reflect_to_json() and reflect_from_json<T>() functions then handle serialization automatically. known_keys() is optional; when absent, wire names are extracted from the fields() tuple at runtime.
Type-specific logic is dispatched through JsonFieldTraits<T> partial specializations for optional, vector, string, enum, variant, and nested-DTO types.