fix Boxed types

This commit is contained in:
2023-09-22 03:25:30 -04:00
parent ac89ef0821
commit c06670e72b
3 changed files with 45 additions and 10 deletions

11
src/autotraits.rs Normal file
View File

@@ -0,0 +1,11 @@
#![allow(suspicious_auto_trait_impls)]
pub auto trait NotNothing {}
impl !NotNothing for super::Nothing {}
pub auto trait NotAnything {}
impl !NotAnything for super::Anything {}
impl <T> NotNothing for alloc::boxed::Box<T> {}
impl <T> NotAnything for alloc::boxed::Box<T> {}

View File

@@ -8,15 +8,14 @@ use alloc::format;
use alloc::string::String; use alloc::string::String;
use core::fmt::{Debug, Display, Formatter}; use core::fmt::{Debug, Display, Formatter};
use core::any::Any; use core::any::Any;
use crate::autotraits::{NotAnything, NotNothing};
mod autotraits;
// ============================== // ==============================
// Anything // Anything
// ============================== // ==============================
auto trait NotAnything {}
impl !NotAnything for Anything {}
pub struct Anything { pub struct Anything {
error: Box<dyn DynError>, error: Box<dyn DynError>,
@@ -118,12 +117,11 @@ impl<T: Any + NotAnything + Debug > DynError for T {
} }
} }
// ============================== // ==============================
// Anything // Nothing
// ============================== // ==============================
auto trait NotNothing {}
impl !NotNothing for Nothing {}
#[derive(Debug)] #[derive(Debug)]
pub struct Nothing; pub struct Nothing;
@@ -131,4 +129,3 @@ pub struct Nothing;
impl<T: NotNothing> From<T> for Nothing { impl<T: NotNothing> From<T> for Nothing {
fn from(_: T) -> Self { Nothing } fn from(_: T) -> Self { Nothing }
} }

View File

@@ -15,10 +15,37 @@ pub fn func_3() -> Result<(),Nothing> {
Ok(()) Ok(())
} }
fn func_4() -> Anything {
let a= std::io::Error::last_os_error();
Anything::from(a)
}
fn func_5() -> Result<(), Anything> {
fn func_5a() -> Result<(), Anything> {
fn func_5b() -> Result<(), Anything> {
fn func_5c() -> Result<(), Anything> {
fn func_5d() -> Result<(), Anything> {
Err("Hello World")?;
Ok(())
}
func_5d()?;
Ok(())
}
func_5c()?;
Ok(())
}
func_5b()?;
Ok(())
}
func_5a()?;
Ok(())
}
#[test] #[test]
pub fn test() { pub fn test() {
println!("{:?}", func_1().unwrap_err()); println!("func1: {:?}\n", func_1().unwrap_err());
println!("{:?}", func_2().unwrap_err()); println!("func2: {:?}\n", func_2().unwrap_err());
println!("{:?}", func_3().unwrap_err()); println!("func3: {:?}\n", func_3().unwrap_err());
println!("func4: {:?}\n", func_4());
println!("func5: {:?}\n", func_5().unwrap_err());
} }