Flip the optionality of the `auto_update` setting (#10302)

Marshall Bowers created

This PR flips the optionality of the `AutoUpdateSettingContent` to make
it a bit easier to work with.

#### Before

```rs
struct AutoUpdateSettingContent(Option<bool>);

type FileContent = AutoUpdateSettingContent;
```

#### After

```rs
struct AutoUpdateSettingContent(bool);

type FileContent = Option<AutoUpdateSettingContent>;
```

Release Notes:

- N/A

Change summary

crates/auto_update/src/auto_update.rs | 23 ++++++++---------------
crates/client/src/client.rs           |  5 +----
2 files changed, 9 insertions(+), 19 deletions(-)

Detailed changes

crates/auto_update/src/auto_update.rs 🔗

@@ -82,29 +82,22 @@ struct AutoUpdateSetting(bool);
 /// Whether or not to automatically check for updates.
 ///
 /// Default: true
-#[derive(Clone, Default, JsonSchema, Deserialize, Serialize)]
+#[derive(Clone, Copy, Default, JsonSchema, Deserialize, Serialize)]
 #[serde(transparent)]
-struct AutoUpdateSettingOverride(Option<bool>);
+struct AutoUpdateSettingContent(bool);
 
 impl Settings for AutoUpdateSetting {
     const KEY: Option<&'static str> = Some("auto_update");
 
-    type FileContent = AutoUpdateSettingOverride;
+    type FileContent = Option<AutoUpdateSettingContent>;
 
     fn load(sources: SettingsSources<Self::FileContent>, _: &mut AppContext) -> Result<Self> {
-        if let Some(release_channel_value) = sources.release_channel {
-            if let Some(value) = release_channel_value.0 {
-                return Ok(Self(value));
-            }
-        }
-
-        if let Some(user_value) = sources.user {
-            if let Some(value) = user_value.0 {
-                return Ok(Self(value));
-            }
-        }
+        let auto_update = [sources.release_channel, sources.user]
+            .into_iter()
+            .find_map(|value| value.copied().flatten())
+            .unwrap_or(sources.default.ok_or_else(Self::missing_default)?);
 
-        Ok(Self(sources.default.0.ok_or_else(Self::missing_default)?))
+        Ok(Self(auto_update.0))
     }
 }
 

crates/client/src/client.rs 🔗

@@ -97,10 +97,7 @@ impl Settings for ClientSettings {
 
     type FileContent = ClientSettingsContent;
 
-    fn load(sources: SettingsSources<Self::FileContent>, _: &mut AppContext) -> Result<Self>
-    where
-        Self: Sized,
-    {
+    fn load(sources: SettingsSources<Self::FileContent>, _: &mut AppContext) -> Result<Self> {
         let mut result = sources.json_merge::<Self>()?;
         if let Some(server_url) = &*ZED_SERVER_URL {
             result.server_url = server_url.clone()