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 {
|
pub enum SpecialUseMailbox {
|
||||||
Normal,
|
Normal,
|
||||||
Inbox,
|
Inbox,
|
||||||
|
|
|
@ -41,7 +41,8 @@ use melib::backends::SpecialUseMailbox;
|
||||||
use melib::conf::AccountSettings;
|
use melib::conf::AccountSettings;
|
||||||
use melib::error::*;
|
use melib::error::*;
|
||||||
|
|
||||||
use self::serde::{de, Deserialize, Deserializer};
|
use serde::{de, Deserialize, Deserializer, Serialize, Serializer};
|
||||||
|
|
||||||
use std::collections::HashMap;
|
use std::collections::HashMap;
|
||||||
use std::env;
|
use std::env;
|
||||||
use std::fs::{File, OpenOptions};
|
use std::fs::{File, OpenOptions};
|
||||||
|
@ -88,7 +89,7 @@ impl ToggleFlag {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug, Clone, Deserialize)]
|
#[derive(Debug, Clone, Serialize, Deserialize)]
|
||||||
pub struct FolderConf {
|
pub struct FolderConf {
|
||||||
rename: Option<String>,
|
rename: Option<String>,
|
||||||
#[serde(default = "true_val")]
|
#[serde(default = "true_val")]
|
||||||
|
@ -119,7 +120,7 @@ impl FolderConf {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug, Clone, Default, Deserialize)]
|
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
|
||||||
pub struct FileAccount {
|
pub struct FileAccount {
|
||||||
root_folder: String,
|
root_folder: String,
|
||||||
format: String,
|
format: String,
|
||||||
|
@ -247,7 +248,7 @@ impl FileAccount {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug, Clone, Default, Deserialize)]
|
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
|
||||||
struct FileSettings {
|
struct FileSettings {
|
||||||
accounts: HashMap<String, FileAccount>,
|
accounts: HashMap<String, FileAccount>,
|
||||||
#[serde(default)]
|
#[serde(default)]
|
||||||
|
@ -376,7 +377,7 @@ impl Settings {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Copy, Debug, Clone, Deserialize)]
|
#[derive(Copy, Debug, Clone, Serialize, Deserialize)]
|
||||||
pub enum IndexStyle {
|
pub enum IndexStyle {
|
||||||
Plain,
|
Plain,
|
||||||
Threaded,
|
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
|
* Deserialize default functions
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -24,7 +24,7 @@ fn none() -> Option<String> {
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Settings for the notifications function.
|
/// Settings for the notifications function.
|
||||||
#[derive(Debug, Deserialize, Clone, Default)]
|
#[derive(Debug, Serialize, Deserialize, Clone, Default)]
|
||||||
pub struct NotificationsSettings {
|
pub struct NotificationsSettings {
|
||||||
/// A command to pipe notifications through
|
/// A command to pipe notifications through
|
||||||
/// Default: None
|
/// Default: None
|
||||||
|
|
|
@ -2,7 +2,7 @@ use crate::terminal::Key;
|
||||||
//use std::any::TypeId;
|
//use std::any::TypeId;
|
||||||
use fnv::FnvHashMap;
|
use fnv::FnvHashMap;
|
||||||
|
|
||||||
#[derive(Debug, Clone, Default, Deserialize)]
|
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
|
||||||
pub struct Shortcuts {
|
pub struct Shortcuts {
|
||||||
#[serde(flatten)]
|
#[serde(flatten)]
|
||||||
pub listing: ListingShortcuts,
|
pub listing: ListingShortcuts,
|
||||||
|
@ -22,7 +22,7 @@ macro_rules! shortcut_key_values {
|
||||||
$(#[$outer:meta])*
|
$(#[$outer:meta])*
|
||||||
pub struct $name:ident { $($fname:ident : Key |> $fdesc:expr),* }) => {
|
pub struct $name:ident { $($fname:ident : Key |> $fdesc:expr),* }) => {
|
||||||
$(#[$outer])*
|
$(#[$outer])*
|
||||||
#[derive(Debug, Clone, Deserialize)]
|
#[derive(Debug, Clone, Serialize, Deserialize)]
|
||||||
#[serde(default)]
|
#[serde(default)]
|
||||||
#[serde(rename = $cname)]
|
#[serde(rename = $cname)]
|
||||||
pub struct $name {
|
pub struct $name {
|
||||||
|
|
|
@ -21,6 +21,7 @@
|
||||||
|
|
||||||
use super::*;
|
use super::*;
|
||||||
use chan;
|
use chan;
|
||||||
|
use serde::{Serialize, Serializer};
|
||||||
use std::fmt;
|
use std::fmt;
|
||||||
use std::io;
|
use std::io;
|
||||||
use termion::event::Event as TermionEvent;
|
use termion::event::Event as TermionEvent;
|
||||||
|
@ -285,3 +286,33 @@ impl<'de> Deserialize<'de> for Key {
|
||||||
deserializer.deserialize_identifier(KeyVisitor)
|
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