From 30480739194238c830334bd607a7ba0295fc3597 Mon Sep 17 00:00:00 2001
From: Nikolay Kim <fafhrd91@gmail.com>
Date: Mon, 13 Jan 2020 11:58:31 +0600
Subject: [PATCH] Add PartialEq<T: AsRef<str>>, AsRef<[u8]> impls

---
 string/CHANGES.md |  4 ++++
 string/Cargo.toml |  2 +-
 string/src/lib.rs | 20 ++++++++++++++++++++
 3 files changed, 25 insertions(+), 1 deletion(-)

diff --git a/string/CHANGES.md b/string/CHANGES.md
index 7d0a4b84..51bc67c2 100644
--- a/string/CHANGES.md
+++ b/string/CHANGES.md
@@ -1,5 +1,9 @@
 # Changes
 
+## [0.1.3] - 2020-01-13
+
+* Add `PartialEq<T: AsRef<str>>`, `AsRef<[u8]>` impls
+
 ## [0.1.2] - 2019-12-22
 
 * Fix `new()` method
diff --git a/string/Cargo.toml b/string/Cargo.toml
index f38c6992..861c5e43 100644
--- a/string/Cargo.toml
+++ b/string/Cargo.toml
@@ -1,6 +1,6 @@
 [package]
 name = "bytestring"
-version = "0.1.2"
+version = "0.1.3"
 authors = ["Nikolay Kim <fafhrd91@gmail.com>"]
 description = "A UTF-8 encoded string with Bytes as a storage"
 keywords = ["actix"]
diff --git a/string/src/lib.rs b/string/src/lib.rs
index d6d48ffb..b3c27b7e 100644
--- a/string/src/lib.rs
+++ b/string/src/lib.rs
@@ -43,6 +43,18 @@ impl PartialEq<str> for ByteString {
     }
 }
 
+impl<T: AsRef<str>> PartialEq<T> for ByteString {
+    fn eq(&self, other: &T) -> bool {
+        &self[..] == other.as_ref()
+    }
+}
+
+impl AsRef<[u8]> for ByteString {
+    fn as_ref(&self) -> &[u8] {
+        self.0.as_ref()
+    }
+}
+
 impl hash::Hash for ByteString {
     fn hash<H: hash::Hasher>(&self, state: &mut H) {
         (**self).hash(state);
@@ -147,6 +159,14 @@ mod test {
     use std::collections::hash_map::DefaultHasher;
     use std::hash::{Hash, Hasher};
 
+    #[test]
+    fn test_partial_eq() {
+        let s: ByteString = ByteString::from_static("test");
+        assert_eq!(s, "test");
+        assert_eq!(s, *"test");
+        assert_eq!(s, "test".to_string());
+    }
+
     #[test]
     fn test_new() {
         let _: ByteString = ByteString::new();