functor_derive 0.4.3

A derive macro to derive a functor for a type.
Documentation
#![allow(unused_parens)]

use functor_derive::Functor;
use std::any::{Any, TypeId};
use std::fmt::Display;

#[test]
fn trait_bound() {
    #[derive(Functor)]
    struct StructSimple<A: Display> {
        field_1: A,
    }

    let x = StructSimple::<usize> { field_1: 42 };

    assert_eq!(
        x.fmap(|x| x as u64).type_id(),
        TypeId::of::<StructSimple<u64>>()
    );
}

#[test]
fn trait_bound_named() {
    #[derive(Functor)]
    #[functor(A as apple)]
    struct StructSimple<A: Display> {
        field_1: A,
    }

    let x = StructSimple::<usize> { field_1: 42 };

    assert_eq!(
        x.fmap_apple(|x| x as u64).type_id(),
        TypeId::of::<StructSimple<u64>>()
    );
}

#[test]
fn trait_ignored() {
    #[derive(Functor)]
    #[functor(A as apple)]
    struct StructSimple<A, B: Display> {
        field_1: A,
        field_2: B,
    }

    let x = StructSimple::<usize, usize> {
        field_1: 42,
        field_2: 43,
    };

    assert_eq!(
        x.fmap_apple(|x| x as u64).type_id(),
        TypeId::of::<StructSimple<u64, usize>>()
    );
}