osom_lib 0.1.9

Top-level crate that re-exports the osom_lib workspace crates.
Documentation
use core::convert::Infallible;

use osom_lib::try_clone::{
    TryClone as _,
    macros::{try_clone, try_clone_with_clone},
};

#[derive(Debug)]
pub struct MyError;

impl From<Infallible> for MyError {
    fn from(_: Infallible) -> Self {
        Self
    }
}

#[try_clone(MyError)]
#[derive(Debug, PartialEq, Eq)]
pub enum MyEnum {
    A,
    B(u8),
    C(i32, bool),
}

#[try_clone_with_clone(MyError)]
#[derive(Debug, PartialEq, Eq)]
pub enum MyEnumWithClone {
    A,
    B(u8),
    C(i32, bool),
}

#[try_clone(MyError)]
#[derive(Debug, PartialEq, Eq)]
pub struct MyStruct {
    pub a: u8,
    pub b: i32,
    pub c: bool,
}

#[try_clone_with_clone(MyError)]
#[derive(Debug, PartialEq, Eq)]
pub struct MyStructWithClone {
    pub a: u8,
    pub b: i32,
    pub c: bool,
}

#[try_clone(MyError)]
pub struct MyStructEmpty;

#[try_clone(MyError)]
pub struct MyStructTuple(u8, i32, bool);

#[test]
fn test_my_enum() {
    let enum1 = MyEnum::A;
    let enum2 = enum1.try_clone().unwrap();
    assert_eq!(enum1, enum2);

    let enum1 = MyEnum::B(1);
    let enum2 = enum1.try_clone().unwrap();
    assert_eq!(enum1, enum2);

    let enum1 = MyEnum::C(2, true);
    let enum2 = enum1.try_clone().unwrap();
    assert_eq!(enum1, enum2);
}

#[test]
fn test_my_enum_with_clone() {
    let enum1 = MyEnumWithClone::A;
    let enum2 = enum1.try_clone().unwrap();
    let enum3 = enum1.clone();
    assert_eq!(enum1, enum2);
    assert_eq!(enum1, enum3);

    let enum1 = MyEnumWithClone::B(1);
    let enum2 = enum1.try_clone().unwrap();
    let enum3 = enum1.clone();
    assert_eq!(enum1, enum2);
    assert_eq!(enum1, enum3);

    let enum1 = MyEnumWithClone::C(2, true);
    let enum2 = enum1.try_clone().unwrap();
    let enum3 = enum1.clone();
    assert_eq!(enum1, enum2);
    assert_eq!(enum1, enum3);
}