#pragma once #include "EDeviceCommandStatus.h" #include #include namespace Incart::Usb { struct DeviceCommandStatus { DeviceCommand::EStatus status; DeviceCommandStatus(DeviceCommand::EStatus status) : status(status) { } virtual ~DeviceCommandStatus() { } }; template struct DeviceCommandStatusInfo final : DeviceCommandStatus { TInfo info; DeviceCommandStatusInfo() : DeviceCommandStatus(DeviceCommand::EStatus::OK) { } DeviceCommandStatusInfo(DeviceCommand::EStatus status) : DeviceCommandStatus(status) { } DeviceCommandStatusInfo(DeviceCommand::EStatus status, TInfo info_) : DeviceCommandStatus(status) , info(info_) { } }; struct DeviceCommandStatusCreator { static std::shared_ptr create(const std::vector& answer_, int32_t status_) { std::shared_ptr status; if (status_ == DeviceCommand::EStatus::WRONG_FRAME_FORMAT) { status = std::make_shared>>(DeviceCommand::EStatus::WRONG_FRAME_FORMAT, answer_); } else { status = std::make_shared((DeviceCommand::EStatus)status_); } return status; } }; } // namespace Incart::Usb