#! [cfg_attr(not(feature = "std" ), no_std)]
#! [allow(dead_code)]
#[ cfg(not(feature = "std" ))]
extern crate alloc;
#[ cfg(not(feature = "std" ))]
use alloc::string::ToString;
use derive_more::TryUnwrap;
#[ derive(TryUnwrap)]
enum Either<TLeft, TRight> {
Left(TLeft),
Right(TRight),
}
#[ derive(TryUnwrap)]
#[ derive(Debug, PartialEq)]
#[ try_unwrap(ref , ref_mut)]
enum Maybe<T> {
Nothing,
Just(T),
}
#[ derive(TryUnwrap)]
enum Color {
RGB(u8, u8, u8),
CMYK(u8, u8, u8, u8),
}
/// With lifetime
#[ derive(TryUnwrap)]
enum Nonsense<'a, T> {
Ref (&'a T),
NoRef,
#[ try_unwrap(ignore)]
NoRefIgnored,
}
#[ derive(TryUnwrap)]
enum WithConstraints<T>
where
T: Copy,
{
One(T),
Two,
}
#[ derive(TryUnwrap)]
enum KitchenSink<'a, ' b, T1: Copy, T2: Clone>
where
T2: Into<T1> + 'b,
{
Left(&'a T1),
Right(&'b T2),
OwnBoth(T1, T2),
Empty,
NeverMind(),
NothingToSeeHere(),
}
/// Single variant enum
#[ derive(TryUnwrap)]
enum Single {
Value(i32),
}
#[ derive(TryUnwrap)]
#[ derive(Debug, PartialEq)]
#[ try_unwrap(ref , ref_mut)]
enum Tuple<T> {
None,
Single(T),
Double(T, T),
Triple(T, T, T),
}
#[ test]
pub fn test_try_unwrap() {
assert_eq!(Maybe::<()>::Nothing.try_unwrap_nothing().ok(), Some(()));
assert_eq!((&Maybe::Just(1 )).try_unwrap_just_ref().ok(), Some(&tyle='color: green'>1 ));
assert_eq!(
(&mut Maybe::Just(42 )).try_unwrap_just_mut().ok(),
Some(&mut 42 )
);
assert_eq!(
Maybe::<()>::Nothing.try_unwrap_just().map_err(|e| e.input),
Err(Maybe::<()>::Nothing),
);
assert_eq!(
(&Maybe::Just(1 ))
.try_unwrap_nothing_ref()
.map_err(|e| e.input),
Err(&Maybe::Just(1 )),
);
assert_eq!(
(&mut Maybe::Just(42 ))
.try_unwrap_nothing_mut()
.map_err(|e| e.to_string()),
Err(
"Attempt to call `Maybe::try_unwrap_nothing_mut()` on a `Maybe::Just` value"
.to_string()
),
);
}
#[ test]
pub fn test_try_unwrap_mut_1() {
let mut value = Tuple::Double(1 , 12 );
if let Ok((a, b)) = value.try_unwrap_double_mut() {
*a = 9 ;
*b = 10 ;
}
assert_eq!(value, Tuple::Double(9 , 10 ));
}
#[ test]
pub fn test_try_unwrap_mut_2() {
let mut value = Tuple::Single(128 );
if let Ok(x) = value.try_unwrap_single_mut() {
*x *= 2 ;
}
if let Err(e) = value.try_unwrap_none_mut() {
let x = *e.input.try_unwrap_single_ref().unwrap_or(&0 );
*e.input = Tuple::Double(x - 1 , x);
}
assert_eq!(value, Tuple::Double(255 , 256 ));
}
Messung V0.5 in Prozent C=82 H=97 G=89
¤ Dauer der Verarbeitung: 0.10 Sekunden
(vorverarbeitet am 2026-06-23)
¤
*© Formatika GbR, Deutschland