2021-07-07 20:48:07 +02:00
|
|
|
use anyhow::Result;
|
|
|
|
use clap::Clap;
|
|
|
|
use log::info;
|
|
|
|
|
|
|
|
/// Delete a message queue
|
|
|
|
#[derive(Clap, Debug)]
|
|
|
|
pub struct Unlink {
|
|
|
|
/// Id of the queue
|
|
|
|
#[clap(
|
|
|
|
short,
|
2021-07-08 17:44:46 +02:00
|
|
|
long,
|
2021-07-07 20:48:07 +02:00
|
|
|
required_unless_present_any = &["key"],
|
|
|
|
conflicts_with = "key"
|
|
|
|
)]
|
2021-07-08 14:13:59 +02:00
|
|
|
id: Option<i32>,
|
2021-07-07 20:48:07 +02:00
|
|
|
/// Key of the queue
|
2021-07-08 17:44:46 +02:00
|
|
|
#[clap(short, long, required_unless_present_any = &["id"], conflicts_with = "id")]
|
2021-07-08 14:13:59 +02:00
|
|
|
key: Option<i32>,
|
2021-07-07 20:48:07 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
impl Unlink {
|
|
|
|
pub fn run(&self) -> Result<()> {
|
|
|
|
if let Some(id) = self.id {
|
|
|
|
sysvmq::unlink_id(id)?;
|
|
|
|
|
|
|
|
info!("Removed message queue with id: {}", id);
|
|
|
|
} else if let Some(key) = self.key {
|
2021-07-08 14:20:53 +02:00
|
|
|
let id = sysvmq::id_from_key(key)?;
|
2021-07-07 20:48:07 +02:00
|
|
|
|
2021-07-08 14:20:53 +02:00
|
|
|
sysvmq::unlink_id(id)?;
|
|
|
|
|
|
|
|
info!("Removed message queue key: {} (id: {})", key, id);
|
2021-07-07 20:48:07 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
Ok(())
|
|
|
|
}
|
|
|
|
}
|