@@ -6,7 +6,6 @@ use crate::event::attributes::DataAttributesWriter;
6
6
use chrono:: { DateTime , Utc } ;
7
7
use delegate_attr:: delegate;
8
8
use std:: collections:: HashMap ;
9
- use std:: convert:: TryFrom ;
10
9
use url:: Url ;
11
10
12
11
/// Data structure that represents a [CloudEvent](https://github.com/cloudevents/spec/blob/master/spec.md).
@@ -16,9 +15,11 @@ use url::Url;
16
15
///
17
16
/// You can build events using [`super::EventBuilder`]
18
17
/// ```
19
- /// use cloudevents::Event ;
20
- /// use cloudevents::event::AttributesReader ;
18
+ /// use cloudevents::* ;
19
+ /// use std::convert::TryInto ;
21
20
///
21
+ /// # use std::error::Error;
22
+ /// # fn main() -> Result<(), Box<dyn Error>> {
22
23
/// // Create an event using the Default trait
23
24
/// let mut e = Event::default();
24
25
/// e.write_data(
@@ -27,11 +28,16 @@ use url::Url;
27
28
/// );
28
29
///
29
30
/// // Print the event id
30
- /// println!("Event id: {}", e.get_id ());
31
+ /// println!("Event id: {}", e.id ());
31
32
///
32
33
/// // Get the event data
33
- /// let data: serde_json::Value = e.try_get_data().unwrap().unwrap();
34
- /// println!("Event data: {}", data)
34
+ /// let data: Option<Data> = e.data().cloned();
35
+ /// match data {
36
+ /// Some(d) => println!("{}", d),
37
+ /// None => println!("No event data")
38
+ /// }
39
+ /// # Ok(())
40
+ /// # }
35
41
/// ```
36
42
#[ derive( PartialEq , Debug , Clone ) ]
37
43
pub struct Event {
@@ -42,14 +48,14 @@ pub struct Event {
42
48
43
49
#[ delegate( self . attributes) ]
44
50
impl AttributesReader for Event {
45
- fn get_id ( & self ) -> & str ;
46
- fn get_source ( & self ) -> & Url ;
47
- fn get_specversion ( & self ) -> SpecVersion ;
48
- fn get_type ( & self ) -> & str ;
49
- fn get_datacontenttype ( & self ) -> Option < & str > ;
50
- fn get_dataschema ( & self ) -> Option < & Url > ;
51
- fn get_subject ( & self ) -> Option < & str > ;
52
- fn get_time ( & self ) -> Option < & DateTime < Utc > > ;
51
+ fn id ( & self ) -> & str ;
52
+ fn source ( & self ) -> & Url ;
53
+ fn specversion ( & self ) -> SpecVersion ;
54
+ fn ty ( & self ) -> & str ;
55
+ fn datacontenttype ( & self ) -> Option < & str > ;
56
+ fn dataschema ( & self ) -> Option < & Url > ;
57
+ fn subject ( & self ) -> Option < & str > ;
58
+ fn time ( & self ) -> Option < & DateTime < Utc > > ;
53
59
}
54
60
55
61
#[ delegate( self . attributes) ]
@@ -126,6 +132,11 @@ impl Event {
126
132
self . data = Some ( data. into ( ) ) ;
127
133
}
128
134
135
+ /// Get `data` from this `Event`
136
+ pub fn data ( & self ) -> Option < & Data > {
137
+ self . data . as_ref ( )
138
+ }
139
+
129
140
/// Write `data` into this `Event` with the specified `datacontenttype` and `dataschema`.
130
141
///
131
142
/// ```
@@ -152,34 +163,8 @@ impl Event {
152
163
self . data = Some ( data. into ( ) ) ;
153
164
}
154
165
155
- /// Get `data` from this `Event`
156
- pub fn get_data < T : Sized + From < Data > > ( & self ) -> Option < T > {
157
- match self . data . as_ref ( ) {
158
- Some ( d) => Some ( T :: from ( d. clone ( ) ) ) ,
159
- None => None ,
160
- }
161
- }
162
-
163
- /// Try to get `data` from this `Event`
164
- pub fn try_get_data < T : Sized + TryFrom < Data > > ( & self ) -> Result < Option < T > , T :: Error > {
165
- match self . data . as_ref ( ) {
166
- Some ( d) => Some ( T :: try_from ( d. clone ( ) ) ) ,
167
- None => None ,
168
- }
169
- . transpose ( )
170
- }
171
-
172
- /// Transform this `Event` into the content of `data`
173
- pub fn into_data < T : Sized + TryFrom < Data > > ( self ) -> Result < Option < T > , T :: Error > {
174
- match self . data {
175
- Some ( d) => Some ( T :: try_from ( d) ) ,
176
- None => None ,
177
- }
178
- . transpose ( )
179
- }
180
-
181
166
/// Get the [extension](https://github.com/cloudevents/spec/blob/master/spec.md#extension-context-attributes) named `extension_name`
182
- pub fn get_extension ( & self , extension_name : & str ) -> Option < & ExtensionValue > {
167
+ pub fn extension ( & self , extension_name : & str ) -> Option < & ExtensionValue > {
183
168
self . extensions . get ( extension_name)
184
169
}
185
170
@@ -206,28 +191,6 @@ impl Event {
206
191
mod tests {
207
192
use super :: * ;
208
193
209
- #[ test]
210
- fn try_get_data_json ( ) {
211
- let expected_data = serde_json:: json!( {
212
- "hello" : "world"
213
- } ) ;
214
-
215
- let mut e = Event :: default ( ) ;
216
- e. write_data_with_schema (
217
- "application/json" ,
218
- Url :: parse ( "http://localhost:8080/schema" ) . unwrap ( ) ,
219
- expected_data. clone ( ) ,
220
- ) ;
221
-
222
- let data: serde_json:: Value = e. try_get_data ( ) . unwrap ( ) . unwrap ( ) ;
223
- assert_eq ! ( expected_data, data) ;
224
- assert_eq ! ( "application/json" , e. get_datacontenttype( ) . unwrap( ) ) ;
225
- assert_eq ! (
226
- & Url :: parse( "http://localhost:8080/schema" ) . unwrap( ) ,
227
- e. get_dataschema( ) . unwrap( )
228
- )
229
- }
230
-
231
194
#[ test]
232
195
fn take_data ( ) {
233
196
let mut e = Event :: default ( ) ;
@@ -238,11 +201,15 @@ mod tests {
238
201
} ) ,
239
202
) ;
240
203
241
- let _d = e. take_data ( ) ;
204
+ let ( datacontenttype, dataschema, data) = e. take_data ( ) ;
205
+
206
+ assert ! ( datacontenttype. is_some( ) ) ;
207
+ assert ! ( dataschema. is_none( ) ) ;
208
+ assert ! ( data. is_some( ) ) ;
242
209
243
- assert ! ( e. try_get_data :: <serde_json :: Value > ( ) . unwrap ( ) . is_none( ) ) ;
244
- assert ! ( e. get_dataschema ( ) . is_none( ) ) ;
245
- assert ! ( e. get_datacontenttype ( ) . is_none( ) ) ;
210
+ assert ! ( e. data ( ) . is_none( ) ) ;
211
+ assert ! ( e. dataschema ( ) . is_none( ) ) ;
212
+ assert ! ( e. datacontenttype ( ) . is_none( ) ) ;
246
213
}
247
214
248
215
#[ test]
@@ -251,7 +218,7 @@ mod tests {
251
218
e. set_id ( "001" ) ;
252
219
253
220
assert_eq ! ( e. set_id( "002" ) , String :: from( "001" ) ) ;
254
- assert_eq ! ( e. get_id ( ) , "002" )
221
+ assert_eq ! ( e. id ( ) , "002" )
255
222
}
256
223
257
224
#[ test]
0 commit comments