events: Use input visibility for generated types in EventContent derive
This commit is contained in:
parent
e58b9fcd92
commit
9c65a7dcae
@ -3,6 +3,9 @@
|
||||
Improvements:
|
||||
|
||||
- Derive `Hash` for `ReceiptType` and `ReceiptThread`
|
||||
- Update `EventContent` derive macro to emit new type definitions and type
|
||||
aliases under the same visibility as the input type (this fixes a future-
|
||||
compatibility warning when deriving `EventContent` on a non-`pub` type)
|
||||
|
||||
# 0.11.1
|
||||
|
||||
|
@ -7,4 +7,5 @@ fn ui() {
|
||||
t.pass("tests/events/ui/10-content-wildcard.rs");
|
||||
t.pass("tests/events/ui/11-content-without-relation-sanity-check.rs");
|
||||
t.compile_fail("tests/events/ui/12-no-relates_to.rs");
|
||||
t.pass("tests/events/ui/13-private-event-content-type.rs");
|
||||
}
|
||||
|
@ -0,0 +1,12 @@
|
||||
#![deny(private_in_public)]
|
||||
|
||||
use ruma_macros::EventContent;
|
||||
use serde::{Deserialize, Serialize};
|
||||
|
||||
#[derive(Clone, Debug, Deserialize, Serialize, EventContent)]
|
||||
#[ruma_event(type = "m.macro.test", kind = State, state_key_type = String)]
|
||||
struct MacroTestContent {
|
||||
url: String,
|
||||
}
|
||||
|
||||
fn main() {}
|
@ -312,6 +312,7 @@ pub fn expand_event_content(
|
||||
event_kind.filter(|kind| needs_redacted(is_custom_redacted, *kind)).map(|kind| {
|
||||
generate_redacted_event_content(
|
||||
ident,
|
||||
&input.vis,
|
||||
fields.clone(),
|
||||
&event_type,
|
||||
kind,
|
||||
@ -329,6 +330,7 @@ pub fn expand_event_content(
|
||||
.map(|_| {
|
||||
generate_possibly_redacted_event_content(
|
||||
ident,
|
||||
&input.vis,
|
||||
fields.clone(),
|
||||
&event_type,
|
||||
state_key_type.as_ref(),
|
||||
@ -340,12 +342,13 @@ pub fn expand_event_content(
|
||||
});
|
||||
|
||||
let event_content_without_relation = has_without_relation.then(|| {
|
||||
generate_event_content_without_relation(ident, fields.clone(), ruma_common)
|
||||
generate_event_content_without_relation(ident, &input.vis, fields.clone(), ruma_common)
|
||||
.unwrap_or_else(syn::Error::into_compile_error)
|
||||
});
|
||||
|
||||
let event_content_impl = generate_event_content_impl(
|
||||
ident,
|
||||
&input.vis,
|
||||
fields,
|
||||
&event_type,
|
||||
event_kind,
|
||||
@ -359,7 +362,7 @@ pub fn expand_event_content(
|
||||
let static_event_content_impl =
|
||||
generate_static_event_content_impl(ident, &event_type, ruma_common);
|
||||
let type_aliases = event_kind.map(|k| {
|
||||
generate_event_type_aliases(k, ident, &event_type.value(), ruma_common)
|
||||
generate_event_type_aliases(k, ident, &input.vis, &event_type.value(), ruma_common)
|
||||
.unwrap_or_else(syn::Error::into_compile_error)
|
||||
});
|
||||
|
||||
@ -375,6 +378,7 @@ pub fn expand_event_content(
|
||||
|
||||
fn generate_redacted_event_content<'a>(
|
||||
ident: &Ident,
|
||||
vis: &syn::Visibility,
|
||||
fields: impl Iterator<Item = &'a Field>,
|
||||
event_type: &LitStr,
|
||||
event_kind: EventKind,
|
||||
@ -430,7 +434,7 @@ fn generate_redacted_event_content<'a>(
|
||||
quote! {
|
||||
impl #redacted_ident {
|
||||
#[doc = #doc]
|
||||
pub fn new() -> Self {
|
||||
#vis fn new() -> Self {
|
||||
Self {}
|
||||
}
|
||||
}
|
||||
@ -439,6 +443,7 @@ fn generate_redacted_event_content<'a>(
|
||||
|
||||
let redacted_event_content = generate_event_content_impl(
|
||||
&redacted_ident,
|
||||
vis,
|
||||
kept_redacted_fields.iter(),
|
||||
event_type,
|
||||
Some(event_kind),
|
||||
@ -469,7 +474,7 @@ fn generate_redacted_event_content<'a>(
|
||||
#[doc = #doc]
|
||||
#[derive(Clone, Debug, #serde::Deserialize, #serde::Serialize)]
|
||||
#[cfg_attr(not(feature = "unstable-exhaustive-types"), non_exhaustive)]
|
||||
pub struct #redacted_ident {
|
||||
#vis struct #redacted_ident {
|
||||
#( #kept_redacted_fields, )*
|
||||
}
|
||||
|
||||
@ -483,6 +488,7 @@ fn generate_redacted_event_content<'a>(
|
||||
|
||||
fn generate_possibly_redacted_event_content<'a>(
|
||||
ident: &Ident,
|
||||
vis: &syn::Visibility,
|
||||
fields: impl Iterator<Item = &'a Field>,
|
||||
event_type: &LitStr,
|
||||
state_key_type: Option<&TokenStream>,
|
||||
@ -590,6 +596,7 @@ fn generate_possibly_redacted_event_content<'a>(
|
||||
if field_changed {
|
||||
let possibly_redacted_event_content = generate_event_content_impl(
|
||||
&possibly_redacted_ident,
|
||||
vis,
|
||||
possibly_redacted_fields.iter(),
|
||||
event_type,
|
||||
Some(EventKind::State),
|
||||
@ -608,7 +615,7 @@ fn generate_possibly_redacted_event_content<'a>(
|
||||
#[doc = #doc]
|
||||
#[derive(Clone, Debug, #serde::Deserialize, #serde::Serialize)]
|
||||
#[cfg_attr(not(feature = "unstable-exhaustive-types"), non_exhaustive)]
|
||||
pub struct #possibly_redacted_ident {
|
||||
#vis struct #possibly_redacted_ident {
|
||||
#( #possibly_redacted_fields, )*
|
||||
}
|
||||
|
||||
@ -619,7 +626,7 @@ fn generate_possibly_redacted_event_content<'a>(
|
||||
} else {
|
||||
Ok(quote! {
|
||||
#[doc = #doc]
|
||||
pub type #possibly_redacted_ident = #ident;
|
||||
#vis type #possibly_redacted_ident = #ident;
|
||||
|
||||
#[automatically_derived]
|
||||
impl #ruma_common::events::PossiblyRedactedStateEventContent for #ident {
|
||||
@ -631,6 +638,7 @@ fn generate_possibly_redacted_event_content<'a>(
|
||||
|
||||
fn generate_event_content_without_relation<'a>(
|
||||
ident: &Ident,
|
||||
vis: &syn::Visibility,
|
||||
fields: impl Iterator<Item = &'a Field>,
|
||||
ruma_common: &TokenStream,
|
||||
) -> syn::Result<TokenStream> {
|
||||
@ -679,11 +687,11 @@ fn generate_event_content_without_relation<'a>(
|
||||
#[doc = #type_doc]
|
||||
#[derive(Clone, Debug, #serde::Deserialize, #serde::Serialize)]
|
||||
#[cfg_attr(not(feature = "unstable-exhaustive-types"), non_exhaustive)]
|
||||
pub struct #without_relation_ident #without_relation_struct
|
||||
#vis struct #without_relation_ident #without_relation_struct
|
||||
|
||||
impl #without_relation_ident {
|
||||
#[doc = #with_relation_fn_doc]
|
||||
pub fn with_relation(self, relates_to: #relates_to_type) -> #ident {
|
||||
#vis fn with_relation(self, relates_to: #relates_to_type) -> #ident {
|
||||
#ident {
|
||||
#( #without_relation_fields: self.#without_relation_fields, )*
|
||||
relates_to,
|
||||
@ -696,6 +704,7 @@ fn generate_event_content_without_relation<'a>(
|
||||
fn generate_event_type_aliases(
|
||||
event_kind: EventKind,
|
||||
ident: &Ident,
|
||||
vis: &syn::Visibility,
|
||||
event_type: &str,
|
||||
ruma_common: &TokenStream,
|
||||
) -> syn::Result<TokenStream> {
|
||||
@ -748,7 +757,7 @@ fn generate_event_type_aliases(
|
||||
|
||||
quote! {
|
||||
#[doc = #ev_type_doc]
|
||||
pub type #ev_type = #ruma_common::events::#ev_struct<#content_struct>;
|
||||
#vis type #ev_type = #ruma_common::events::#ev_struct<#content_struct>;
|
||||
}
|
||||
})
|
||||
.collect();
|
||||
@ -775,6 +784,7 @@ impl fmt::Display for EventKindContentVariation {
|
||||
|
||||
fn generate_event_content_impl<'a>(
|
||||
ident: &Ident,
|
||||
vis: &syn::Visibility,
|
||||
mut fields: impl Iterator<Item = &'a Field>,
|
||||
event_type: &LitStr,
|
||||
event_kind: Option<EventKind>,
|
||||
@ -841,7 +851,7 @@ fn generate_event_content_impl<'a>(
|
||||
event_type_ty_decl = Some(quote! {
|
||||
/// Implementation detail, you don't need to care about this.
|
||||
#[doc(hidden)]
|
||||
pub struct #i {
|
||||
#vis struct #i {
|
||||
// Set to None for intended type, Some for a different one
|
||||
ty: ::std::option::Option<crate::PrivOwnedStr>,
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user