Tracking Issue for error_generic_member_access (original) (raw)

Feature gate: #![feature(error_generic_member_access)]

This is a tracking issue for the generic member access API on the error trait, which generalizes the pattern of fn source(&self) -> Option<&dyn Error> and fn backtrace(&self) -> Option<&Backtrace> into fn request_ref::<T>(&self) -> Option<&T>

Public API

// std::error

pub trait Error: Debug + Display { // existing API unchanged

fn provide<'a>(&'a self, req: &mut Request<'a>) {}

}

pub struct Request<'a> { .. }

impl<'a> Request<'a> { pub fn provide_value(&mut self, value: T) -> &mut Request<'a> where T: 'static;

pub fn provide_value_with<T>(
    &mut self,
    fulfil: impl FnOnce() -> T,
) -> &mut Request<'a>
where
    T: 'static;

pub fn provide_ref<T>(&mut self, value: &'a T) -> &mut Request<'a>
where
    T: 'static + ?Sized;

pub fn provide_ref_with<T>(
    &mut self,
    fulfil: impl FnOnce() -> &'a T,
) -> &mut Request<'a>
where
    T: 'static + ?Sized;

pub fn would_be_satisfied_by_value_of<T>(&self) -> bool
where
    T: 'static;

pub fn would_be_satisfied_by_ref_of<T>(&self) -> bool
where
    T: 'static + ?Sized;

}

pub fn request_ref<'a, T: ?Sized + 'static>(err: &'a (impl Error + ?Sized)) -> Option<&'a T>;

pub fn request_value<T: 'static>(err: &(impl Error + ?Sized)) -> Option;

Steps / History

Now tracked by @waynr in #99301 (comment)

Unresolved Questions