From fb76ee5ec2368c6f36d8a4f73234e614ee6ca0d0 Mon Sep 17 00:00:00 2001 From: "C. Morgan Hamill" Date: Thu, 19 Mar 2015 17:18:10 -0400 Subject: Add `ToStr` and `ToStaticStr` traits. Allow easy mapping of borrowed C strings to borrowed strings with appropriate lifetimes. I have some doubts about this, as I'm not 100% on how lifetimes interact with the notmuch-provided strings yet. --- src/utils.rs | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) (limited to 'src/utils.rs') diff --git a/src/utils.rs b/src/utils.rs index 77e6e5e..ad8bcac 100644 --- a/src/utils.rs +++ b/src/utils.rs @@ -1,6 +1,37 @@ +use std::{ + ffi, + str, +}; + +use libc; + pub trait NotmuchEnum { type NotmuchT; fn from_notmuch_t(notmuch_t: Self::NotmuchT) -> Self; fn to_notmuch_t(self) -> Self::NotmuchT; } + +pub trait ToStr { + fn to_str(&self) -> Result<&str, str::Utf8Error>; +} + +impl ToStr for *const libc::c_char { + fn to_str(&self) -> Result<&str, str::Utf8Error> { + str::from_utf8(unsafe { + ffi::CStr::from_ptr(*self) + }.to_bytes()) + } +} + +pub trait ToStaticStr { + fn to_static_str(&self) -> Result<&'static str, str::Utf8Error>; +} + +impl ToStaticStr for *const libc::c_char { + fn to_static_str(&self) -> Result<&'static str, str::Utf8Error> { + str::from_utf8(unsafe { + ffi::CStr::from_ptr(*self) + }.to_bytes()) + } +} -- cgit v1.2.1