Make config objects Serializable with serde
parent
02b0f69e14
commit
1328f994f3
|
@ -245,7 +245,7 @@ impl BackendOp for ReadOnlyOp {
|
|||
}
|
||||
}
|
||||
|
||||
#[derive(Debug, Copy, Hash, Eq, Clone, Deserialize, PartialEq)]
|
||||
#[derive(Debug, Copy, Hash, Eq, Clone, Serialize, Deserialize, PartialEq)]
|
||||
pub enum SpecialUseMailbox {
|
||||
Normal,
|
||||
Inbox,
|
||||
|
|
|
@ -41,7 +41,8 @@ use melib::backends::SpecialUseMailbox;
|
|||
use melib::conf::AccountSettings;
|
||||
use melib::error::*;
|
||||
|
||||
use self::serde::{de, Deserialize, Deserializer};
|
||||
use serde::{de, Deserialize, Deserializer, Serialize, Serializer};
|
||||
|
||||
use std::collections::HashMap;
|
||||
use std::env;
|
||||
use std::fs::{File, OpenOptions};
|
||||
|
@ -88,7 +89,7 @@ impl ToggleFlag {
|
|||
}
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone, Deserialize)]
|
||||
#[derive(Debug, Clone, Serialize, Deserialize)]
|
||||
pub struct FolderConf {
|
||||
rename: Option<String>,
|
||||
#[serde(default = "true_val")]
|
||||
|
@ -119,7 +120,7 @@ impl FolderConf {
|
|||
}
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone, Default, Deserialize)]
|
||||
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
|
||||
pub struct FileAccount {
|
||||
root_folder: String,
|
||||
format: String,
|
||||
|
@ -247,7 +248,7 @@ impl FileAccount {
|
|||
}
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone, Default, Deserialize)]
|
||||
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
|
||||
struct FileSettings {
|
||||
accounts: HashMap<String, FileAccount>,
|
||||
#[serde(default)]
|
||||
|
@ -376,7 +377,7 @@ impl Settings {
|
|||
}
|
||||
}
|
||||
|
||||
#[derive(Copy, Debug, Clone, Deserialize)]
|
||||
#[derive(Copy, Debug, Clone, Serialize, Deserialize)]
|
||||
pub enum IndexStyle {
|
||||
Plain,
|
||||
Threaded,
|
||||
|
@ -426,6 +427,19 @@ where
|
|||
})
|
||||
}
|
||||
|
||||
impl Serialize for ToggleFlag {
|
||||
fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
|
||||
where
|
||||
S: Serializer,
|
||||
{
|
||||
match self {
|
||||
ToggleFlag::Unset | ToggleFlag::InternalVal(_) => serializer.serialize_none(),
|
||||
ToggleFlag::False => serializer.serialize_bool(false),
|
||||
ToggleFlag::True => serializer.serialize_bool(true),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Deserialize default functions
|
||||
*/
|
||||
|
|
|
@ -24,7 +24,7 @@ fn none() -> Option<String> {
|
|||
}
|
||||
|
||||
/// Settings for the notifications function.
|
||||
#[derive(Debug, Deserialize, Clone, Default)]
|
||||
#[derive(Debug, Serialize, Deserialize, Clone, Default)]
|
||||
pub struct NotificationsSettings {
|
||||
/// A command to pipe notifications through
|
||||
/// Default: None
|
||||
|
|
|
@ -2,7 +2,7 @@ use crate::terminal::Key;
|
|||
//use std::any::TypeId;
|
||||
use fnv::FnvHashMap;
|
||||
|
||||
#[derive(Debug, Clone, Default, Deserialize)]
|
||||
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
|
||||
pub struct Shortcuts {
|
||||
#[serde(flatten)]
|
||||
pub listing: ListingShortcuts,
|
||||
|
@ -22,7 +22,7 @@ macro_rules! shortcut_key_values {
|
|||
$(#[$outer:meta])*
|
||||
pub struct $name:ident { $($fname:ident : Key |> $fdesc:expr),* }) => {
|
||||
$(#[$outer])*
|
||||
#[derive(Debug, Clone, Deserialize)]
|
||||
#[derive(Debug, Clone, Serialize, Deserialize)]
|
||||
#[serde(default)]
|
||||
#[serde(rename = $cname)]
|
||||
pub struct $name {
|
||||
|
|
|
@ -21,6 +21,7 @@
|
|||
|
||||
use super::*;
|
||||
use chan;
|
||||
use serde::{Serialize, Serializer};
|
||||
use std::fmt;
|
||||
use std::io;
|
||||
use termion::event::Event as TermionEvent;
|
||||
|
@ -285,3 +286,33 @@ impl<'de> Deserialize<'de> for Key {
|
|||
deserializer.deserialize_identifier(KeyVisitor)
|
||||
}
|
||||
}
|
||||
|
||||
impl Serialize for Key {
|
||||
fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
|
||||
where
|
||||
S: Serializer,
|
||||
{
|
||||
match self {
|
||||
Key::Backspace => serializer.serialize_str("Backspace"),
|
||||
Key::Left => serializer.serialize_str("Left"),
|
||||
Key::Right => serializer.serialize_str("Right"),
|
||||
Key::Up => serializer.serialize_str("Up"),
|
||||
Key::Down => serializer.serialize_str("Down"),
|
||||
Key::Home => serializer.serialize_str("Home"),
|
||||
Key::End => serializer.serialize_str("End"),
|
||||
Key::PageUp => serializer.serialize_str("PageUp"),
|
||||
Key::PageDown => serializer.serialize_str("PageDown"),
|
||||
Key::Delete => serializer.serialize_str("Delete"),
|
||||
Key::Insert => serializer.serialize_str("Insert"),
|
||||
Key::Esc => serializer.serialize_str("Esc"),
|
||||
Key::Char(c) => serializer.serialize_char(*c),
|
||||
Key::F(n) => serializer.serialize_str(&format!("F{}", n)),
|
||||
Key::Alt(c) => serializer.serialize_str(&format!("M-{}", c)),
|
||||
Key::Ctrl(c) => serializer.serialize_str(&format!("C-{}", c)),
|
||||
v => Err(serde::ser::Error::custom(format!(
|
||||
"`{}` is not a valid key",
|
||||
v
|
||||
))),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue