/******************************************************************************** * Copyright (C) 2014-2023 GSI Helmholtzzentrum fuer Schwerionenforschung GmbH * * * * This software is distributed under the terms of the * * GNU Lesser General Public Licence (LGPL) version 3, * * copied verbatim in the file "LICENSE" * ********************************************************************************/ #ifndef FAIR_MQ_TRANSPORTS_H #define FAIR_MQ_TRANSPORTS_H #include #include #include #include #include #include #include namespace fair::mq { struct TransportError : std::runtime_error { using std::runtime_error::runtime_error; }; static const std::unordered_map TransportTypes{ {"default", Transport::DEFAULT}, {"zeromq", Transport::ZMQ}, {"shmem", Transport::SHM} }; static const std::unordered_map TransportNames{ {Transport::DEFAULT, "default"}, {Transport::ZMQ, "zeromq"}, {Transport::SHM, "shmem"} }; inline std::string TransportName(Transport transport) { return TransportNames.at(transport); } inline Transport TransportType(const std::string& transport) try { return TransportTypes.at(transport); } catch (std::out_of_range&) { throw TransportError(tools::ToString("Unknown transport provided: ", transport)); } inline std::ostream& operator<<(std::ostream& os, const Transport& transport) { return os << TransportName(transport); } inline auto GetEnabledTransports() -> std::vector { return {Transport::ZMQ, Transport::SHM}; } } // namespace fair::mq #endif /* FAIR_MQ_TRANSPORTS_H */