11import 'package:firebase_admin/src/firestore/document.dart' ;
22import 'package:googleapis/firestore/v1.dart' ;
3+ import 'package:maps_toolkit/maps_toolkit.dart' as maps_toolkit;
4+
5+ import '../firestore.dart' ;
36
47Map <String , dynamic > fromFirestore (DocumentSnapshot <Map <String , dynamic >> snapshot) =>
58 snapshot.data ();
69
710Map <String , dynamic > toFirestore (Map <String , dynamic > value) => value;
811
9- Map <String , dynamic > deserializeData (Map <String , Value > fields) {
10- return fields.map ((key, value) => MapEntry (key, deserializeValue (value)));
12+ Map <String , dynamic > deserializeData (Firestore firestore, Map <String , Value > fields) {
13+ return fields.map ((key, value) => MapEntry (key, deserializeValue (firestore, value)));
1114}
1215
1316Map <String , Value > serializeData (Map <String , dynamic > data) {
1417 return data.map ((key, value) => MapEntry (key, serializeValue (value)));
1518}
1619
17- dynamic deserializeValue (Value value) {
20+ dynamic deserializeValue (Firestore firestore, Value value) {
1821 if (value.arrayValue != null ) {
19- return value.arrayValue! .values! .map (deserializeValue).toList ();
22+ return value.arrayValue! .values! .map ((value) => deserializeValue (firestore, value) ).toList ();
2023 } else if (value.booleanValue != null ) {
2124 return value.booleanValue! ;
2225 } else if (value.bytesValue != null ) {
23- return null ;
26+ return null ; // TODO: Add support to it
2427 } else if (value.doubleValue != null ) {
2528 return value.doubleValue! ;
2629 } else if (value.geoPointValue != null ) {
27- return null ;
30+ return maps_toolkit. LatLng (value.geoPointValue ! .latitude ! , value.geoPointValue ! .longitude ! ) ;
2831 } else if (value.integerValue != null ) {
2932 return int .parse (value.integerValue! );
3033 } else if (value.mapValue != null ) {
31- return deserializeData (value.mapValue! .fields! );
34+ return deserializeData (firestore, value.mapValue! .fields! );
3235 } else if (value.nullValue != null ) {
3336 return null ;
3437 } else if (value.referenceValue != null ) {
35- return null ;
38+ return DocumentReference <Map <String , dynamic >>(
39+ firestore: firestore,
40+ fromFirestore: fromFirestore,
41+ toFirestore: toFirestore,
42+ path: value.referenceValue! ,
43+ );
3644 } else if (value.stringValue != null ) {
3745 return value.stringValue! ;
3846 } else if (value.timestampValue != null ) {
@@ -46,11 +54,13 @@ Value serializeValue(dynamic data) {
4654 booleanValue: data is bool ? data : null ,
4755 bytesValue: null ,
4856 doubleValue: data is double ? data : null ,
49- geoPointValue: null ,
57+ geoPointValue: data is maps_toolkit.LatLng
58+ ? LatLng (latitude: data.latitude, longitude: data.longitude)
59+ : null ,
5060 integerValue: data is int ? '$data ' : null ,
5161 mapValue: data is Map <String , dynamic > ? MapValue (fields: serializeData (data)) : null ,
5262 nullValue: data == null ? 'nullValue' : null ,
53- referenceValue: null ,
63+ referenceValue: data is DocumentReference < Map < String , dynamic >> ? data.path : null ,
5464 stringValue: data is String ? data : null ,
5565 timestampValue: data is DateTime ? '${data .microsecondsSinceEpoch }' : null ,
5666 );
0 commit comments