Mercurial > public > mercurial-scm > hg
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)]