#pragma once namespace sp { namespace details { template struct MessageInterfaceParsedOptions {}; template <> struct MessageInterfaceParsedOptions<> { static const bool HasMsgIdType = false; static const bool HasLittleEndian = false; static const bool HasReadOperations = false; static const bool HasWriteOperations = false; static const bool HasWriteId = false; static const bool HasHandler = false; static const bool HasValid = false; static const bool HasToString = false; }; template struct MessageInterfaceParsedOptions, TOptions...> : public MessageInterfaceParsedOptions { static const bool HasMsgIdType = true; using MsgIdType = T; }; template struct MessageInterfaceParsedOptions : public MessageInterfaceParsedOptions { static const bool HasLittleEndian = true; }; template struct MessageInterfaceParsedOptions : public MessageInterfaceParsedOptions { static const bool HasReadOperations = true; }; template struct MessageInterfaceParsedOptions : public MessageInterfaceParsedOptions { static const bool HasWriteOperations = true; }; template struct MessageInterfaceParsedOptions : public MessageInterfaceParsedOptions { static const bool HasWriteId = true; }; template struct MessageInterfaceParsedOptions, TOptions...> : public MessageInterfaceParsedOptions { static const bool HasHandler = true; using HandlerType = option::Handler; }; template struct MessageInterfaceParsedOptions : public MessageInterfaceParsedOptions { static const bool HasValid = true; }; template struct MessageInterfaceParsedOptions : public MessageInterfaceParsedOptions { static const bool HasToString = true; }; } // namespace details } // namespace sp