summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorbors[bot] <26634292+bors[bot]@users.noreply.github.com>2019-10-29 14:47:49 +0000
committerGitHub <noreply@github.com>2019-10-29 14:47:49 +0000
commit7a5248c70a4ad0ef1ff1b385a7674b38403386df (patch)
tree327e4acd06ba2ead6ee3f1bf972430cb250abdf0
parent2e52ce8153154650dcf1d4ae8e7738b4f24a34e3 (diff)
parentbacb85ecd958bbf4ca013d900dd33562e7102f56 (diff)
downloadnix-7a5248c70a4ad0ef1ff1b385a7674b38403386df.zip
Merge #1138
1138: Add Signal::as_str() to get representation as static string r=asomers a=MikailBag # Motivation Currently string representation of signal can be obtained with AsRef<str> impl. But it has downside: returned string's lifetime is bound to lifetime of signal, so &str must be converted to String. This allocation is avoidable, because as_ref() only returns static strings. To fix this problem, my PR adds Signal::as_str() method, which returns static string. Co-authored-by: Mikail Bagishov <bagishov.mikail@yandex.ru>
-rw-r--r--CHANGELOG.md2
-rw-r--r--src/sys/signal.rs17
2 files changed, 16 insertions, 3 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 62953531..11d7d3b4 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -5,6 +5,8 @@ This project adheres to [Semantic Versioning](http://semver.org/).
## [Unreleased] - ReleaseDate
### Added
+- Added `Signal::as_str()`: returns signal name as `&'static str`
+ (#[1138](https://github.com/nix-rust/nix/pull/1138))
- Added `posix_fallocate`.
([#1105](https://github.com/nix-rust/nix/pull/1105))
diff --git a/src/sys/signal.rs b/src/sys/signal.rs
index 1224888e..b746b3d4 100644
--- a/src/sys/signal.rs
+++ b/src/sys/signal.rs
@@ -112,9 +112,14 @@ impl FromStr for Signal {
}
}
-impl AsRef<str> for Signal {
- fn as_ref(&self) -> &str {
- match *self {
+impl Signal {
+ /// Returns name of signal.
+ ///
+ /// This function is equivalent to `<Signal as AsRef<str>>::as_ref()`,
+ /// with difference that returned string is `'static`
+ /// and not bound to `self`'s lifetime.
+ pub fn as_str(self) -> &'static str {
+ match self {
Signal::SIGHUP => "SIGHUP",
Signal::SIGINT => "SIGINT",
Signal::SIGQUIT => "SIGQUIT",
@@ -157,6 +162,12 @@ impl AsRef<str> for Signal {
}
}
+impl AsRef<str> for Signal {
+ fn as_ref(&self) -> &str {
+ self.as_str()
+ }
+}
+
impl fmt::Display for Signal {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
f.write_str(self.as_ref())