From 9aae14feae41de7df997d7e88e0f8370ad2e0cbe Mon Sep 17 00:00:00 2001 From: finga Date: Wed, 7 Jul 2021 19:19:19 +0200 Subject: [PATCH] Refactor commands to support different backends Therefore also the `sysv` backend is intoduced to prepare for future support. The man page and the readme are updated so far. --- README.md | 30 ++++++++++++++++++++---------- mqrs.1 | 43 ++++++++++++++++++++++++++----------------- src/main.rs | 35 ++++++++++++++++++++++++++--------- 3 files changed, 72 insertions(+), 36 deletions(-) diff --git a/README.md b/README.md index db90769..d274168 100644 --- a/README.md +++ b/README.md @@ -46,31 +46,38 @@ from `target/{debug,release}/mqrs` depending on which one you built. ## Using `mqrs` -`mqrs` supports five commands: `create`, `info`, `list`, `unlink`, -`send` and `recv`. All commands do not have to be specified fully. If -the command is clearly distinguishable from all the others, it does -not have to be completed further. +Depending on which backend you want to use there are different subsets +of subcommands. Following backends are supported: +- `posix`: Uses POSIX message queues +- `sysv`: Uses SysV IPC message queues -### Create a message queue +If a command is clearly distinguishable from all the others, +it does not have to be completed further. + +### POSIX message queues +The POSIX backend supports six commands: `create`, `info`, `list`, +`unlink`, `send` and `recv`. + +#### Create a message queue Use the `create` command to create a new POSIX message queue. Following optional arguments are supported: - `-c`, `--capacity`: Maximum number of messages in the queue - `-p`, `--permissions`: Permissions (octal) to create the queue with - `-s`, `--msgsize`: Message size in bytes -### Print information about a message queue +#### Print information about a message queue Use the `info` command to print further information about a message queue. -### List all message queues +#### List all message queues Use the `list` command to print a list of all message queues. Following option argument is supported: - `-a`, `--all`: Print all available information -### Delete a message queue +#### Delete a message queue Use the `unlink` command to delete a message queue. -### Send a message to a queue +#### Send a message to a queue Use the `send` command to send a message to a message queue. Following optional arguments are supported: - `-n`, `--non-blocking`: Do not block @@ -80,7 +87,7 @@ optional arguments are supported: default, priority >= 0 [default: 0] - `-o`, `--timeout `: As for example in "5h 23min 42ms" -### Receive a message from a queue +#### Receive a message from a queue Use the `recv` command to receive one or more messages from a message queue. Following optional arguments are supported: - `-f`, `--follow`: Print messages as they are received @@ -89,3 +96,6 @@ queue. Following optional arguments are supported: - `-d`, `--deadline `: Deadline until messages are received (format: `%Y-%m-%d %H:%M:%S`) - `-o,` `--timeout `: As for example in "5h 23min 42ms" + +### SysV IPC message queues +The SysV IPC backend supports no commands yet. diff --git a/mqrs.1 b/mqrs.1 index a7dceca..9934081 100644 --- a/mqrs.1 +++ b/mqrs.1 @@ -1,12 +1,34 @@ .\" Manpage for mqrs -.TH man 1 "27 June 2021" "0.1.1" "mqrs man page" +.TH man 1 "7 July 2021" "0.1.1" "mqrs man page" .SH NAME mqrs \- Handle POSIX message queues .SH SYNOPSIS .B mqrs [\-h] [\-\-help] [\-v] [\-\-verbose] [\-V] [\-\-version] [SUBCOMMAND] .SH DESCRIPTION .B mqrs -is a small cli program to handle POSIX message queues. Supported commands are +is a small cli program to handle message queues. Depending on which +backend you want to use there are different subsets of +subcommands. Following backends are supported: +.B posix\ +and +.B sysv\ +. + +If a command is clearly distinguishable from all the others, it does +not have to be completed further. +.SH OPTIONS +.TP 8 +.B \-h, \-\-help +Prints help information +.TP 8 +.B \-v, \-\-verbose +Produce verbose output, multiple -v options increase the verbosity +(max. 3) +.TP 8 +.B \-V, \-\-version +Prints version information +.SH POSIX MESSAGE QUEUE SUBCOMMANDS +The POSIX backend supports six commands: .B create\ , .B info\ @@ -19,21 +41,6 @@ is a small cli program to handle POSIX message queues. Supported commands are and .B recv . -All commands do not have to be specified fully. If the command is -clearly distinguishable from all the others, it is not needed to -complete it further. -.SH OPTIONS -.TP 8 -.B \-h, \-\-help -Prints help information -.TP 8 -.B \-v, \-\-verbose -Produce verbose output, multiple -v options increase the verbosity -(max. 3) -.TP 8 -.B \-V, \-\-version -Prints version information -.SH SUBCOMMANDS .SS create [FLAGS] [OPTIONS] \fI\fP Create a new POSIX message queue. .TP 8 @@ -202,6 +209,8 @@ Prints help information .B \-v, \-\-verbose Produce verbose output .RE +.SH SYSV IPC MESSAGE QUEUE SUBCOMMANDS +The SysV IPC backend supports no commands yet. .SH SEE ALSO mq_overview(7) .SH BUGS diff --git a/src/main.rs b/src/main.rs index bf3fb61..cc1d185 100644 --- a/src/main.rs +++ b/src/main.rs @@ -4,7 +4,15 @@ use clap::{crate_authors, crate_version, AppSettings, Clap}; mod posix; #[derive(Clap, Debug)] -enum Command { +enum Backend { + /// Handle POSIX message queues + Posix(PosixCommand), + /// Handle SysV message queues + Sysv(SysvCommand), +} + +#[derive(Clap, Debug)] +enum PosixCommand { Create(posix::Create), Info(posix::Info), List(posix::List), @@ -13,6 +21,10 @@ enum Command { Recv(posix::Recv), } +#[derive(Clap, Debug)] +enum SysvCommand { +} + #[derive(Clap, Debug)] #[clap( version = crate_version!(), @@ -25,8 +37,9 @@ struct Opts { /// Produce verbose output, multiple -v options increase the verbosity (max. 3) #[clap(short, long, global = true, parse(from_occurrences))] verbose: u32, + /// Backend to be used #[clap(subcommand)] - command: Command, + backend: Backend, } fn main() -> Result<()> { @@ -42,13 +55,17 @@ fn main() -> Result<()> { )) .init(); - match opts.command { - Command::Create(c) => c.run()?, - Command::Info(i) => i.run()?, - Command::Unlink(u) => u.run()?, - Command::Send(s) => s.run()?, - Command::Recv(r) => r.run()?, - Command::List(l) => l.run()?, + match opts.backend { + Backend::Posix(p) => match p { + PosixCommand::Create(c) => c.run()?, + PosixCommand::Info(i) => i.run()?, + PosixCommand::List(l) => l.run()?, + PosixCommand::Unlink(u) => u.run()?, + PosixCommand::Send(s) => s.run()?, + PosixCommand::Recv(r) => r.run()?, + }, + Backend::Sysv(s) => match s { + }, } Ok(())