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) } } }