Skip to content

Commit 5cfc0a5

Browse files
authored
ref(derive): Allow usage of ProcessValue macro in other crates (#5256)
Use an absolute crate reference `::relay_event_schema::` instead of `crate::`, to make it work in the event schema crate, expose `self` as `relay_event_schema`. Also changes `EnumSet` to a re-exported type in `::relay_event_schema` to not have to depend on it directly. Enables a test that previously was commented out but because it couldn't be compiled, which now compiles.
1 parent f079596 commit 5cfc0a5

File tree

3 files changed

+72
-70
lines changed

3 files changed

+72
-70
lines changed

relay-event-derive/src/lib.rs

Lines changed: 28 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ fn derive_process_value(mut s: synstructure::Structure<'_>) -> syn::Result<Token
6565
&__state
6666
)?;
6767

68-
crate::processor::ProcessValue::process_value(
68+
::relay_event_schema::processor::ProcessValue::process_value(
6969
#ident,
7070
__meta,
7171
__processor,
@@ -103,7 +103,7 @@ fn derive_process_value(mut s: synstructure::Structure<'_>) -> syn::Result<Token
103103
let field_attrs_tokens = field_attrs.as_tokens(&type_attrs, None);
104104

105105
(quote! {
106-
static #field_attrs_name: crate::processor::FieldAttrs = #field_attrs_tokens;
106+
static #field_attrs_name: ::relay_event_schema::processor::FieldAttrs = #field_attrs_tokens;
107107
})
108108
.to_tokens(&mut body);
109109

@@ -124,15 +124,15 @@ fn derive_process_value(mut s: synstructure::Structure<'_>) -> syn::Result<Token
124124
__state.enter_index(
125125
#index,
126126
Some(::std::borrow::Cow::Borrowed(&#field_attrs_name)),
127-
crate::processor::ValueType::for_field(#ident),
127+
::relay_event_schema::processor::ValueType::for_field(#ident),
128128
)
129129
}
130130
} else {
131131
quote! {
132132
__state.enter_borrowed(
133133
#field_name,
134134
Some(::std::borrow::Cow::Borrowed(&#field_attrs_name)),
135-
crate::processor::ValueType::for_field(#ident),
135+
::relay_event_schema::processor::ValueType::for_field(#ident),
136136
)
137137
}
138138
};
@@ -144,7 +144,7 @@ fn derive_process_value(mut s: synstructure::Structure<'_>) -> syn::Result<Token
144144
.to_tokens(&mut body);
145145
} else if field_attrs.flatten {
146146
(quote! {
147-
crate::processor::ProcessValue::process_child_values(
147+
::relay_event_schema::processor::ProcessValue::process_child_values(
148148
#ident,
149149
__processor,
150150
&#enter_state
@@ -153,7 +153,7 @@ fn derive_process_value(mut s: synstructure::Structure<'_>) -> syn::Result<Token
153153
.to_tokens(&mut body);
154154
} else {
155155
(quote! {
156-
crate::processor::process_value(#ident, __processor, &#enter_state)?;
156+
::relay_event_schema::processor::process_value(#ident, __processor, &#enter_state)?;
157157
})
158158
.to_tokens(&mut body);
159159
}
@@ -175,22 +175,22 @@ fn derive_process_value(mut s: synstructure::Structure<'_>) -> syn::Result<Token
175175
// directly, but we do actually use the macro
176176
#[allow(deprecated)]
177177
{
178-
enumset::enum_set!( #(crate::processor::ValueType::#value_names)|* )
178+
enumset::enum_set!( #(::relay_event_schema::processor::ValueType::#value_names)|* )
179179
}
180180
}
181181
} else if is_newtype(variant) {
182182
let bi = &variant.bindings()[0];
183183
let ident = &bi.binding;
184-
quote!(crate::processor::ProcessValue::value_type(#ident))
184+
quote!(::relay_event_schema::processor::ProcessValue::value_type(#ident))
185185
} else {
186-
quote!(enumset::EnumSet::empty())
186+
quote!(::relay_event_schema::processor::EnumSet::empty())
187187
}
188188
});
189189

190190
Ok(s.gen_impl(quote! {
191191
#[automatically_derived]
192-
gen impl crate::processor::ProcessValue for @Self {
193-
fn value_type(&self) -> enumset::EnumSet<crate::processor::ValueType> {
192+
gen impl ::relay_event_schema::processor::ProcessValue for @Self {
193+
fn value_type(&self) -> ::relay_event_schema::processor::EnumSet<::relay_event_schema::processor::ValueType> {
194194
match *self {
195195
#value_type_arms
196196
}
@@ -200,10 +200,10 @@ fn derive_process_value(mut s: synstructure::Structure<'_>) -> syn::Result<Token
200200
&mut self,
201201
__meta: &mut relay_protocol::Meta,
202202
__processor: &mut P,
203-
__state: &crate::processor::ProcessingState<'_>,
204-
) -> crate::processor::ProcessingResult
203+
__state: &::relay_event_schema::processor::ProcessingState<'_>,
204+
) -> ::relay_event_schema::processor::ProcessingResult
205205
where
206-
P: crate::processor::Processor,
206+
P: ::relay_event_schema::processor::Processor,
207207
{
208208
#process_func_call_tokens;
209209
match *self {
@@ -217,10 +217,10 @@ fn derive_process_value(mut s: synstructure::Structure<'_>) -> syn::Result<Token
217217
fn process_child_values<P>(
218218
&mut self,
219219
__processor: &mut P,
220-
__state: &crate::processor::ProcessingState<'_>
221-
) -> crate::processor::ProcessingResult
220+
__state: &::relay_event_schema::processor::ProcessingState<'_>
221+
) -> ::relay_event_schema::processor::ProcessingResult
222222
where
223-
P: crate::processor::Processor,
223+
P: ::relay_event_schema::processor::Processor,
224224
{
225225
match *self {
226226
#process_child_values_arms
@@ -311,16 +311,16 @@ enum Pii {
311311
impl Pii {
312312
fn as_tokens(&self) -> TokenStream {
313313
match self {
314-
Pii::True => quote!(crate::processor::PiiMode::Static(
315-
crate::processor::Pii::True
314+
Pii::True => quote!(::relay_event_schema::processor::PiiMode::Static(
315+
::relay_event_schema::processor::Pii::True
316316
)),
317-
Pii::False => quote!(crate::processor::PiiMode::Static(
318-
crate::processor::Pii::False
317+
Pii::False => quote!(::relay_event_schema::processor::PiiMode::Static(
318+
::relay_event_schema::processor::Pii::False
319319
)),
320-
Pii::Maybe => quote!(crate::processor::PiiMode::Static(
321-
crate::processor::Pii::Maybe
320+
Pii::Maybe => quote!(::relay_event_schema::processor::PiiMode::Static(
321+
::relay_event_schema::processor::Pii::Maybe
322322
)),
323-
Pii::Dynamic(fun) => quote!(crate::processor::PiiMode::Dynamic(#fun)),
323+
Pii::Dynamic(fun) => quote!(::relay_event_schema::processor::PiiMode::Dynamic(#fun)),
324324
}
325325
}
326326
}
@@ -386,8 +386,8 @@ impl FieldAttrs {
386386
} else if let Some(ref parent_attrs) = inherit_from_field_attrs {
387387
quote!(#parent_attrs.pii)
388388
} else {
389-
quote!(crate::processor::PiiMode::Static(
390-
crate::processor::Pii::False
389+
quote!(::relay_event_schema::processor::PiiMode::Static(
390+
::relay_event_schema::processor::Pii::False
391391
))
392392
};
393393

@@ -442,7 +442,7 @@ impl FieldAttrs {
442442
};
443443

444444
quote!({
445-
crate::processor::FieldAttrs {
445+
::relay_event_schema::processor::FieldAttrs {
446446
name: Some(#field_name),
447447
required: #required,
448448
nonempty: #nonempty,
@@ -588,7 +588,7 @@ fn parse_character_set(ident: &Ident, value: &str) -> TokenStream {
588588
let is_negative = ident == "deny_chars";
589589

590590
quote! {
591-
crate::processor::CharacterSet {
591+
::relay_event_schema::processor::CharacterSet {
592592
char_is_valid: |c: char| -> bool {
593593
match c {
594594
#((#ranges) => !#is_negative,)*

relay-event-normalization/src/schema.rs

Lines changed: 42 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -125,52 +125,52 @@ mod tests {
125125
CError, ClientSdkInfo, Event, MachException, Mechanism, MechanismMeta, PosixSignal,
126126
RawStacktrace, User,
127127
};
128-
use relay_protocol::Annotated;
128+
use relay_protocol::{Annotated, FromValue, IntoValue};
129129
use similar_asserts::assert_eq;
130130

131131
use super::*;
132132

133-
// TODO(ja): Enable this test
134-
// fn assert_nonempty_base<T>(expected_error: &str)
135-
// where
136-
// T: Default + PartialEq + ProcessValue,
137-
// {
138-
// #[derive(Clone, Debug, Default, PartialEq, Empty, FromValue, IntoValue, ProcessValue)]
139-
// struct Foo<T> {
140-
// #[metastructure(required = "true", nonempty = "true")]
141-
// bar: Annotated<T>,
142-
// bar2: Annotated<T>,
143-
// }
144-
145-
// let mut wrapper = Annotated::new(Foo {
146-
// bar: Annotated::new(T::default()),
147-
// bar2: Annotated::new(T::default()),
148-
// });
149-
// process_value(&mut wrapper, &mut SchemaProcessor, ProcessingState::root()).unwrap();
150-
151-
// assert_eq!(
152-
// wrapper,
153-
// Annotated::new(Foo {
154-
// bar: Annotated::from_error(Error::expected(expected_error), None),
155-
// bar2: Annotated::new(T::default())
156-
// })
157-
// );
158-
// }
159-
160-
// #[test]
161-
// fn test_nonempty_string() {
162-
// assert_nonempty_base::<String>("a non-empty string");
163-
// }
164-
165-
// #[test]
166-
// fn test_nonempty_array() {
167-
// assert_nonempty_base::<Array<u64>>("a non-empty value");
168-
// }
169-
170-
// #[test]
171-
// fn test_nonempty_object() {
172-
// assert_nonempty_base::<Object<u64>>("a non-empty value");
173-
// }
133+
fn assert_nonempty_base<T>(expected_error: &str)
134+
where
135+
T: Default + PartialEq + ProcessValue,
136+
{
137+
#[derive(Clone, Debug, Default, PartialEq, Empty, FromValue, IntoValue, ProcessValue)]
138+
struct Foo<T> {
139+
#[metastructure(required = true, nonempty = true)]
140+
bar: Annotated<T>,
141+
bar2: Annotated<T>,
142+
}
143+
144+
let mut wrapper = Annotated::new(Foo {
145+
bar: Annotated::new(T::default()),
146+
bar2: Annotated::new(T::default()),
147+
});
148+
processor::process_value(&mut wrapper, &mut SchemaProcessor, ProcessingState::root())
149+
.unwrap();
150+
151+
assert_eq!(
152+
wrapper,
153+
Annotated::new(Foo {
154+
bar: Annotated::from_error(Error::expected(expected_error), None),
155+
bar2: Annotated::new(T::default())
156+
})
157+
);
158+
}
159+
160+
#[test]
161+
fn test_nonempty_string() {
162+
assert_nonempty_base::<String>("a non-empty string");
163+
}
164+
165+
#[test]
166+
fn test_nonempty_array() {
167+
assert_nonempty_base::<Array<u64>>("a non-empty value");
168+
}
169+
170+
#[test]
171+
fn test_nonempty_object() {
172+
assert_nonempty_base::<Object<u64>>("a non-empty value");
173+
}
174174

175175
#[test]
176176
fn test_invalid_email() {

relay-event-schema/src/lib.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,5 +5,7 @@
55
html_favicon_url = "https://raw.githubusercontent.com/getsentry/relay/master/artwork/relay-icon.png"
66
)]
77

8+
extern crate self as relay_event_schema;
9+
810
pub mod processor;
911
pub mod protocol;

0 commit comments

Comments
 (0)