Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Difference From qsu-0.0.7 To qsu-0.1.0
2024-01-16
| ||
15:59 | Crate maintenance: Update apperr to 0.2.0, and fix a bug that was uncovered by it. check-in: f22db69940 user: jan tags: trunk | |
2024-01-10
| ||
13:53 | Documentation updates and prepare for 0.1.0. check-in: 54ae1190a4 user: jan tags: qsu-0.1.0, trunk | |
2023-12-13
| ||
13:06 | Add missing comma. check-in: d9feea0cec user: jan tags: trunk | |
2023-12-12
| ||
05:22 | Use apperr crate instead of using an in-tree implementation of AppErr. check-in: 49f2ff9578 user: jan tags: trunk | |
2023-12-11
| ||
11:35 | Release maintenance. check-in: a01d88982c user: jan tags: qsu-0.0.7, trunk | |
2023-12-09
| ||
11:38 | Update dependencies. Release maintenance. check-in: 13c503aedd user: jan tags: trunk | |
Changes to Cargo.toml.
1 2 | [package] name = "qsu" | | | 1 2 3 4 5 6 7 8 9 10 | [package] name = "qsu" version = "0.1.0" edition = "2021" license = "0BSD" categories = [ "asynchronous" ] keywords = [ "service", "systemd", "winsvc" ] repository = "https://repos.qrnch.tech/pub/qsu" description = "Service subsystem wrapper." rust-version = "1.56" |
︙ | ︙ | |||
26 27 28 29 30 31 32 | systemd = ["dep:sd-notify"] rocket = ["rt", "dep:rocket", "tokio"] rt = [] tokio = ["rt", "tokio/macros", "tokio/rt-multi-thread", "tokio/signal"] wait-for-debugger = ["dep:dbgtools-win"] [dependencies] | > | | | | | | | | | | | 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 | systemd = ["dep:sd-notify"] rocket = ["rt", "dep:rocket", "tokio"] rt = [] tokio = ["rt", "tokio/macros", "tokio/rt-multi-thread", "tokio/signal"] wait-for-debugger = ["dep:dbgtools-win"] [dependencies] apperr = { version = "0.1.0" } async-trait = { version = "0.1.77" } chrono = { version = "0.4.31" } clap = { version = "4.4.14", optional = true, features = [ "derive", "env", "string", "wrap_help" ] } env_logger = { version = "0.10.1" } futures = { version = "0.3.30" } itertools = { version = "0.12.0", optional = true } killswitch = { version = "0.4.2" } log = { version = "0.4.20" } parking_lot = { version = "0.12.1" } rocket = { version = "0.5.0", optional = true } sidoc = { version = "0.1.0", optional = true } tokio = { version = "1.35.1", features = ["sync"] } time = { version = "0.3.31", features = ["macros"] } tracing = { version = "0.1.40" } [dependencies.tracing-subscriber] version = "0.3.18" default-features = false features = ["env-filter", "time", "fmt", "ansi"] [target.'cfg(target_os = "linux")'.dependencies] sd-notify = { version = "0.4.1", optional = true } [target.'cfg(unix)'.dependencies] libc = { version = "0.2.152" } nix = { version = "0.27.1", features = ["pthread", "signal"] } [target.'cfg(windows)'.dependencies] dbgtools-win = { version = "0.2.1", optional = true } eventlog = { version = "0.2.2" } registry = { version = "1.2.3" } scopeguard = { version = "1.2.0" } windows-service = { version = "0.6.0" } windows-sys = { version = "0.52.0", features = [ "Win32_Foundation", "Win32_System_Console" ] } winreg = { version = "0.52.0" } [dev-dependencies] clap = { version = "4.4.14", features = ["derive", "env", "wrap_help"] } tokio = { version = "1.35.1", features = ["time"] } [package.metadata.docs.rs] all-features = true rustdoc-args = ["--cfg", "docsrs", "--generate-link-to-definition"] [[example]] name = "hellosvc" |
︙ | ︙ |
Changes to src/argp.rs.
1 2 3 4 5 6 7 8 | //! Helpers for integrating clap into an application using _qsu_. use clap::{builder::Str, Arg, ArgAction, ArgMatches, Args, Command}; use crate::{ err::{AppErr, Error}, installer::{self, RegSvc}, lumberjack::LogLevel, | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 | //! Helpers for integrating clap into an application using _qsu_. //! //! The purpose of the argument parser is to allow a semi-standard command line //! interface for registering, deregistering and allowing services to run both //! in the foreground as well as run as actual services. To accomplish this, //! the argument parser wraps around the runtime. Specifically, this means //! that if the argument parser is used, the application does not need to //! launch the runtime explicitly; the argument parser will do this if the //! appropriate arguments have been passed to it. //! //! Assuming a service handler has been implemented already, a simple use-case //! for the argument parser in a server application involves: //! 1. Implement the [`ArgsProc`] trait on an application object, and implement //! the [`ArgsProc::build_apprt()`] method. This method should return a //! [`SrvAppRt`] object, containing the service handler. //! 2. Create an instance of the [`ArgParser`], passing in the service name and //! a reference to an [`ArgsProc`] object. //! 3. Call [`ArgParser::proc()`] to process the command line arguments. //! //! The argument parser will determine whether the caller requested to //! register/deregister the service, run the server application in foreground //! mode or as a system service. //! //! # Customization //! While the argument parser in _qsu_ is rather opinionated, it does allow //! for _some_ customization. The names of the subcommands to (de)register or //! run the server application as a service can be modified by the //! application. It is possible to register custom subcommands, and the //! command line parser specification can be modified by the [`ArgsProc`] //! callbacks. use clap::{builder::Str, Arg, ArgAction, ArgMatches, Args, Command}; use crate::{ err::{AppErr, Error}, installer::{self, RegSvc}, lumberjack::LogLevel, |
︙ | ︙ | |||
192 193 194 195 196 197 198 199 200 201 202 203 204 205 | pub fn from_cmd_match(matches: &ArgMatches) -> Self { let svcname = matches.get_one::<String>("svcname").unwrap().to_owned(); Self { svcname } } } pub enum Cmd { Root, Inst, Rm, Run } | > > | 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 | pub fn from_cmd_match(matches: &ArgMatches) -> Self { let svcname = matches.get_one::<String>("svcname").unwrap().to_owned(); Self { svcname } } } /// Used to differentiate between running without a subcommand, or the /// install/uninstall or run service subcommands. pub enum Cmd { Root, Inst, Rm, Run } |
︙ | ︙ |
Changes to src/err.rs.
|
| | > > | 1 2 3 4 5 6 7 8 9 10 | use std::{fmt, io}; pub use apperr::AppErr; #[derive(Debug)] pub enum ArgsError { #[cfg(feature = "clap")] Clap(clap::Error), Msg(String) } |
︙ | ︙ | |||
233 234 235 236 237 238 239 | #[cfg(windows)] impl From<windows_service::Error> for Error { fn from(err: windows_service::Error) -> Self { Error::SubSystem(err.to_string()) } } | < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < | 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 | #[cfg(windows)] impl From<windows_service::Error> for Error { fn from(err: windows_service::Error) -> Self { Error::SubSystem(err.to_string()) } } impl From<AppErr> for Error { /// Wrap an [`AppErr`] in an [`Error`]. fn from(err: AppErr) -> Self { Error::App(err) } } // vim: set ft=rust et sw=2 ts=2 sts=2 cinoptions=2 tw=79 : |
Changes to src/lib.rs.
1 2 | //! _qsu_ is a set of tools for integrating a server application against a //! service subsystem (such as | | | 1 2 3 4 5 6 7 8 9 10 | //! _qsu_ is a set of tools for integrating a server application against a //! service subsystem (such as //! [Windows Services](https://learn.microsoft.com/en-us/windows/win32/services/services), [systemd](https://systemd.io/), or //! [launchd](https://www.launchd.info/)). //! //! It offers a thin runtime wrapper layer with the purpose of abstracting away //! differences between service subsystems (and also provides the same //! interface when running the server application as a foreground process). //! More information about the wrapper runtime can be found in the [rt] module //! documentation. |
︙ | ︙ |
Changes to www/changelog.md.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | # Change log ## [Unreleased] ### Added ### Changed ### Removed --- ## [0.0.7] - 2023-12-09 ### Changed - Use [rocket 0.5.0](https://rocket.rs/v0.5/news/2023-11-17-version-0.5/) | > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | # Change log ## [Unreleased] ### Added ### Changed ### Removed --- ## [0.1.0] - 2024-01-10 ### Changed - Use apperr crate for `AppErr` instead of using a custom in-tree implementation. --- ## [0.0.7] - 2023-12-09 ### Changed - Use [rocket 0.5.0](https://rocket.rs/v0.5/news/2023-11-17-version-0.5/) |
︙ | ︙ |