Skip to content

Commit 718df66

Browse files
committed
Two changes: Have BorrowError & BorrowMutError derive Debug and add
more information to Display implementation for BorrowError/BorrowMutError - The BorrowError/BorrowMutError Debug implementations do not print anything differently from what the derived implementation does, so we don't need it. - This change also adds the location field of BorrowError/BorrowMutError to the the Display output when it is present, rewords the error message, and uses the Display trait for outputting the error message instead of Debug.
1 parent 68ac5ab commit 718df66

File tree

1 file changed

+18
-24
lines changed

1 file changed

+18
-24
lines changed

library/core/src/cell.rs

Lines changed: 18 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -732,54 +732,48 @@ pub struct RefCell<T: ?Sized> {
732732
/// An error returned by [`RefCell::try_borrow`].
733733
#[stable(feature = "try_borrow", since = "1.13.0")]
734734
#[non_exhaustive]
735+
#[derive(Debug)]
735736
pub struct BorrowError {
736737
#[cfg(feature = "debug_refcell")]
737738
location: &'static crate::panic::Location<'static>,
738739
}
739740

740741
#[stable(feature = "try_borrow", since = "1.13.0")]
741-
impl Debug for BorrowError {
742+
impl Display for BorrowError {
742743
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
743-
let mut builder = f.debug_struct("BorrowError");
744-
745744
#[cfg(feature = "debug_refcell")]
746-
builder.field("location", self.location);
745+
let res = write!(
746+
f,
747+
"RefCell already mutably borrowed; a previous borrow was at {}",
748+
self.location
749+
);
747750

748-
builder.finish()
749-
}
750-
}
751+
#[cfg(not(feature = "debug_refcell"))]
752+
let res = Display::fmt("RefCell already mutably borrowed", f);
751753

752-
#[stable(feature = "try_borrow", since = "1.13.0")]
753-
impl Display for BorrowError {
754-
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
755-
Display::fmt("already mutably borrowed", f)
754+
res
756755
}
757756
}
758757

759758
/// An error returned by [`RefCell::try_borrow_mut`].
760759
#[stable(feature = "try_borrow", since = "1.13.0")]
761760
#[non_exhaustive]
761+
#[derive(Debug)]
762762
pub struct BorrowMutError {
763763
#[cfg(feature = "debug_refcell")]
764764
location: &'static crate::panic::Location<'static>,
765765
}
766766

767767
#[stable(feature = "try_borrow", since = "1.13.0")]
768-
impl Debug for BorrowMutError {
768+
impl Display for BorrowMutError {
769769
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
770-
let mut builder = f.debug_struct("BorrowMutError");
771-
772770
#[cfg(feature = "debug_refcell")]
773-
builder.field("location", self.location);
771+
let res = write!(f, "RefCell already borrowed; a previous borrow was at {}", self.location);
774772

775-
builder.finish()
776-
}
777-
}
773+
#[cfg(not(feature = "debug_refcell"))]
774+
let res = Display::fmt("RefCell already borrowed", f);
778775

779-
#[stable(feature = "try_borrow", since = "1.13.0")]
780-
impl Display for BorrowMutError {
781-
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
782-
Display::fmt("already borrowed", f)
776+
res
783777
}
784778
}
785779

@@ -788,15 +782,15 @@ impl Display for BorrowMutError {
788782
#[track_caller]
789783
#[cold]
790784
fn panic_already_borrowed(err: BorrowMutError) -> ! {
791-
panic!("already borrowed: {:?}", err)
785+
panic!("{err}")
792786
}
793787

794788
// This ensures the panicking code is outlined from `borrow` for `RefCell`.
795789
#[cfg_attr(not(feature = "panic_immediate_abort"), inline(never))]
796790
#[track_caller]
797791
#[cold]
798792
fn panic_already_mutably_borrowed(err: BorrowError) -> ! {
799-
panic!("already mutably borrowed: {:?}", err)
793+
panic!("{err}")
800794
}
801795

802796
// Positive values represent the number of `Ref` active. Negative values

0 commit comments

Comments
 (0)