Skip to content

Commit

Permalink
Compatibility fix for dashboard settings.
Browse files Browse the repository at this point in the history
  • Loading branch information
andymandias committed Feb 25, 2025
1 parent f2bdffa commit 62403b5
Show file tree
Hide file tree
Showing 4 changed files with 20 additions and 16 deletions.
3 changes: 2 additions & 1 deletion data/src/dashboard.rs
Original file line number Diff line number Diff line change
Expand Up @@ -5,14 +5,15 @@ use serde::{Deserialize, Serialize};

use crate::buffer::Buffer;
use crate::pane::Pane;
use crate::serde::fail_as_none;
use crate::{compression, environment};

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Dashboard {
pub pane: Pane,
#[serde(default)]
pub popout_panes: Vec<Pane>,
#[serde(default)]
#[serde(default, deserialize_with = "fail_as_none")]
pub focus_buffer: Option<Buffer>,
}

Expand Down
1 change: 1 addition & 0 deletions data/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@ pub mod message;
pub mod mode;
pub mod pane;
pub mod preview;
pub mod serde;
pub mod server;
pub mod shortcut;
pub mod stream;
Expand Down
17 changes: 2 additions & 15 deletions data/src/message.rs
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ use irc::proto::Command;
use itertools::{Either, Itertools};
use once_cell::sync::Lazy;
use regex::{Regex, RegexBuilder};
use serde::{Deserialize, Deserializer, Serialize};
use serde::{Deserialize, Serialize};
use url::Url;

pub use self::formatting::Formatting;
Expand All @@ -20,6 +20,7 @@ pub use self::source::{
};

use crate::config::buffer::UsernameFormat;
use crate::serde::fail_as_none;
use crate::time::Posix;
use crate::user::{Nick, NickRef};
use crate::{ctcp, isupport, target, Config, Server, User};
Expand Down Expand Up @@ -1403,20 +1404,6 @@ pub enum Link {
GoToMessage(Server, target::Channel, Hash),
}

fn fail_as_none<'de, T, D>(deserializer: D) -> Result<Option<T>, D::Error>
where
T: Deserialize<'de>,
D: Deserializer<'de>,
{
// We must fully consume valid json otherwise the error leaves the
// deserializer in an invalid state and it'll still fail
//
// This assumes we always use a json format
let intermediate = serde_json::Value::deserialize(deserializer)?;

Ok(Option::<T>::deserialize(intermediate).unwrap_or_default())
}

#[derive(Debug, Clone, Default, Deserialize, Serialize)]
pub struct MessageReferences {
pub timestamp: DateTime<Utc>,
Expand Down
15 changes: 15 additions & 0 deletions data/src/serde.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
use serde::{Deserialize, Deserializer};

pub fn fail_as_none<'de, T, D>(deserializer: D) -> Result<Option<T>, D::Error>
where
T: Deserialize<'de>,
D: Deserializer<'de>,
{
// We must fully consume valid json otherwise the error leaves the
// deserializer in an invalid state and it'll still fail
//
// This assumes we always use a json format
let intermediate = serde_json::Value::deserialize(deserializer)?;

Ok(Option::<T>::deserialize(intermediate).unwrap_or_default())
}

0 comments on commit 62403b5

Please sign in to comment.