diff options
| author | Dirk Van Haerenborgh <vhdirk@gmail.com> | 2019-10-23 12:18:44 +0200 |
|---|---|---|
| committer | Dirk Van Haerenborgh <vhdirk@gmail.com> | 2019-10-23 12:18:44 +0200 |
| commit | 6813fbb5226acfa53e30f41564bb41c93d808656 (patch) | |
| tree | 2df75b5b132b8bdb0f3224938c87cadeceeddc80 /src/message.rs | |
| parent | edf986b7888a97ad434f08c1900d5ae4356ec44a (diff) | |
| download | mail-6813fbb5226acfa53e30f41564bb41c93d808656.tar.gz | |
add scopeable version of message.freeze/thaw
Diffstat (limited to 'src/message.rs')
| -rw-r--r-- | src/message.rs | 36 |
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(); + } +} + + |
