From 3706a6b9780e30c2f07a4ebdf06d4e8188ad7127 Mon Sep 17 00:00:00 2001
From: Mathieu Lala <56253288+Mathieu-Lala@users.noreply.github.com>
Date: Tue, 9 Jul 2024 12:46:41 +0200
Subject: [PATCH] fix: subtypings
---
.github/workflows/ci.yml | 6 ++++--
src/callback.rs | 9 +++++----
src/channel_bindings.rs | 2 +-
src/context.rs | 2 +-
src/session.rs | 14 +++++++-------
src/validate.rs | 4 ++--
6 files changed, 20 insertions(+), 17 deletions(-)
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index b7472b8..9bc5507 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -116,8 +116,10 @@ jobs:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- - name: Install cargo-spellcheck
- uses: taiki-e/install-action@v2
+ - uses: dtolnay/rust-toolchain@master
+ with:
+ toolchain: ${{ env.rust_min }}
+ - uses: taiki-e/install-action@v2
with:
tool: cargo-spellcheck
- run: cargo spellcheck --code 1
diff --git a/src/callback.rs b/src/callback.rs
index a5d2008..87297a0 100644
--- a/src/callback.rs
+++ b/src/callback.rs
@@ -294,12 +294,13 @@ impl<'a> Request<'a> {
unsafe { &mut *(opt as &mut dyn Erased as *mut dyn Erased as *mut Self) }
}
- pub(crate) fn new_action<'t, 'p, P: Property<'p>>(
- val: &'t mut Tagged<'p, Action
>,
- ) -> &'t mut Self {
- unsafe { &mut *(val as &mut dyn Erased as *mut dyn Erased as *mut Self) }
+ pub(crate) fn new_action<'p, P: Property<'p>>(
+ val: &'a mut Tagged<'p, Action
>,
+ ) -> &'a mut Request<'p> {
+ unsafe { &mut *(val as &mut dyn Erased as *mut dyn Erased as *mut Request) }
}
}
+
impl<'a> Request<'a> {
fn is_satisfy>(&self) -> bool {
self.0.is::>>()
diff --git a/src/channel_bindings.rs b/src/channel_bindings.rs
index 9be801d..6e89c7c 100644
--- a/src/channel_bindings.rs
+++ b/src/channel_bindings.rs
@@ -64,7 +64,6 @@ mod tests {
.unwrap();
let mut tagged_option = Tagged::<'_, NoValidation>(None);
-
let validate = Validate::new::(&mut tagged_option);
session
.get_cb_data("this-cb", validate, &mut |cb| {
@@ -74,6 +73,7 @@ mod tests {
})
.unwrap();
+ let mut tagged_option = Tagged::<'_, NoValidation>(None);
let validate = Validate::new::(&mut tagged_option);
let e = session
.get_cb_data("blahblubb", validate, &mut |_cb| {
diff --git a/src/context.rs b/src/context.rs
index 8c953fb..fc93c0c 100644
--- a/src/context.rs
+++ b/src/context.rs
@@ -116,7 +116,7 @@ impl<'a> Demand<'a> {
}
}
-pub fn build_context<'a>(provider: &'a dyn Provider) -> &'a Context<'a> {
+pub fn build_context<'a, 'b>(provider: &'a (dyn Provider<'b> + 'a)) -> &'a Context<'b> {
unsafe { &*(provider as *const dyn Provider as *const Context) }
}
diff --git a/src/session.rs b/src/session.rs
index dd62186..e730042 100644
--- a/src/session.rs
+++ b/src/session.rs
@@ -245,11 +245,11 @@ mod provider {
}
}
- impl<'a> MechanismData<'a> {
+ impl<'a, 'b> MechanismData<'a, 'b> {
fn new(
callback: &'a dyn SessionCallback,
chanbind_cb: &'a dyn ChannelBindingCallback,
- validator: &'a mut Validate<'a>,
+ validator: &'a mut Validate<'b>,
mechanism_desc: Mechanism,
side: Side,
) -> Self {
@@ -302,14 +302,14 @@ mod provider {
#[cfg(any(feature = "provider", feature = "testutils", test))]
pub use provider::Session;
-pub struct MechanismData<'a> {
+pub struct MechanismData<'a, 'b> {
callback: &'a dyn SessionCallback,
chanbind_cb: &'a dyn ChannelBindingCallback,
- validator: &'a mut Validate<'a>,
+ validator: &'a mut Validate<'b>,
session_data: SessionData,
}
-impl MechanismData<'_> {
+impl MechanismData<'_, '_> {
pub fn validate(&mut self, provider: &dyn Provider) -> Result<(), ValidationError> {
let context = build_context(provider);
self.callback
@@ -336,7 +336,7 @@ impl MechanismData<'_> {
where
T: Property<'a>,
{
- let mut tagged = Tagged::<'a, Action>(Some(value));
+ let mut tagged = Tagged::<'_, Action>(Some(value));
self.callback(provider, Request::new_action::(&mut tagged))?;
if tagged.is_some() {
Err(SessionError::CallbackError(CallbackError::NoCallback(
@@ -408,7 +408,7 @@ impl MechanismData<'_> {
}
}
-impl fmt::Debug for MechanismData<'_> {
+impl fmt::Debug for MechanismData<'_, '_> {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
f.debug_struct("MechanismData").finish()
}
diff --git a/src/validate.rs b/src/validate.rs
index d78f11b..b9fc03b 100644
--- a/src/validate.rs
+++ b/src/validate.rs
@@ -129,8 +129,8 @@ impl Validation for NoValidation {
/// mechanism.
pub struct Validate<'a>(dyn Erased<'a> + 'a);
#[cfg(any(test, feature = "provider", feature = "testutils"))]
-impl Validate<'_> {
- pub(crate) fn new<'opt, V: Validation>(opt: &'opt mut Tagged<'_, V>) -> &'opt mut Self {
+impl<'a> Validate<'a> {
+ pub(crate) fn new<'opt, V: Validation>(opt: &'opt mut Tagged<'a, V>) -> &'opt mut Self {
unsafe { &mut *(opt as &mut dyn Erased as *mut dyn Erased as *mut Self) }
}
}