···
for (key, value) in json {
102
-
continue; // skip, because we've already handled it
102
+
map.insert(key.to_smolstr(), Data::from_json(value));
match string_key_type_guess(key) {
105
-
DataModelType::Null => {
106
-
if value.is_null() {
107
-
map.insert(key.to_smolstr(), Data::Null);
109
-
map.insert(key.to_smolstr(), Data::from_json(value));
105
+
DataModelType::Null if value.is_null() => {
106
+
map.insert(key.to_smolstr(), Data::Null);
112
-
DataModelType::Boolean => {
113
-
if let Some(value) = value.as_bool() {
114
-
map.insert(key.to_smolstr(), Data::Boolean(value));
116
-
map.insert(key.to_smolstr(), Data::from_json(value));
108
+
DataModelType::Boolean if value.is_boolean() => {
109
+
map.insert(key.to_smolstr(), Data::Boolean(value.as_bool().unwrap()));
119
-
DataModelType::Integer => {
120
-
if let Some(int) = value.as_i64() {
121
-
map.insert(key.to_smolstr(), Data::Integer(int));
123
-
map.insert(key.to_smolstr(), Data::from_json(value));
111
+
DataModelType::Integer if value.is_i64() => {
112
+
map.insert(key.to_smolstr(), Data::Integer(value.as_i64().unwrap()));
126
-
DataModelType::Bytes => {
127
-
if let Some(value) = value.as_str() {
128
-
map.insert(key.to_smolstr(), decode_bytes(value));
130
-
map.insert(key.to_smolstr(), Data::from_json(value));
114
+
DataModelType::Bytes if value.is_string() => {
115
+
map.insert(key.to_smolstr(), decode_bytes(value.as_str().unwrap()));
DataModelType::CidLink => {
if let Some(value) = value.as_object() {
···
map.insert(key.to_smolstr(), Data::from_json(value));
144
-
DataModelType::Blob => {
145
-
if let Some(value) = value.as_object() {
146
-
map.insert(key.to_smolstr(), Object::from_json(value));
148
-
map.insert(key.to_smolstr(), Data::from_json(value));
128
+
DataModelType::Blob if value.is_object() => {
131
+
Object::from_json(value.as_object().unwrap()),
151
-
DataModelType::Array => {
152
-
if let Some(value) = value.as_array() {
153
-
map.insert(key.to_smolstr(), Data::Array(Array::from_json(value)));
155
-
map.insert(key.to_smolstr(), Data::from_json(value));
134
+
DataModelType::Array if value.is_array() => {
137
+
Data::Array(Array::from_json(value.as_array().unwrap())),
158
-
DataModelType::Object => {
159
-
if let Some(value) = value.as_object() {
160
-
map.insert(key.to_smolstr(), Object::from_json(value));
162
-
map.insert(key.to_smolstr(), Data::from_json(value));
140
+
DataModelType::Object if value.is_object() => {
143
+
Object::from_json(value.as_object().unwrap()),
165
-
DataModelType::String(string_type) => {
166
-
if let Some(value) = value.as_str() {
167
-
match string_type {
168
-
LexiconStringType::Datetime => {
169
-
if let Ok(datetime) = Datetime::from_str(value) {
172
-
Data::String(AtprotoStr::Datetime(datetime)),
177
-
Data::String(AtprotoStr::String(value.into())),
181
-
LexiconStringType::AtUri => {
182
-
if let Ok(value) = AtUri::new(value) {
185
-
Data::String(AtprotoStr::AtUri(value)),
190
-
Data::String(AtprotoStr::String(value.into())),
194
-
LexiconStringType::Did => {
195
-
if let Ok(value) = Did::new(value) {
198
-
Data::String(AtprotoStr::Did(value)),
203
-
Data::String(AtprotoStr::String(value.into())),
207
-
LexiconStringType::Handle => {
208
-
if let Ok(value) = Handle::new(value) {
211
-
Data::String(AtprotoStr::Handle(value)),
216
-
Data::String(AtprotoStr::String(value.into())),
220
-
LexiconStringType::AtIdentifier => {
221
-
if let Ok(value) = AtIdentifier::new(value) {
224
-
Data::String(AtprotoStr::AtIdentifier(value)),
229
-
Data::String(AtprotoStr::String(value.into())),
233
-
LexiconStringType::Nsid => {
234
-
if let Ok(value) = Nsid::new(value) {
237
-
Data::String(AtprotoStr::Nsid(value)),
242
-
Data::String(AtprotoStr::String(value.into())),
246
-
LexiconStringType::Cid => {
247
-
if let Ok(value) = Cid::new(value.as_bytes()) {
250
-
Data::String(AtprotoStr::Cid(value)),
255
-
Data::String(AtprotoStr::String(value.into())),
259
-
LexiconStringType::Language => {
260
-
if let Ok(value) = Language::new(value) {
263
-
Data::String(AtprotoStr::Language(value)),
268
-
Data::String(AtprotoStr::String(value.into())),
272
-
LexiconStringType::Tid => {
273
-
if let Ok(value) = Tid::new(value) {
276
-
Data::String(AtprotoStr::Tid(value)),
281
-
Data::String(AtprotoStr::String(value.into())),
285
-
LexiconStringType::RecordKey => {
286
-
if let Ok(value) = Rkey::new(value) {
289
-
Data::String(AtprotoStr::RecordKey(RecordKey::from(value))),
294
-
Data::String(AtprotoStr::String(value.into())),
298
-
LexiconStringType::Uri(_) => {
299
-
if let Ok(uri) = Uri::new(value) {
302
-
Data::String(AtprotoStr::Uri(uri)),
307
-
Data::String(AtprotoStr::String(value.into())),
311
-
LexiconStringType::String => {
312
-
map.insert(key.to_smolstr(), Data::String(parse_string(value)));
316
-
map.insert(key.to_smolstr(), Data::from_json(value));
146
+
DataModelType::String(string_type) if value.is_string() => {
147
+
insert_string(&mut map, key, value.as_str().unwrap(), string_type);
150
+
map.insert(key.to_smolstr(), Data::from_json(value));
···
for (key, value) in cbor {
337
-
continue; // skip, because we've already handled it
170
+
map.insert(key.to_smolstr(), Data::from_cbor(value));
339
-
match string_key_type_guess(key) {
340
-
DataModelType::Null => {
341
-
if *value == Ipld::Null {
342
-
map.insert(key.to_smolstr(), Data::Null);
344
-
map.insert(key.to_smolstr(), Data::from_cbor(value));
172
+
match (string_key_type_guess(key), value) {
173
+
(DataModelType::Null, Ipld::Null) => {
174
+
map.insert(key.to_smolstr(), Data::Null);
347
-
DataModelType::Boolean => {
348
-
if let Ipld::Bool(value) = value {
349
-
map.insert(key.to_smolstr(), Data::Boolean(*value));
351
-
map.insert(key.to_smolstr(), Data::from_cbor(value));
176
+
(DataModelType::Boolean, Ipld::Bool(value)) => {
177
+
map.insert(key.to_smolstr(), Data::Boolean(*value));
354
-
DataModelType::Integer => {
355
-
if let Ipld::Integer(int) = value {
356
-
map.insert(key.to_smolstr(), Data::Integer(*int as i64));
358
-
map.insert(key.to_smolstr(), Data::from_cbor(value));
179
+
(DataModelType::Integer, Ipld::Integer(int)) => {
180
+
map.insert(key.to_smolstr(), Data::Integer(*int as i64));
361
-
DataModelType::Bytes => {
362
-
if let Ipld::Bytes(value) = value {
363
-
map.insert(key.to_smolstr(), Data::Bytes(Bytes::copy_from_slice(value)));
365
-
map.insert(key.to_smolstr(), Data::from_cbor(value));
182
+
(DataModelType::Bytes, Ipld::Bytes(value)) => {
183
+
map.insert(key.to_smolstr(), Data::Bytes(Bytes::copy_from_slice(value)));
368
-
DataModelType::Blob => {
369
-
if let Ipld::Map(value) = value {
370
-
map.insert(key.to_smolstr(), Object::from_cbor(value));
372
-
map.insert(key.to_smolstr(), Data::from_cbor(value));
185
+
(DataModelType::Blob, Ipld::Map(value)) => {
186
+
map.insert(key.to_smolstr(), Object::from_cbor(value));
375
-
DataModelType::Array => {
376
-
if let Ipld::List(value) = value {
377
-
map.insert(key.to_smolstr(), Data::Array(Array::from_cbor(value)));
379
-
map.insert(key.to_smolstr(), Data::from_cbor(value));
188
+
(DataModelType::Array, Ipld::List(value)) => {
189
+
map.insert(key.to_smolstr(), Data::Array(Array::from_cbor(value)));
382
-
DataModelType::Object => {
383
-
if let Ipld::Map(value) = value {
384
-
map.insert(key.to_smolstr(), Object::from_cbor(value));
386
-
map.insert(key.to_smolstr(), Data::from_cbor(value));
191
+
(DataModelType::Object, Ipld::Map(value)) => {
192
+
map.insert(key.to_smolstr(), Object::from_cbor(value));
389
-
DataModelType::String(string_type) => {
390
-
if let Ipld::String(value) = value {
391
-
match string_type {
392
-
LexiconStringType::Datetime => {
393
-
if let Ok(datetime) = Datetime::from_str(value) {
396
-
Data::String(AtprotoStr::Datetime(datetime)),
401
-
Data::String(AtprotoStr::String(value.into())),
405
-
LexiconStringType::AtUri => {
406
-
if let Ok(value) = AtUri::new(value) {
409
-
Data::String(AtprotoStr::AtUri(value)),
414
-
Data::String(AtprotoStr::String(value.into())),
418
-
LexiconStringType::Did => {
419
-
if let Ok(value) = Did::new(value) {
422
-
Data::String(AtprotoStr::Did(value)),
427
-
Data::String(AtprotoStr::String(value.into())),
431
-
LexiconStringType::Handle => {
432
-
if let Ok(value) = Handle::new(value) {
435
-
Data::String(AtprotoStr::Handle(value)),
440
-
Data::String(AtprotoStr::String(value.into())),
444
-
LexiconStringType::AtIdentifier => {
445
-
if let Ok(value) = AtIdentifier::new(value) {
448
-
Data::String(AtprotoStr::AtIdentifier(value)),
453
-
Data::String(AtprotoStr::String(value.into())),
457
-
LexiconStringType::Nsid => {
458
-
if let Ok(value) = Nsid::new(value) {
461
-
Data::String(AtprotoStr::Nsid(value)),
466
-
Data::String(AtprotoStr::String(value.into())),
470
-
LexiconStringType::Cid => {
471
-
if let Ok(value) = Cid::new(value.as_bytes()) {
474
-
Data::String(AtprotoStr::Cid(value)),
479
-
Data::String(AtprotoStr::String(value.into())),
483
-
LexiconStringType::Language => {
484
-
if let Ok(value) = Language::new(value) {
487
-
Data::String(AtprotoStr::Language(value)),
492
-
Data::String(AtprotoStr::String(value.into())),
496
-
LexiconStringType::Tid => {
497
-
if let Ok(value) = Tid::new(value) {
500
-
Data::String(AtprotoStr::Tid(value)),
505
-
Data::String(AtprotoStr::String(value.into())),
509
-
LexiconStringType::RecordKey => {
510
-
if let Ok(value) = Rkey::new(value) {
513
-
Data::String(AtprotoStr::RecordKey(RecordKey::from(value))),
518
-
Data::String(AtprotoStr::String(value.into())),
522
-
LexiconStringType::Uri(_) => {
523
-
if let Ok(uri) = Uri::new(value) {
526
-
Data::String(AtprotoStr::Uri(uri)),
531
-
Data::String(AtprotoStr::String(value.into())),
535
-
LexiconStringType::String => {
536
-
map.insert(key.to_smolstr(), Data::String(parse_string(value)));
540
-
map.insert(key.to_smolstr(), Data::from_cbor(value));
194
+
(DataModelType::String(string_type), Ipld::String(value)) => {
195
+
insert_string(&mut map, key, value, string_type);
map.insert(key.to_smolstr(), Data::from_cbor(value));
···
Data::Object(Object(map))
207
+
pub fn insert_string<'s>(
208
+
map: &mut BTreeMap<SmolStr, Data<'s>>,
211
+
string_type: LexiconStringType,
213
+
match string_type {
214
+
LexiconStringType::Datetime => {
215
+
if let Ok(datetime) = Datetime::from_str(value) {
218
+
Data::String(AtprotoStr::Datetime(datetime)),
223
+
Data::String(AtprotoStr::String(value.into())),
227
+
LexiconStringType::AtUri => {
228
+
if let Ok(value) = AtUri::new(value) {
229
+
map.insert(key.to_smolstr(), Data::String(AtprotoStr::AtUri(value)));
233
+
Data::String(AtprotoStr::String(value.into())),
237
+
LexiconStringType::Did => {
238
+
if let Ok(value) = Did::new(value) {
239
+
map.insert(key.to_smolstr(), Data::String(AtprotoStr::Did(value)));
243
+
Data::String(AtprotoStr::String(value.into())),
247
+
LexiconStringType::Handle => {
248
+
if let Ok(value) = Handle::new(value) {
249
+
map.insert(key.to_smolstr(), Data::String(AtprotoStr::Handle(value)));
253
+
Data::String(AtprotoStr::String(value.into())),
257
+
LexiconStringType::AtIdentifier => {
258
+
if let Ok(value) = AtIdentifier::new(value) {
261
+
Data::String(AtprotoStr::AtIdentifier(value)),
266
+
Data::String(AtprotoStr::String(value.into())),
270
+
LexiconStringType::Nsid => {
271
+
if let Ok(value) = Nsid::new(value) {
272
+
map.insert(key.to_smolstr(), Data::String(AtprotoStr::Nsid(value)));
276
+
Data::String(AtprotoStr::String(value.into())),
280
+
LexiconStringType::Cid => {
281
+
if let Ok(value) = Cid::new(value.as_bytes()) {
282
+
map.insert(key.to_smolstr(), Data::String(AtprotoStr::Cid(value)));
286
+
Data::String(AtprotoStr::String(value.into())),
290
+
LexiconStringType::Language => {
291
+
if let Ok(value) = Language::new(value) {
292
+
map.insert(key.to_smolstr(), Data::String(AtprotoStr::Language(value)));
296
+
Data::String(AtprotoStr::String(value.into())),
300
+
LexiconStringType::Tid => {
301
+
if let Ok(value) = Tid::new(value) {
302
+
map.insert(key.to_smolstr(), Data::String(AtprotoStr::Tid(value)));
306
+
Data::String(AtprotoStr::String(value.into())),
310
+
LexiconStringType::RecordKey => {
311
+
if let Ok(value) = Rkey::new(value) {
314
+
Data::String(AtprotoStr::RecordKey(RecordKey::from(value))),
319
+
Data::String(AtprotoStr::String(value.into())),
323
+
LexiconStringType::Uri(_) => {
324
+
if let Ok(uri) = Uri::new(value) {
325
+
map.insert(key.to_smolstr(), Data::String(AtprotoStr::Uri(uri)));
329
+
Data::String(AtprotoStr::String(value.into())),
333
+
LexiconStringType::String => {
334
+
map.insert(key.to_smolstr(), Data::String(parse_string(value)));