Skip to content

HostId enum Refactor - #1274

Open
cbrownsey wants to merge 7 commits into
RustAudio:developfrom
cbrownsey:develop
Open

HostId enum Refactor#1274
cbrownsey wants to merge 7 commits into
RustAudio:developfrom
cbrownsey:develop

Conversation

@cbrownsey

@cbrownsey cbrownsey commented Jul 15, 2026

Copy link
Copy Markdown

Original Issue: #1260

This implements the change to having HostId include a variant for all possible hosts under any compilation configuration.

This also adds an implementation of TryFrom<HostId> for Host, which seemed the best way to have that. This also keeps available_hosts, host_from_id, and ALL_HOSTS, although they no longer seem relevant to keep anymore.

+ Added `host_id` sub-module, which contains the `HostId` non-exhaustive
  enum, and all associated implementations and definitions.
+ Added internal implementations in `platform::impl_platform_host`.
+ Added implementation of `TryFrom<HostId> for Host`.

* Fixed links broken by moving `host_from_id` and `available_hosts`.
* Added additional error kind to `host_from_id`.

- Removed all definitions and impls of `HostId` from `platform`.
- Removed `__cpal_select_host_name` internal macro.
- Removed `default_host` from all `platform_impl` modules.
* Fixed hanging indentation on doc comment.

- Removed import of `HostTrait` in `platform_impl` of `wasm-bindgen`
  target.
@cbrownsey

Copy link
Copy Markdown
Author

Ack! Rookie mistake. All green now, but I'm not sure if I'm entirely keen on pushing as-is. I think the HostId enum should be pulled out of the platform module and be re-exported at the crate root. Additionally, I'm thinking that the available_hosts, host_from_id and ALL_HOSTS items should be canned. But this is what I outlined in the initial issue, so that's what I'm committing right now.

@1rhino2 1rhino2 left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

static pass on the HostId refactor (no runtime concerns here).

direction looks right for #1260: a single non_exhaustive HostId with every variant, plus is_supported / is_available / available_hosts(), and TryFrom for Host. that is cleaner than cfg-gated enums for cross-platform user code.

a few things to nail before merge

  • AvailableHostsIter::next currently returns hosts where is_supported() is true, but the docs on available_hosts / HostId::available_hosts talk about availability. supported != available (daemon down, etc). looks like the iterator should call is_available(), or the naming/docs need to match whichever filter you want.
  • Display writes ascii-lowercase ("wasapi") while FromStr examples/docs show mixed case like "WASAPI" / "ALSA". case-insensitive parse is fine; worth one golden test that Display round-trips through FromStr.
  • body notes available_hosts / host_from_id / ALL_HOSTS may be obsolete. if they stay, mark deprecated in the same PR so the migration path is obvious; if they go, UPGRADING.md needs a short note.
  • needs a rebase check against current master (this sat a bit).

i can help poke windows HostId::Wasapi / Asio availability after rebase if useful.

This was referenced Aug 2, 2026
@roderickvd

Copy link
Copy Markdown
Member

Valid point that supported isn’t equal to available. But to your last point, in which cases would that be different for WASAPI or ASIO?

+ Added migration path for removed items to `UPGRADING.md`.

- Removed `ALL_HOSTS`, `available_hosts`, and `host_from_id`.
* `HostId::display` no longer outputs as lowercased.
* `HostId::parse` now uses the mixed-case host id forms in the
  documentation. The error message is also slightly clarified.
* `TryFrom<HostId> for Host` is now the implementation of
  `host_from_id`, as opposed to vice-versa.
+ Added documentation to `HostId` pointing to the `TryFrom`
  implementation to get a `Host`.

- Removed `host_from_id`.
@cbrownsey

Copy link
Copy Markdown
Author

I've made some changes. I decided to go for removing available_hosts, ALL_HOSTS, and host_from_id. I added a very short section about how to go from a HostId to a Host, which seems enough to me.

Thank you for spotting that I did use the wrong method in AvailableHostsIter, not sure what that was about. And I did remove the lowercasing in the Display method. I kept that from the previous implementation, but I never did like it as it felt like a very unnecessary allocation. I also added a test to ensure that the Display implementation round-trips, as you mentioned.

I've also updated some of the example files to have them compile with my changes, but they do still have the cfgs in them that this whole exercise is to remove, so I'll have those fixed up tomorrow. Other than that, I'm comfortable with the changes as they are.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants