diff --git a/src/lib.rs b/src/lib.rs index 6556c97..3f9d57a 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -242,11 +242,11 @@ pub struct Term(imp::Term); impl Term { pub fn intern(string: &str) -> Term { - Term(string.into()) + Term(imp::Term::intern(string)) } pub fn as_str(&self) -> &str { - &self.0 + self.0.as_str() } } diff --git a/src/stable.rs b/src/stable.rs index 0a439ed..8bf3a9f 100644 --- a/src/stable.rs +++ b/src/stable.rs @@ -7,7 +7,6 @@ use std::collections::HashMap; use std::fmt; use std::iter; use std::marker::PhantomData; -use std::ops; use std::rc::Rc; use std::str::FromStr; use std::vec; @@ -398,19 +397,15 @@ pub struct Term { thread_local!(static SYMBOLS: RefCell = RefCell::new(Interner::new())); -impl<'a> From<&'a str> for Term { - fn from(string: &'a str) -> Term { +impl Term { + pub fn intern(string: &str) -> Term { Term { intern: SYMBOLS.with(|s| s.borrow_mut().intern(string)), not_send_sync: PhantomData, } } -} -impl ops::Deref for Term { - type Target = str; - - fn deref(&self) -> &str { + pub fn as_str(&self) -> &str { SYMBOLS.with(|interner| { let interner = interner.borrow(); let s = interner.get(self.intern); @@ -423,7 +418,7 @@ impl ops::Deref for Term { impl fmt::Debug for Term { fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { - f.debug_tuple("Term").field(&&**self).finish() + f.debug_tuple("Term").field(&self.as_str()).finish() } } diff --git a/src/unstable.rs b/src/unstable.rs index 1c4b834..b6f5670 100644 --- a/src/unstable.rs +++ b/src/unstable.rs @@ -1,7 +1,6 @@ use std::ascii; use std::fmt; use std::iter; -use std::ops; use std::str::FromStr; use proc_macro; @@ -269,16 +268,12 @@ impl fmt::Debug for Span { #[derive(Copy, Clone)] pub struct Term(proc_macro::Term); -impl<'a> From<&'a str> for Term { - fn from(string: &'a str) -> Term { +impl Term { + pub fn intern(string: &str) -> Term { Term(proc_macro::Term::intern(string)) } -} -impl ops::Deref for Term { - type Target = str; - - fn deref(&self) -> &str { + pub fn as_str(&self) -> &str { self.0.as_str() } }