@@ -4,7 +4,7 @@ use cloudevents::message::{
4
4
BinaryDeserializer , BinarySerializer , Encoding , MessageAttributeValue , MessageDeserializer ,
5
5
Result , StructuredDeserializer , StructuredSerializer ,
6
6
} ;
7
- use cloudevents:: { message, Event } ;
7
+ use cloudevents:: { message, Data , Event } ;
8
8
use paho_mqtt:: { Message , PropertyCode } ;
9
9
use std:: collections:: HashMap ;
10
10
use std:: convert:: TryFrom ;
@@ -16,7 +16,7 @@ pub struct ConsumerMessageDeserializer {
16
16
}
17
17
18
18
impl ConsumerMessageDeserializer {
19
- fn get_mqtt_headers ( message : & Message ) -> Result < HashMap < String , Vec < u8 > > > {
19
+ fn get_mqtt_headers ( message : & Message ) -> HashMap < String , Vec < u8 > > {
20
20
let mut hm = HashMap :: new ( ) ;
21
21
let prop_iterator = message. properties ( ) . iter ( PropertyCode :: UserProperty ) ;
22
22
@@ -25,12 +25,12 @@ impl ConsumerMessageDeserializer {
25
25
hm. insert ( header. 0 . to_string ( ) , Vec :: from ( header. 1 ) ) ;
26
26
}
27
27
28
- Ok ( hm )
28
+ hm
29
29
}
30
30
31
31
pub fn new ( message : & Message ) -> Result < ConsumerMessageDeserializer > {
32
32
Ok ( ConsumerMessageDeserializer {
33
- headers : Self :: get_mqtt_headers ( message) ? ,
33
+ headers : Self :: get_mqtt_headers ( message) ,
34
34
payload : Some ( message. payload ( ) ) . map ( |s| Vec :: from ( s) ) ,
35
35
} )
36
36
}
@@ -110,22 +110,27 @@ impl MessageDeserializer for ConsumerMessageDeserializer {
110
110
fn encoding ( & self ) -> Encoding {
111
111
match (
112
112
self . headers
113
- . get ( "content-type" )
113
+ . get ( headers :: CONTENT_TYPE )
114
114
. map ( |s| String :: from_utf8 ( s. to_vec ( ) ) . ok ( ) )
115
115
. flatten ( )
116
116
. map ( |s| s. starts_with ( headers:: CLOUDEVENTS_JSON_HEADER ) )
117
117
. unwrap_or ( false ) ,
118
- self . headers . get ( headers:: SPEC_VERSION_HEADER ) ,
118
+ self . headers . get ( headers:: MQTT_VERSION_HEADER )
119
+ . map ( |s| String :: from_utf8 ( s. to_vec ( ) ) . ok ( ) )
120
+ . flatten ( )
121
+ . map ( |s| s. eq ( headers:: MQTT_V5_BINARY ) )
122
+ . unwrap_or ( false ) ,
119
123
) {
120
- ( true , _ ) => Encoding :: STRUCTURED ,
121
- ( _, Some ( _ ) ) => Encoding :: BINARY ,
122
- _ => Encoding :: UNKNOWN ,
124
+ ( true , true ) => Encoding :: STRUCTURED ,
125
+ ( _, true ) => Encoding :: BINARY ,
126
+ _ => Encoding :: STRUCTURED ,
123
127
}
124
128
}
125
129
}
126
130
127
- pub fn record_to_event ( msg : & Message , version : headers:: MqttVersion ) -> Result < Event > {
128
- match version {
131
+ pub fn record_to_event ( msg : & Message ) -> Result < Event > {
132
+ MessageDeserializer :: into_event ( ConsumerMessageDeserializer :: new ( msg) ?)
133
+ /* match version {
129
134
headers::MqttVersion::V5 => {
130
135
BinaryDeserializer::into_event(ConsumerMessageDeserializer::new(msg)?)
131
136
}
@@ -135,16 +140,16 @@ pub fn record_to_event(msg: &Message, version: headers::MqttVersion) -> Result<E
135
140
headers::MqttVersion::V3_1_1 => {
136
141
StructuredDeserializer::into_event(ConsumerMessageDeserializer::new(msg)?)
137
142
}
138
- }
143
+ }*/
139
144
}
140
145
141
146
pub trait MessageExt {
142
- fn to_event ( & self , version : headers :: MqttVersion ) -> Result < Event > ;
147
+ fn to_event ( & self ) -> Result < Event > ;
143
148
}
144
149
145
150
impl MessageExt for Message {
146
- fn to_event ( & self , version : headers :: MqttVersion ) -> Result < Event > {
147
- record_to_event ( self , version )
151
+ fn to_event ( & self ) -> Result < Event > {
152
+ record_to_event ( self )
148
153
}
149
154
}
150
155
@@ -155,7 +160,6 @@ mod tests {
155
160
156
161
use crate :: MessageBuilderExt ;
157
162
use chrono:: Utc ;
158
- use cloudevents:: event:: Data ;
159
163
use cloudevents:: { EventBuilder , EventBuilderV10 } ;
160
164
use paho_mqtt:: MessageBuilder ;
161
165
use serde_json:: json;
@@ -170,10 +174,10 @@ mod tests {
170
174
. time ( time)
171
175
. source ( "http://localhost" )
172
176
. data (
173
- "application/json " ,
174
- Data :: Binary ( String :: from ( "{ \" hello\" : \" world \" } " ) . into_bytes ( ) ) ,
177
+ "application/octet-stream " ,
178
+ Data :: Binary ( String :: from ( "hello rust " ) . into_bytes ( ) ) ,
175
179
)
176
- . extension ( "someint " , "10" )
180
+ . extension ( "mqttversion " , headers :: MQTT_V5_BINARY )
177
181
. build ( )
178
182
. unwrap ( ) ;
179
183
@@ -183,11 +187,12 @@ mod tests {
183
187
. ty ( "example.test" )
184
188
. time ( time)
185
189
. source ( "http://localhost" )
186
- . extension ( "someint" , "10" )
187
- . data ( "application/json" , json ! ( { "hello" : "world" } ) )
190
+ . extension ( "mqttversion" , headers:: MQTT_V5_BINARY )
191
+ . data (
192
+ "application/octet-stream" ,
193
+ Data :: Binary ( String :: from ( "hello rust" ) . into_bytes ( ) ) )
188
194
. build ( )
189
195
. unwrap ( ) ,
190
- headers:: MqttVersion :: V5 ,
191
196
)
192
197
. unwrap ( ) ;
193
198
@@ -197,7 +202,7 @@ mod tests {
197
202
. qos ( 1 )
198
203
. finalize ( ) ;
199
204
200
- assert_eq ! ( msg. to_event( headers :: MqttVersion :: V5 ) . unwrap( ) , expected)
205
+ assert_eq ! ( msg. to_event( ) . unwrap( ) , expected)
201
206
}
202
207
203
208
#[ test]
@@ -209,7 +214,6 @@ mod tests {
209
214
. ty ( "example.test" )
210
215
. source ( "http://localhost" )
211
216
. data ( "application/cloudevents+json" , j. clone ( ) )
212
- . extension ( "someint" , "10" )
213
217
. build ( )
214
218
. unwrap ( ) ;
215
219
@@ -218,7 +222,6 @@ mod tests {
218
222
. ty ( "example.test" )
219
223
. source ( "http://localhost" )
220
224
. data ( "application/cloudevents+json" , j. clone ( ) )
221
- . extension ( "someint" , "10" )
222
225
. build ( )
223
226
. unwrap ( ) ;
224
227
@@ -232,7 +235,7 @@ mod tests {
232
235
. finalize ( ) ;
233
236
234
237
assert_eq ! (
235
- msg. to_event( headers :: MqttVersion :: V3_1_1 ) . unwrap( ) ,
238
+ msg. to_event( ) . unwrap( ) ,
236
239
expected
237
240
)
238
241
}
0 commit comments