@@ -6,7 +6,6 @@ use crate::event::attributes::DataAttributesWriter;
66use chrono:: { DateTime , Utc } ;
77use delegate_attr:: delegate;
88use std:: collections:: HashMap ;
9- use std:: convert:: TryFrom ;
109use url:: Url ;
1110
1211/// Data structure that represents a [CloudEvent](https://github.com/cloudevents/spec/blob/master/spec.md).
@@ -16,9 +15,11 @@ use url::Url;
1615///
1716/// You can build events using [`super::EventBuilder`]
1817/// ```
19- /// use cloudevents::Event ;
20- /// use cloudevents::event::AttributesReader ;
18+ /// use cloudevents::* ;
19+ /// use std::convert::TryInto ;
2120///
21+ /// # use std::error::Error;
22+ /// # fn main() -> Result<(), Box<dyn Error>> {
2223/// // Create an event using the Default trait
2324/// let mut e = Event::default();
2425/// e.write_data(
@@ -27,11 +28,16 @@ use url::Url;
2728/// );
2829///
2930/// // Print the event id
30- /// println!("Event id: {}", e.get_id ());
31+ /// println!("Event id: {}", e.id ());
3132///
3233/// // 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+ /// # }
3541/// ```
3642#[ derive( PartialEq , Debug , Clone ) ]
3743pub struct Event {
@@ -42,14 +48,14 @@ pub struct Event {
4248
4349#[ delegate( self . attributes) ]
4450impl 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 > > ;
5359}
5460
5561#[ delegate( self . attributes) ]
@@ -126,6 +132,11 @@ impl Event {
126132 self . data = Some ( data. into ( ) ) ;
127133 }
128134
135+ /// Get `data` from this `Event`
136+ pub fn data ( & self ) -> Option < & Data > {
137+ self . data . as_ref ( )
138+ }
139+
129140 /// Write `data` into this `Event` with the specified `datacontenttype` and `dataschema`.
130141 ///
131142 /// ```
@@ -152,34 +163,8 @@ impl Event {
152163 self . data = Some ( data. into ( ) ) ;
153164 }
154165
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-
181166 /// 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 > {
183168 self . extensions . get ( extension_name)
184169 }
185170
@@ -206,28 +191,6 @@ impl Event {
206191mod tests {
207192 use super :: * ;
208193
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-
231194 #[ test]
232195 fn take_data ( ) {
233196 let mut e = Event :: default ( ) ;
@@ -238,11 +201,15 @@ mod tests {
238201 } ) ,
239202 ) ;
240203
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( ) ) ;
242209
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( ) ) ;
246213 }
247214
248215 #[ test]
@@ -251,7 +218,7 @@ mod tests {
251218 e. set_id ( "001" ) ;
252219
253220 assert_eq ! ( e. set_id( "002" ) , String :: from( "001" ) ) ;
254- assert_eq ! ( e. get_id ( ) , "002" )
221+ assert_eq ! ( e. id ( ) , "002" )
255222 }
256223
257224 #[ test]
0 commit comments