8#include <libremidi/api.hpp>
9#include <libremidi/libremidi.hpp>
10#include <libremidi/port_comparison.hpp>
12#include <magic_enum/magic_enum.hpp>
19namespace Protocols::MIDIPorts
31template <
typename Port>
33resolvePort(Port wanted, libremidi::API api,
const std::vector<Port>& live)
38 const std::span<const Port> ports{live.data(), live.size()};
44 wanted.port =
static_cast<libremidi::port_handle
>(-1);
47 if(
auto found = libremidi::optimistic_serialized_port_lookup(wanted, ports);
49 return *found.front();
51 wanted.port =
static_cast<libremidi::port_handle
>(-1);
52 if(
auto found = libremidi::optimistic_serialized_port_lookup(wanted, ports);
54 return *found.front();
59inline std::string describePort(
const libremidi::port_information& p)
61 if(!p.display_name.empty())
62 return p.display_name;
63 if(!p.port_name.empty())
70inline std::string apiName(libremidi::API api)
72 auto name = libremidi::get_api_display_name(api);
74 name = magic_enum::enum_name(api);
75 return std::string{name};