# Scratch pad for ideas
## Moving to an async API
- Use tokio even though it's a bit heavy weight as it is the most popular runtime
and it is something I am keen to get experience with.
- Create a feature flag that guards a new module that contains the async API.
### The steps
Implement discovery with async.
Create a new async Protocol.
Refactor capabilities to separate the command building and response processing from calling the protocol.
The result should be sync capability traits that extend DeviceActionsSync and their relevant "logic" trait.
For example; `Switch` would extend `DeviceActionsSync` and `SwitchCore`.
Implement async capabilities.
Implement async devices. It would be nice if there could be just one place that describes devices which is
used by both the async and sync API.