8 use darling
::FromTypeParam
;
9 use syn
::{DeriveInput, GenericParam, Ident, TypeParam}
;
11 #[darling(attributes(lorem), from_ident)]
12 #[derive(FromTypeParam)]
15 bounds
: Vec
<syn
::TypeParamBound
>,
20 impl From
<Ident
> for Lorem
{
21 fn from(ident
: Ident
) -> Self {
26 bounds
: Default
::default(),
31 fn extract_type(param
: &GenericParam
) -> &TypeParam
{
33 GenericParam
::Type(ref ty
) => ty
,
34 _
=> unreachable
!("Not a type param"),
40 let di
: DeriveInput
= parse_quote
! {
43 #[lorem(bar = "x")] U: Eq + ?Sized
47 let params
= di
.generics
.params
;
50 let ty
= extract_type(¶ms
[0]);
51 let lorem
= Lorem
::from_type_param(ty
).unwrap();
52 assert_eq
!(lorem
.ident
, "T");
53 assert_eq
!(lorem
.foo
, true);
54 assert_eq
!(lorem
.bar
, None
);
58 let ty
= extract_type(¶ms
[1]);
59 let lorem
= Lorem
::from_type_param(ty
).unwrap();
60 assert_eq
!(lorem
.ident
, "U");
61 assert_eq
!(lorem
.foo
, false);
62 assert_eq
!(lorem
.bar
, Some("x".to_string()));
63 assert_eq
!(lorem
.bounds
.len(), 2);