events: Implement From<MessageLikeEventType | StateEventType> for RoomEventType
This commit is contained in:
parent
9cfee27722
commit
5c0a91fae0
@ -161,6 +161,37 @@ fn generate_enum(
|
|||||||
})
|
})
|
||||||
.collect::<syn::Result<_>>()?;
|
.collect::<syn::Result<_>>()?;
|
||||||
|
|
||||||
|
let from_ident_for_room = if ident == "StateEventType" || ident == "MessageLikeEventType" {
|
||||||
|
let match_arms: Vec<_> = deduped
|
||||||
|
.iter()
|
||||||
|
.map(|e| {
|
||||||
|
let v = e.to_variant()?;
|
||||||
|
let ident_var = v.match_arm(quote! { #ident });
|
||||||
|
let room_var = v.ctor(quote! { Self });
|
||||||
|
|
||||||
|
Ok(if e.has_type_fragment() {
|
||||||
|
quote! { #ident_var (_s) => #room_var (_s) }
|
||||||
|
} else {
|
||||||
|
quote! { #ident_var => #room_var }
|
||||||
|
})
|
||||||
|
})
|
||||||
|
.collect::<syn::Result<_>>()?;
|
||||||
|
|
||||||
|
Some(quote! {
|
||||||
|
#[allow(deprecated)]
|
||||||
|
impl ::std::convert::From<#ident> for RoomEventType {
|
||||||
|
fn from(s: #ident) -> Self {
|
||||||
|
match s {
|
||||||
|
#(#match_arms,)*
|
||||||
|
#ident ::_Custom(_s) => Self::_Custom(_s),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
} else {
|
||||||
|
None
|
||||||
|
};
|
||||||
|
|
||||||
Ok(quote! {
|
Ok(quote! {
|
||||||
#[doc = #enum_doc]
|
#[doc = #enum_doc]
|
||||||
///
|
///
|
||||||
@ -233,5 +264,7 @@ fn generate_enum(
|
|||||||
self.to_cow_str().serialize(serializer)
|
self.to_cow_str().serialize(serializer)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#from_ident_for_room
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user