This PR separates out the associated constant `KEY` from the `Settings` trait into a new trait `SettingsKey`. This allows for the key trait to be derived using attributes to specify the path so that the new `SettingsUi` derive macro can use the same attributes to determine top level settings paths thereby removing the need to duplicate the path in both `Settings::KEY` and `#[settings_ui(path = "...")]` Co-authored-by: Ben Kunkle <ben@zed.dev> Release Notes: - N/A --------- Co-authored-by: Ben Kunkle <ben@zed.dev>
41 lines
1.3 KiB
Rust
41 lines
1.3 KiB
Rust
use gpui::App;
|
|
use schemars::JsonSchema;
|
|
use serde::{Deserialize, Serialize};
|
|
use settings::{Settings, SettingsKey, SettingsSources, SettingsUi};
|
|
|
|
/// The settings for the image viewer.
|
|
#[derive(Clone, Debug, Serialize, Deserialize, JsonSchema, Default, SettingsUi, SettingsKey)]
|
|
#[settings_key(key = "image_viewer")]
|
|
pub struct ImageViewerSettings {
|
|
/// The unit to use for displaying image file sizes.
|
|
///
|
|
/// Default: "binary"
|
|
#[serde(default)]
|
|
pub unit: ImageFileSizeUnit,
|
|
}
|
|
|
|
#[derive(Clone, Copy, Debug, Serialize, Deserialize, JsonSchema, Default)]
|
|
#[serde(rename_all = "snake_case")]
|
|
pub enum ImageFileSizeUnit {
|
|
/// Displays file size in binary units (e.g., KiB, MiB).
|
|
#[default]
|
|
Binary,
|
|
/// Displays file size in decimal units (e.g., KB, MB).
|
|
Decimal,
|
|
}
|
|
|
|
impl Settings for ImageViewerSettings {
|
|
type FileContent = Self;
|
|
|
|
fn load(sources: SettingsSources<Self::FileContent>, _: &mut App) -> anyhow::Result<Self> {
|
|
SettingsSources::<Self::FileContent>::json_merge_with(
|
|
[sources.default]
|
|
.into_iter()
|
|
.chain(sources.user)
|
|
.chain(sources.server),
|
|
)
|
|
}
|
|
|
|
fn import_from_vscode(_vscode: &settings::VsCodeSettings, _current: &mut Self::FileContent) {}
|
|
}
|