aboutsummaryrefslogtreecommitdiffstats
path: root/src/message.rs
diff options
context:
space:
mode:
authorDirk Van Haerenborgh <vhdirk@gmail.com>2019-10-23 12:18:44 +0200
committerDirk Van Haerenborgh <vhdirk@gmail.com>2019-10-23 12:18:44 +0200
commit6813fbb5226acfa53e30f41564bb41c93d808656 (patch)
tree2df75b5b132b8bdb0f3224938c87cadeceeddc80 /src/message.rs
parentedf986b7888a97ad434f08c1900d5ae4356ec44a (diff)
downloadmail-6813fbb5226acfa53e30f41564bb41c93d808656.tar.gz
add scopeable version of message.freeze/thaw
Diffstat (limited to 'src/message.rs')
-rw-r--r--src/message.rs36
1 files changed, 36 insertions, 0 deletions
diff --git a/src/message.rs b/src/message.rs
index f5d0542..77aecc3 100644
--- a/src/message.rs
+++ b/src/message.rs
@@ -175,3 +175,39 @@ impl<'o, O> MessageExt<'o, O> for Message<'o, O> where O: MessageOwner + 'o {}
unsafe impl<'o, O> Send for Message<'o, O> where O: MessageOwner + 'o {}
unsafe impl<'o, O> Sync for Message<'o, O> where O: MessageOwner + 'o {}
+
+
+pub struct FrozenMessage<'m ,'o, O>
+where
+ O: MessageOwner + 'o
+{
+ message: ScopedSupercow<'m, Message<'o, O>>
+}
+
+
+impl<'m, 'o, O> FrozenMessage<'m, 'o, O>
+where
+ O: MessageOwner + 'o
+{
+ pub fn new<M>(message: M) -> Result<Self>
+ where
+ M: Into<ScopedSupercow<'m, Message<'o, O>>>
+ {
+ let msg = message.into();
+ msg.freeze()?;
+ Ok(FrozenMessage{
+ message: msg
+ })
+ }
+}
+
+impl<'m, 'o, O> Drop for FrozenMessage<'m, 'o, O>
+where
+ O: MessageOwner + 'o
+{
+ fn drop(&mut self) {
+ let _ = self.message.thaw();
+ }
+}
+
+