command/parser: unify toggle_* parsers
Signed-off-by: Manos Pitsidianakis <manos@pitsidianak.is>pull/299/head
parent
63abf1e890
commit
bb4d200036
|
@ -332,7 +332,7 @@ define_commands!([
|
||||||
{ tags: ["toggle thread_snooze"],
|
{ tags: ["toggle thread_snooze"],
|
||||||
desc: "turn off new notifications for this thread",
|
desc: "turn off new notifications for this thread",
|
||||||
tokens: &[One(Literal("toggle")), One(Literal("thread_snooze"))],
|
tokens: &[One(Literal("toggle")), One(Literal("thread_snooze"))],
|
||||||
parser: parser::toggle_thread_snooze
|
parser: parser::toggle
|
||||||
},
|
},
|
||||||
{ tags: ["search"],
|
{ tags: ["search"],
|
||||||
desc: "search <TERM>, searches list with given term",
|
desc: "search <TERM>, searches list with given term",
|
||||||
|
@ -400,12 +400,12 @@ Alternatives(&[to_stream!(One(Literal("add-attachment")), One(Filepath)), to_str
|
||||||
{ tags: ["toggle sign "],
|
{ tags: ["toggle sign "],
|
||||||
desc: "switch between sign/unsign for this draft",
|
desc: "switch between sign/unsign for this draft",
|
||||||
tokens: &[One(Literal("toggle")), One(Literal("sign"))],
|
tokens: &[One(Literal("toggle")), One(Literal("sign"))],
|
||||||
parser: parser::toggle_sign
|
parser: parser::toggle
|
||||||
},
|
},
|
||||||
{ tags: ["toggle encrypt"],
|
{ tags: ["toggle encrypt"],
|
||||||
desc: "toggle encryption for this draft",
|
desc: "toggle encryption for this draft",
|
||||||
tokens: &[One(Literal("toggle")), One(Literal("encrypt"))],
|
tokens: &[One(Literal("toggle")), One(Literal("encrypt"))],
|
||||||
parser: parser::toggle_encrypt
|
parser: parser::toggle
|
||||||
},
|
},
|
||||||
{ tags: ["create-mailbox "],
|
{ tags: ["create-mailbox "],
|
||||||
desc: "create-mailbox ACCOUNT MAILBOX_PATH",
|
desc: "create-mailbox ACCOUNT MAILBOX_PATH",
|
||||||
|
@ -475,7 +475,7 @@ Alternatives(&[to_stream!(One(Literal("add-attachment")), One(Filepath)), to_str
|
||||||
{ tags: ["toggle mouse"],
|
{ tags: ["toggle mouse"],
|
||||||
desc: "toggle mouse support",
|
desc: "toggle mouse support",
|
||||||
tokens: &[One(Literal("toggle")), One(Literal("mouse"))],
|
tokens: &[One(Literal("toggle")), One(Literal("mouse"))],
|
||||||
parser: parser::toggle_mouse
|
parser: parser::toggle
|
||||||
},
|
},
|
||||||
{ tags: ["manage-mailboxes"],
|
{ tags: ["manage-mailboxes"],
|
||||||
desc: "view and manage mailbox preferences",
|
desc: "view and manage mailbox preferences",
|
||||||
|
|
|
@ -147,19 +147,19 @@ macro_rules! arg_init {
|
||||||
}};
|
}};
|
||||||
}
|
}
|
||||||
|
|
||||||
macro_rules! arg_value_check {
|
//macro_rules! arg_value_check {
|
||||||
($tag:literal, $input:expr) => {{
|
// ($tag:literal, $input:expr) => {{
|
||||||
if tag::<&'_ str, &'_ [u8], melib::nom::error::Error<&[u8]>>($tag)($input).is_err() {
|
// if tag::<&'_ str, &'_ [u8],
|
||||||
return Ok((
|
// melib::nom::error::Error<&[u8]>>($tag)($input).is_err() { return
|
||||||
$input,
|
// Ok(( $input,
|
||||||
Err(CommandError::BadValue {
|
// Err(CommandError::BadValue {
|
||||||
inner: $tag.to_string().into(),
|
// inner: $tag.to_string().into(),
|
||||||
}),
|
// }),
|
||||||
));
|
// ));
|
||||||
}
|
// }
|
||||||
tag($tag)($input)
|
// tag($tag)($input)
|
||||||
}};
|
// }};
|
||||||
}
|
//}
|
||||||
|
|
||||||
macro_rules! arg_chk {
|
macro_rules! arg_chk {
|
||||||
(start $check:ident, $input:expr) => {{
|
(start $check:ident, $input:expr) => {{
|
||||||
|
|
|
@ -47,6 +47,12 @@ macro_rules! command_err {
|
||||||
}};
|
}};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
macro_rules! tag {
|
||||||
|
() => {{
|
||||||
|
tag::<&'_ str, &'_ [u8], melib::nom::error::Error<&[u8]>>
|
||||||
|
}};
|
||||||
|
}
|
||||||
|
|
||||||
pub fn usize_c(input: &[u8]) -> IResult<&[u8], usize> {
|
pub fn usize_c(input: &[u8]) -> IResult<&[u8], usize> {
|
||||||
map_res(
|
map_res(
|
||||||
map_res(digit1, std::str::from_utf8),
|
map_res(digit1, std::str::from_utf8),
|
||||||
|
@ -92,7 +98,6 @@ pub fn listing_action(input: &[u8]) -> IResult<&[u8], Result<Action, CommandErro
|
||||||
import,
|
import,
|
||||||
search,
|
search,
|
||||||
select,
|
select,
|
||||||
toggle_thread_snooze,
|
|
||||||
open_in_new_tab,
|
open_in_new_tab,
|
||||||
export_mbox,
|
export_mbox,
|
||||||
_tag,
|
_tag,
|
||||||
|
@ -100,14 +105,7 @@ pub fn listing_action(input: &[u8]) -> IResult<&[u8], Result<Action, CommandErro
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn compose_action(input: &[u8]) -> IResult<&[u8], Result<Action, CommandError>> {
|
pub fn compose_action(input: &[u8]) -> IResult<&[u8], Result<Action, CommandError>> {
|
||||||
alt((
|
alt((add_attachment, mailto, remove_attachment, save_draft))(input)
|
||||||
add_attachment,
|
|
||||||
mailto,
|
|
||||||
remove_attachment,
|
|
||||||
toggle_sign,
|
|
||||||
toggle_encrypt,
|
|
||||||
save_draft,
|
|
||||||
))(input)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn account_action(input: &[u8]) -> IResult<&[u8], Result<Action, CommandError>> {
|
pub fn account_action(input: &[u8]) -> IResult<&[u8], Result<Action, CommandError>> {
|
||||||
|
@ -148,7 +146,7 @@ pub fn parse_command(input: &[u8]) -> Result<Action, CommandError> {
|
||||||
new_tab,
|
new_tab,
|
||||||
account_action,
|
account_action,
|
||||||
print_setting,
|
print_setting,
|
||||||
toggle_mouse,
|
toggle,
|
||||||
reload_config,
|
reload_config,
|
||||||
quit,
|
quit,
|
||||||
))(input)
|
))(input)
|
||||||
|
@ -326,17 +324,6 @@ pub fn sort_column(input: &[u8]) -> IResult<&[u8], Result<Action, CommandError>>
|
||||||
let (input, _) = eof(input)?;
|
let (input, _) = eof(input)?;
|
||||||
Ok((input, Ok(SortColumn(i, order))))
|
Ok((input, Ok(SortColumn(i, order))))
|
||||||
}
|
}
|
||||||
pub fn toggle_thread_snooze(input: &[u8]) -> IResult<&[u8], Result<Action, CommandError>> {
|
|
||||||
let mut check = arg_init! { min_arg:0, max_arg: 0, toggle_thread_snooze};
|
|
||||||
let (input, _) = tag("toggle")(input.trim())?;
|
|
||||||
arg_chk!(start check, input);
|
|
||||||
let (input, _) = is_a(" ")(input)?;
|
|
||||||
arg_chk!(inc check, input);
|
|
||||||
let (input, _) = tag("thread_snooze")(input.trim())?;
|
|
||||||
arg_chk!(finish check, input);
|
|
||||||
let (input, _) = eof(input)?;
|
|
||||||
Ok((input, Ok(Listing(ToggleThreadSnooze))))
|
|
||||||
}
|
|
||||||
pub fn search(input: &[u8]) -> IResult<&[u8], Result<Action, CommandError>> {
|
pub fn search(input: &[u8]) -> IResult<&[u8], Result<Action, CommandError>> {
|
||||||
let mut check = arg_init! { min_arg:1, max_arg:{ u8::MAX}, search};
|
let mut check = arg_init! { min_arg:1, max_arg:{ u8::MAX}, search};
|
||||||
let (input, _) = tag("search")(input.trim())?;
|
let (input, _) = tag("search")(input.trim())?;
|
||||||
|
@ -547,28 +534,6 @@ pub fn save_draft(input: &[u8]) -> IResult<&[u8], Result<Action, CommandError>>
|
||||||
let (input, _) = eof(input)?;
|
let (input, _) = eof(input)?;
|
||||||
Ok((input, Ok(Compose(SaveDraft))))
|
Ok((input, Ok(Compose(SaveDraft))))
|
||||||
}
|
}
|
||||||
pub fn toggle_sign(input: &[u8]) -> IResult<&[u8], Result<Action, CommandError>> {
|
|
||||||
let mut check = arg_init! { min_arg:1, max_arg: 1, toggle_sign};
|
|
||||||
let (input, _) = tag("toggle")(input.trim())?;
|
|
||||||
arg_chk!(start check, input);
|
|
||||||
let (input, _) = is_a(" ")(input)?;
|
|
||||||
arg_chk!(inc check, input);
|
|
||||||
let (input, _) = arg_value_check!("sign", input)?;
|
|
||||||
arg_chk!(finish check, input);
|
|
||||||
let (input, _) = eof(input)?;
|
|
||||||
Ok((input, Ok(Compose(ToggleSign))))
|
|
||||||
}
|
|
||||||
pub fn toggle_encrypt(input: &[u8]) -> IResult<&[u8], Result<Action, CommandError>> {
|
|
||||||
let mut check = arg_init! { min_arg:1, max_arg: 1, toggle_encrypt};
|
|
||||||
let (input, _) = tag("toggle")(input.trim())?;
|
|
||||||
arg_chk!(start check, input);
|
|
||||||
let (input, _) = is_a(" ")(input)?;
|
|
||||||
arg_chk!(inc check, input);
|
|
||||||
let (input, _) = arg_value_check!("encrypt", input)?;
|
|
||||||
arg_chk!(finish check, input);
|
|
||||||
let (input, _) = eof(input)?;
|
|
||||||
Ok((input, Ok(Compose(ToggleEncrypt))))
|
|
||||||
}
|
|
||||||
pub fn create_mailbox(input: &[u8]) -> IResult<&[u8], Result<Action, CommandError>> {
|
pub fn create_mailbox(input: &[u8]) -> IResult<&[u8], Result<Action, CommandError>> {
|
||||||
let mut check = arg_init! { min_arg:1, max_arg: 1, create_malbox};
|
let mut check = arg_init! { min_arg:1, max_arg: 1, create_malbox};
|
||||||
let (input, _) = tag("create-mailbox")(input.trim())?;
|
let (input, _) = tag("create-mailbox")(input.trim())?;
|
||||||
|
@ -784,16 +749,44 @@ pub fn print_setting(input: &[u8]) -> IResult<&[u8], Result<Action, CommandError
|
||||||
let (input, _) = eof(input)?;
|
let (input, _) = eof(input)?;
|
||||||
Ok((input, Ok(PrintSetting(setting.to_string()))))
|
Ok((input, Ok(PrintSetting(setting.to_string()))))
|
||||||
}
|
}
|
||||||
pub fn toggle_mouse(input: &[u8]) -> IResult<&[u8], Result<Action, CommandError>> {
|
pub fn toggle(input: &[u8]) -> IResult<&[u8], Result<Action, CommandError>> {
|
||||||
let mut check = arg_init! { min_arg:1, max_arg: 1, toggle_mouse};
|
let mut check = arg_init! { min_arg:1, max_arg: 1, toggle };
|
||||||
let (input, _) = tag("toggle")(input.trim())?;
|
let (input, _) = tag("toggle")(input.trim())?;
|
||||||
arg_chk!(start check, input);
|
arg_chk!(start check, input);
|
||||||
let (input, _) = is_a(" ")(input)?;
|
let (mut input, _) = is_a(" ")(input)?;
|
||||||
arg_chk!(inc check, input);
|
arg_chk!(inc check, input);
|
||||||
let (input, _) = tag("mouse")(input.trim())?;
|
let mut retval = if tag!()("thread_snooze")(input.ltrim()).is_ok() {
|
||||||
|
Some(Listing(ToggleThreadSnooze))
|
||||||
|
} else {
|
||||||
|
None
|
||||||
|
};
|
||||||
|
for (tok, action) in [
|
||||||
|
("thread_snooze", Listing(ToggleThreadSnooze)),
|
||||||
|
("mouse", ToggleMouse),
|
||||||
|
("sign", Compose(ToggleSign)),
|
||||||
|
("encrypt", Compose(ToggleEncrypt)),
|
||||||
|
] {
|
||||||
|
if let Ok((inner_input, _)) = tag!()(tok)(input.trim()) {
|
||||||
|
input = inner_input;
|
||||||
|
retval = Some(action);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
let retval = match retval {
|
||||||
|
None => {
|
||||||
|
return Ok((
|
||||||
|
input,
|
||||||
|
Err(CommandError::BadValue {
|
||||||
|
inner: "Valid toggle values are thread_snooze, mouse, sign, encrypt.".into(),
|
||||||
|
}),
|
||||||
|
));
|
||||||
|
}
|
||||||
|
Some(v) => v,
|
||||||
|
};
|
||||||
|
|
||||||
arg_chk!(finish check, input);
|
arg_chk!(finish check, input);
|
||||||
let (input, _) = eof(input)?;
|
let (input, _) = eof(input)?;
|
||||||
Ok((input, Ok(ToggleMouse)))
|
Ok((input, Ok(retval)))
|
||||||
}
|
}
|
||||||
pub fn manage_mailboxes(input: &[u8]) -> IResult<&[u8], Result<Action, CommandError>> {
|
pub fn manage_mailboxes(input: &[u8]) -> IResult<&[u8], Result<Action, CommandError>> {
|
||||||
let mut check = arg_init! { min_arg:0, max_arg: 0, manage_mailboxes};
|
let mut check = arg_init! { min_arg:0, max_arg: 0, manage_mailboxes};
|
||||||
|
|
Loading…
Reference in New Issue