diff rust/hg-cpython/src/pybytes_deref.rs @ 47954:4afd6cc447b9

rust: Make OwningDirstateMap generic and move it into hg-core This will enable using it in rhg too. The `OwningDirstateMap::new_empty` constructor is generic and accepts a value of any type that gives acces to a bytes buffer. That buffer must stay valid as long as the value hasn?t been dropped, and must keep its memory address even if the value is moved. The `StableDeref` marker trait encodes those constraints. Previously no trait was needed because the value was always of type `PyBytes` which we know satisfies those constraints. The buffer type is ereased in the struct itself through boxing and dynamic dispatch, in order to simplify other signatures that mention `OwningDirstateMap`. Differential Revision: https://phab.mercurial-scm.org/D11396
author Simon Sapin <simon.sapin@octobus.net>
date Thu, 09 Sep 2021 18:07:40 +0200
parents 8f031a274cd6
children be3b545c5cff
line wrap: on
line diff
--- a/rust/hg-cpython/src/pybytes_deref.rs	Mon Sep 06 13:39:54 2021 +0200
+++ b/rust/hg-cpython/src/pybytes_deref.rs	Thu Sep 09 18:07:40 2021 +0200
@@ -1,4 +1,5 @@
 use cpython::{PyBytes, Python};
+use stable_deref_trait::StableDeref;
 
 /// Safe abstraction over a `PyBytes` together with the `&[u8]` slice
 /// that borrows it. Implements `Deref<Target = [u8]>`.
@@ -40,6 +41,8 @@
     }
 }
 
+unsafe impl StableDeref for PyBytesDeref {}
+
 fn require_send<T: Send>() {}
 
 #[allow(unused)]