#[cfg(feature = "serde")]
use ::serde::{Deserialize, Serialize};
#[cfg(feature = "serde")]
use crate::control::de;
use super::Action;
#[derive(Clone, Debug, PartialEq)]
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
#[cfg_attr(feature = "serde", serde(rename_all = "PascalCase"))]
pub struct Command {
pub uploader: String,
pub commands: Vec<Action>,
}
#[derive(Debug)]
#[cfg_attr(not(feature = "serde"), allow(missing_copy_implementations))]
pub enum CommandError {
#[cfg(feature = "serde")]
De(de::Error),
}
#[cfg(feature = "serde")]
impl From<de::Error> for CommandError {
fn from(dee: de::Error) -> Self {
Self::De(dee)
}
}
crate::errors::error_enum!(CommandError);
#[cfg(all(test, feature = "serde"))]
mod tests {
use super::*;
#[test]
fn command_everything() {
let command: Command = de::from_str(
"\
Uploader: Paul Tagliamonte <paultag@debian.org>
Commands:
rm --searchdir foo
reschedule foo.changes 2-day
cancel bar.changes
unknown unknown
",
)
.unwrap();
assert_eq!(4, command.commands.len());
assert_eq!(
&[
Action::Rm("--searchdir foo".to_owned()),
Action::Reschedule("foo.changes 2-day".to_owned()),
Action::Cancel("bar.changes".to_owned()),
Action::Unknown("unknown unknown".to_owned())
],
command.commands.as_slice()
);
}
}