Unnamed repository; edit this file 'description' to name the repository.
-rw-r--r--lib/smol_str/src/lib.rs17
-rw-r--r--lib/smol_str/tests/test.rs8
2 files changed, 24 insertions, 1 deletions
diff --git a/lib/smol_str/src/lib.rs b/lib/smol_str/src/lib.rs
index 91dc6252cc..f09d0010c4 100644
--- a/lib/smol_str/src/lib.rs
+++ b/lib/smol_str/src/lib.rs
@@ -334,6 +334,13 @@ impl From<Box<str>> for SmolStr {
}
}
+impl From<Arc<str>> for SmolStr {
+ #[inline]
+ fn from(s: Arc<str>) -> SmolStr {
+ SmolStr(Repr::Heap(s))
+ }
+}
+
impl<'a> From<Cow<'a, str>> for SmolStr {
#[inline]
fn from(s: Cow<'a, str>) -> SmolStr {
@@ -341,6 +348,16 @@ impl<'a> From<Cow<'a, str>> for SmolStr {
}
}
+impl From<SmolStr> for Arc<str> {
+ #[inline(always)]
+ fn from(text: SmolStr) -> Self {
+ match text.0 {
+ Repr::Heap(data) => data,
+ _ => text.as_str().into(),
+ }
+ }
+}
+
impl From<SmolStr> for String {
#[inline(always)]
fn from(text: SmolStr) -> Self {
diff --git a/lib/smol_str/tests/test.rs b/lib/smol_str/tests/test.rs
index 187b39f001..1fbe7d667d 100644
--- a/lib/smol_str/tests/test.rs
+++ b/lib/smol_str/tests/test.rs
@@ -1,3 +1,5 @@
+use std::sync::Arc;
+
use proptest::{prop_assert, prop_assert_eq, proptest};
use smol_str::SmolStr;
@@ -21,7 +23,11 @@ fn assert_traits() {
fn conversions() {
let s: SmolStr = "Hello, World!".into();
let s: String = s.into();
- assert_eq!(s, "Hello, World!")
+ assert_eq!(s, "Hello, World!");
+
+ let s: SmolStr = Arc::<str>::from("Hello, World!").into();
+ let s: Arc<str> = s.into();
+ assert_eq!(s.as_ref(), "Hello, World!");
}
#[test]