@@ -25,6 +25,8 @@ namespace signalr
2525 return " null" ;
2626 case signalr::value_type::boolean:
2727 return " boolean" ;
28+ case signalr::value_type::binary:
29+ return " binary" ;
2830 default :
2931 return std::to_string ((int )v);
3032 }
@@ -53,6 +55,9 @@ namespace signalr
5355 case value_type::map:
5456 new (&mStorage .map ) std::map<std::string, value>();
5557 break ;
58+ case value_type::binary:
59+ new (&mStorage .binary ) std::vector<uint8_t >();
60+ break ;
5661 case value_type::null:
5762 default :
5863 break ;
@@ -109,6 +114,16 @@ namespace signalr
109114 new (&mStorage .map ) std::map<std::string, value>(std::move (map));
110115 }
111116
117+ value::value (const std::vector<uint8_t >& bin) : mType (value_type::binary)
118+ {
119+ new (&mStorage .binary ) std::vector<uint8_t >(bin);
120+ }
121+
122+ value::value (std::vector<uint8_t >&& bin) : mType (value_type::binary)
123+ {
124+ new (&mStorage .binary ) std::vector<uint8_t >(std::move (bin));
125+ }
126+
112127 value::value (const value& rhs)
113128 {
114129 mType = rhs.mType ;
@@ -129,6 +144,9 @@ namespace signalr
129144 case value_type::map:
130145 new (&mStorage .map ) std::map<std::string, value>(rhs.mStorage .map );
131146 break ;
147+ case value_type::binary:
148+ new (&mStorage .binary ) std::vector<uint8_t >(rhs.mStorage .binary );
149+ break ;
132150 case value_type::null:
133151 default :
134152 break ;
@@ -155,6 +173,9 @@ namespace signalr
155173 case value_type::map:
156174 new (&mStorage .map ) std::map<std::string, signalr::value>(std::move (rhs.mStorage .map ));
157175 break ;
176+ case value_type::binary:
177+ new (&mStorage .binary ) std::vector<uint8_t >(std::move (rhs.mStorage .binary ));
178+ break ;
158179 case value_type::null:
159180 default :
160181 break ;
@@ -179,6 +200,9 @@ namespace signalr
179200 case value_type::map:
180201 mStorage .map .~map ();
181202 break ;
203+ case value_type::binary:
204+ mStorage .binary .~vector ();
205+ break ;
182206 case value_type::null:
183207 case value_type::float64:
184208 case value_type::boolean:
@@ -209,6 +233,9 @@ namespace signalr
209233 case value_type::map:
210234 new (&mStorage .map ) std::map<std::string, value>(rhs.mStorage .map );
211235 break ;
236+ case value_type::binary:
237+ new (&mStorage .binary ) std::vector<uint8_t >(rhs.mStorage .binary );
238+ break ;
212239 case value_type::null:
213240 default :
214241 break ;
@@ -239,6 +266,9 @@ namespace signalr
239266 case value_type::map:
240267 new (&mStorage .map ) std::map<std::string, value>(std::move (rhs.mStorage .map ));
241268 break ;
269+ case value_type::binary:
270+ new (&mStorage .binary ) std::vector<uint8_t >(std::move (rhs.mStorage .binary ));
271+ break ;
242272 case value_type::null:
243273 default :
244274 break ;
@@ -277,6 +307,11 @@ namespace signalr
277307 return mType == signalr::value_type::boolean;
278308 }
279309
310+ bool value::is_binary () const
311+ {
312+ return mType == signalr::value_type::binary;
313+ }
314+
280315 double value::as_double () const
281316 {
282317 if (!is_double ())
@@ -327,6 +362,16 @@ namespace signalr
327362 return mStorage .map ;
328363 }
329364
365+ const std::vector<uint8_t >& value::as_binary () const
366+ {
367+ if (!is_binary ())
368+ {
369+ throw signalr_exception (" object is a '" + value_type_to_string (mType ) + " ' expected it to be a 'binary'" );
370+ }
371+
372+ return mStorage .binary ;
373+ }
374+
330375 value_type value::type () const
331376 {
332377 return mType ;
0 commit comments