pub struct Config {
pub schema_version: u32,
pub app_settings: AppSettings,
pub selected_device: Option<String>,
pub devices: BTreeMap<String, DeviceConfig>,
}Expand description
Top-level config document.
Fields§
§schema_version: u32§app_settings: AppSettingsNon-device-scoped preferences (autostart, tray, language, …).
selected_device: Option<String>HID++ config_key of the carousel-selected device, persisted so a
restart restores the last view rather than always landing on the
first paired device. None means “fall back to the first device”.
devices: BTreeMap<String, DeviceConfig>Implementations§
Source§impl Config
impl Config
Sourcepub fn load_or_default() -> Result<Self, ConfigError>
pub fn load_or_default() -> Result<Self, ConfigError>
Loads the config from the default user path, returning
Config::default if the file does not exist yet.
Sourcepub fn load_from_path(path: &Path) -> Result<Self, ConfigError>
pub fn load_from_path(path: &Path) -> Result<Self, ConfigError>
Same as Self::load_or_default but reads from path. Used by tests
to avoid touching the real user config.
Sourcepub fn save_atomic(&self) -> Result<(), ConfigError>
pub fn save_atomic(&self) -> Result<(), ConfigError>
Writes the config atomically to the default user path: serialize to a sibling temp file, then rename over the target. On Unix the temp file is created with mode 0600.
Sourcepub fn save_to_path(&self, path: &Path) -> Result<(), ConfigError>
pub fn save_to_path(&self, path: &Path) -> Result<(), ConfigError>
Same as Self::save_atomic but writes to path. Used by tests.
Sourcepub fn bindings_for(&self, device_key: &str) -> BTreeMap<ButtonId, Action>
pub fn bindings_for(&self, device_key: &str) -> BTreeMap<ButtonId, Action>
Returns the bindings stored for device_key, or an empty map if the
device has no committed bindings yet.
Sourcepub fn set_binding(
&mut self,
device_key: &str,
button: ButtonId,
action: Action,
)
pub fn set_binding( &mut self, device_key: &str, button: ButtonId, action: Action, )
Records action as the binding for button on device_key,
creating the device entry if needed.
Sourcepub fn gesture_bindings_for(
&self,
device_key: &str,
) -> BTreeMap<GestureDirection, Action>
pub fn gesture_bindings_for( &self, device_key: &str, ) -> BTreeMap<GestureDirection, Action>
Returns the gesture sub-bindings stored for device_key, or an empty
map if none are set yet.
Sourcepub fn set_gesture_binding(
&mut self,
device_key: &str,
direction: GestureDirection,
action: Action,
)
pub fn set_gesture_binding( &mut self, device_key: &str, direction: GestureDirection, action: Action, )
Records action for direction of device_key’s gesture button.
Sourcepub fn effective_bindings(
&self,
device_key: &str,
bundle_id: Option<&str>,
) -> BTreeMap<ButtonId, Action>
pub fn effective_bindings( &self, device_key: &str, bundle_id: Option<&str>, ) -> BTreeMap<ButtonId, Action>
Resolve the effective binding map for device_key, overlaying the
per-app entry for bundle_id (if any) on top of the global per-device
button_bindings. Per-app values win; everything else falls through.
Returns an empty map when the device has no recorded bindings yet. Callers (the GUI / hook) layer their own defaults on top.
Sourcepub fn set_per_app_binding(
&mut self,
device_key: &str,
bundle_id: &str,
button: ButtonId,
action: Option<Action>,
)
pub fn set_per_app_binding( &mut self, device_key: &str, bundle_id: &str, button: ButtonId, action: Option<Action>, )
Records a per-app override. Creates the device + app entries as
needed; passing an action of None removes the override and prunes
the empty app map.
Sourcepub fn selected_device(&self) -> Option<&str>
pub fn selected_device(&self) -> Option<&str>
HID++ config key of the carousel-selected device, if any.
Sourcepub fn set_selected_device(&mut self, key: Option<String>)
pub fn set_selected_device(&mut self, key: Option<String>)
Update the carousel-selected device. Pass None to clear the
selection (e.g. when the previously-selected device disappears).
Sourcepub fn dpi_presets(&self, device_key: &str) -> Vec<u32>
pub fn dpi_presets(&self, device_key: &str) -> Vec<u32>
The ordered DPI preset list for device_key, or an empty Vec if the
device has none configured yet.
Sourcepub fn set_dpi_presets(&mut self, device_key: &str, presets: Vec<u32>)
pub fn set_dpi_presets(&mut self, device_key: &str, presets: Vec<u32>)
Replace the DPI preset list for device_key. Pass an empty Vec to
clear (the device block is kept; the field is just omitted on save
thanks to skip_serializing_if).
Sourcepub fn lighting(&self, device_key: &str) -> Option<Lighting>
pub fn lighting(&self, device_key: &str) -> Option<Lighting>
The lighting config for device_key, or None if unset.
Sourcepub fn set_lighting(&mut self, device_key: &str, lighting: Lighting)
pub fn set_lighting(&mut self, device_key: &str, lighting: Lighting)
Replace the lighting config for device_key.
Trait Implementations§
Source§impl<'de> Deserialize<'de> for Config
impl<'de> Deserialize<'de> for Config
Source§fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
Auto Trait Implementations§
impl Freeze for Config
impl RefUnwindSafe for Config
impl Send for Config
impl Sync for Config
impl Unpin for Config
impl UnsafeUnpin for Config
impl UnwindSafe for Config
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> DeserializeOwned for Twhere
T: for<'de> Deserialize<'de>,
Source§impl<T> FmtForward for T
impl<T> FmtForward for T
Source§fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
self to use its Binary implementation when Debug-formatted.Source§fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
self to use its Display implementation when
Debug-formatted.Source§fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
self to use its LowerExp implementation when
Debug-formatted.Source§fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
self to use its LowerHex implementation when
Debug-formatted.Source§fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
self to use its Octal implementation when Debug-formatted.Source§fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
self to use its Pointer implementation when
Debug-formatted.Source§fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
self to use its UpperExp implementation when
Debug-formatted.Source§fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
self to use its UpperHex implementation when
Debug-formatted.Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> Pipe for Twhere
T: ?Sized,
impl<T> Pipe for Twhere
T: ?Sized,
Source§fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
Source§fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
self and passes that borrow into the pipe function. Read moreSource§fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
self and passes that borrow into the pipe function. Read moreSource§fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
Source§fn pipe_borrow_mut<'a, B, R>(
&'a mut self,
func: impl FnOnce(&'a mut B) -> R,
) -> R
fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
Source§fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
self, then passes self.as_ref() into the pipe function.Source§fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
self, then passes self.as_mut() into the pipe
function.Source§fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
self, then passes self.deref() into the pipe function.Source§impl<T> Tap for T
impl<T> Tap for T
Source§fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
Borrow<B> of a value. Read moreSource§fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
BorrowMut<B> of a value. Read moreSource§fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
AsRef<R> view of a value. Read moreSource§fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
AsMut<R> view of a value. Read moreSource§fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
Deref::Target of a value. Read moreSource§fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
Deref::Target of a value. Read moreSource§fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
.tap() only in debug builds, and is erased in release builds.Source§fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
.tap_mut() only in debug builds, and is erased in release
builds.Source§fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
.tap_borrow() only in debug builds, and is erased in release
builds.Source§fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
.tap_borrow_mut() only in debug builds, and is erased in release
builds.Source§fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
.tap_ref() only in debug builds, and is erased in release
builds.Source§fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
.tap_ref_mut() only in debug builds, and is erased in release
builds.Source§fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
.tap_deref() only in debug builds, and is erased in release
builds.