# deckster > A custom Loupedeck driver and declarative backend written in Rust ## To do - Make the `playerctl` handler independent of… playerctl. Use the [`mpris` crate](https://lib.rs/crates/mpris) directly instead. - Implement scrolling - Move loupedeck_serial and pa_volume_interface out of this repository. - Publish libraries to crates.io - Move handlers to their own repositories ## Contributing ### Terminology - `handler runner`: Node that is running handlers. - `handler host`: A `handler runner` that is not the `coordinator`. - `coordinator`: Node to which the Loupedeck device is physically connected. Can be a `handler runner`. ### The different types of `unwrap` - `expect("")`: The author thinks that unwrapping will never fail because of ``. - `unwrap()`: The author assumes that unwrapping will never fail ~~but explaining why is either obvious or too complicated~~ and it’s obvious why. - `unwrap_todo()`: The author has not yet thought about how to handle this value being `None` or `Err`. They will replace this unwrapping with `expect("")`, `unwrap()`, or proper error handling later. ## Credits [foxxyz’s `loupedeck` library for JavaScript](https://github.com/foxxyz/loupedeck) (licensed under the [MIT license](https://github.com/foxxyz/loupedeck/blob/e41e5d920130d9ef651e47173c68450b9c832b96/LICENSE)) was used as a reference for and inspired the design of `loupedeck_serial`.