Skip to content

Commit d92a2b0

Browse files
committed
chore: add support for Pigeon
1 parent 89eb198 commit d92a2b0

11 files changed

Lines changed: 1275 additions & 794 deletions

File tree

packages/cloud_firestore/cloud_firestore/android/src/main/java/io/flutter/plugins/firebase/firestore/GeneratedAndroidFirebaseFirestore.java

Lines changed: 252 additions & 21 deletions
Large diffs are not rendered by default.

packages/cloud_firestore/cloud_firestore/ios/cloud_firestore/Sources/cloud_firestore/FirestoreMessages.g.m

Lines changed: 122 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,6 @@
55
// See also: https://pub.dev/packages/pigeon
66

77
#import "FirestoreMessages.g.h"
8-
#import "FLTFirebaseFirestoreReader.h"
9-
#import "FLTFirebaseFirestoreWriter.h"
108

119
#if TARGET_OS_OSX
1210
#import <FlutterMacOS/FlutterMacOS.h>
@@ -168,6 +166,18 @@ + (nullable PigeonQuerySnapshot *)nullableFromList:(NSArray *)list;
168166
- (NSArray *)toList;
169167
@end
170168

169+
@interface PigeonPipelineResult ()
170+
+ (PigeonPipelineResult *)fromList:(NSArray *)list;
171+
+ (nullable PigeonPipelineResult *)nullableFromList:(NSArray *)list;
172+
- (NSArray *)toList;
173+
@end
174+
175+
@interface PigeonPipelineSnapshot ()
176+
+ (PigeonPipelineSnapshot *)fromList:(NSArray *)list;
177+
+ (nullable PigeonPipelineSnapshot *)nullableFromList:(NSArray *)list;
178+
- (NSArray *)toList;
179+
@end
180+
171181
@interface PigeonGetOptions ()
172182
+ (PigeonGetOptions *)fromList:(NSArray *)list;
173183
+ (nullable PigeonGetOptions *)nullableFromList:(NSArray *)list;
@@ -349,7 +359,7 @@ + (instancetype)makeWithType:(DocumentChangeType)type
349359
pigeonResult.type = type;
350360
pigeonResult.document = document;
351361
pigeonResult.oldIndex = oldIndex;
352-
pigeonResult.index = newIndex;
362+
pigeonResult.newIndex = newIndex;
353363
return pigeonResult;
354364
}
355365
+ (PigeonDocumentChange *)fromList:(NSArray *)list {
@@ -360,8 +370,8 @@ + (PigeonDocumentChange *)fromList:(NSArray *)list {
360370
NSAssert(pigeonResult.document != nil, @"");
361371
pigeonResult.oldIndex = GetNullableObjectAtIndex(list, 2);
362372
NSAssert(pigeonResult.oldIndex != nil, @"");
363-
pigeonResult.index = GetNullableObjectAtIndex(list, 3);
364-
NSAssert(pigeonResult.index != nil, @"");
373+
pigeonResult.newIndex = GetNullableObjectAtIndex(list, 3);
374+
NSAssert(pigeonResult.newIndex != nil, @"");
365375
return pigeonResult;
366376
}
367377
+ (nullable PigeonDocumentChange *)nullableFromList:(NSArray *)list {
@@ -372,7 +382,7 @@ - (NSArray *)toList {
372382
@(self.type),
373383
(self.document ? [self.document toList] : [NSNull null]),
374384
(self.oldIndex ?: [NSNull null]),
375-
(self.index ?: [NSNull null]),
385+
(self.newIndex ?: [NSNull null]),
376386
];
377387
}
378388
@end
@@ -410,6 +420,65 @@ - (NSArray *)toList {
410420
}
411421
@end
412422

423+
@implementation PigeonPipelineResult
424+
+ (instancetype)makeWithDocumentPath:(NSString *)documentPath
425+
createTime:(NSNumber *)createTime
426+
updateTime:(NSNumber *)updateTime {
427+
PigeonPipelineResult *pigeonResult = [[PigeonPipelineResult alloc] init];
428+
pigeonResult.documentPath = documentPath;
429+
pigeonResult.createTime = createTime;
430+
pigeonResult.updateTime = updateTime;
431+
return pigeonResult;
432+
}
433+
+ (PigeonPipelineResult *)fromList:(NSArray *)list {
434+
PigeonPipelineResult *pigeonResult = [[PigeonPipelineResult alloc] init];
435+
pigeonResult.documentPath = GetNullableObjectAtIndex(list, 0);
436+
NSAssert(pigeonResult.documentPath != nil, @"");
437+
pigeonResult.createTime = GetNullableObjectAtIndex(list, 1);
438+
NSAssert(pigeonResult.createTime != nil, @"");
439+
pigeonResult.updateTime = GetNullableObjectAtIndex(list, 2);
440+
NSAssert(pigeonResult.updateTime != nil, @"");
441+
return pigeonResult;
442+
}
443+
+ (nullable PigeonPipelineResult *)nullableFromList:(NSArray *)list {
444+
return (list) ? [PigeonPipelineResult fromList:list] : nil;
445+
}
446+
- (NSArray *)toList {
447+
return @[
448+
(self.documentPath ?: [NSNull null]),
449+
(self.createTime ?: [NSNull null]),
450+
(self.updateTime ?: [NSNull null]),
451+
];
452+
}
453+
@end
454+
455+
@implementation PigeonPipelineSnapshot
456+
+ (instancetype)makeWithResults:(NSArray<PigeonPipelineResult *> *)results
457+
executionTime:(NSNumber *)executionTime {
458+
PigeonPipelineSnapshot *pigeonResult = [[PigeonPipelineSnapshot alloc] init];
459+
pigeonResult.results = results;
460+
pigeonResult.executionTime = executionTime;
461+
return pigeonResult;
462+
}
463+
+ (PigeonPipelineSnapshot *)fromList:(NSArray *)list {
464+
PigeonPipelineSnapshot *pigeonResult = [[PigeonPipelineSnapshot alloc] init];
465+
pigeonResult.results = GetNullableObjectAtIndex(list, 0);
466+
NSAssert(pigeonResult.results != nil, @"");
467+
pigeonResult.executionTime = GetNullableObjectAtIndex(list, 1);
468+
NSAssert(pigeonResult.executionTime != nil, @"");
469+
return pigeonResult;
470+
}
471+
+ (nullable PigeonPipelineSnapshot *)nullableFromList:(NSArray *)list {
472+
return (list) ? [PigeonPipelineSnapshot fromList:list] : nil;
473+
}
474+
- (NSArray *)toList {
475+
return @[
476+
(self.results ?: [NSNull null]),
477+
(self.executionTime ?: [NSNull null]),
478+
];
479+
}
480+
@end
481+
413482
@implementation PigeonGetOptions
414483
+ (instancetype)makeWithSource:(Source)source
415484
serverTimestampBehavior:(ServerTimestampBehavior)serverTimestampBehavior {
@@ -649,7 +718,7 @@ - (NSArray *)toList {
649718
}
650719
@end
651720

652-
@interface FirebaseFirestoreHostApiCodecReader : FLTFirebaseFirestoreReader
721+
@interface FirebaseFirestoreHostApiCodecReader : FlutterStandardReader
653722
@end
654723
@implementation FirebaseFirestoreHostApiCodecReader
655724
- (nullable id)readValueOfType:(UInt8)type {
@@ -673,20 +742,24 @@ - (nullable id)readValueOfType:(UInt8)type {
673742
case 136:
674743
return [PigeonGetOptions fromList:[self readValue]];
675744
case 137:
676-
return [PigeonQueryParameters fromList:[self readValue]];
745+
return [PigeonPipelineResult fromList:[self readValue]];
677746
case 138:
678-
return [PigeonQuerySnapshot fromList:[self readValue]];
747+
return [PigeonPipelineSnapshot fromList:[self readValue]];
679748
case 139:
680-
return [PigeonSnapshotMetadata fromList:[self readValue]];
749+
return [PigeonQueryParameters fromList:[self readValue]];
681750
case 140:
751+
return [PigeonQuerySnapshot fromList:[self readValue]];
752+
case 141:
753+
return [PigeonSnapshotMetadata fromList:[self readValue]];
754+
case 142:
682755
return [PigeonTransactionCommand fromList:[self readValue]];
683756
default:
684757
return [super readValueOfType:type];
685758
}
686759
}
687760
@end
688761

689-
@interface FirebaseFirestoreHostApiCodecWriter : FLTFirebaseFirestoreWriter
762+
@interface FirebaseFirestoreHostApiCodecWriter : FlutterStandardWriter
690763
@end
691764
@implementation FirebaseFirestoreHostApiCodecWriter
692765
- (void)writeValue:(id)value {
@@ -717,18 +790,24 @@ - (void)writeValue:(id)value {
717790
} else if ([value isKindOfClass:[PigeonGetOptions class]]) {
718791
[self writeByte:136];
719792
[self writeValue:[value toList]];
720-
} else if ([value isKindOfClass:[PigeonQueryParameters class]]) {
793+
} else if ([value isKindOfClass:[PigeonPipelineResult class]]) {
721794
[self writeByte:137];
722795
[self writeValue:[value toList]];
723-
} else if ([value isKindOfClass:[PigeonQuerySnapshot class]]) {
796+
} else if ([value isKindOfClass:[PigeonPipelineSnapshot class]]) {
724797
[self writeByte:138];
725798
[self writeValue:[value toList]];
726-
} else if ([value isKindOfClass:[PigeonSnapshotMetadata class]]) {
799+
} else if ([value isKindOfClass:[PigeonQueryParameters class]]) {
727800
[self writeByte:139];
728801
[self writeValue:[value toList]];
729-
} else if ([value isKindOfClass:[PigeonTransactionCommand class]]) {
802+
} else if ([value isKindOfClass:[PigeonQuerySnapshot class]]) {
730803
[self writeByte:140];
731804
[self writeValue:[value toList]];
805+
} else if ([value isKindOfClass:[PigeonSnapshotMetadata class]]) {
806+
[self writeByte:141];
807+
[self writeValue:[value toList]];
808+
} else if ([value isKindOfClass:[PigeonTransactionCommand class]]) {
809+
[self writeByte:142];
810+
[self writeValue:[value toList]];
732811
} else {
733812
[super writeValue:value];
734813
}
@@ -1379,4 +1458,32 @@ void FirebaseFirestoreHostApiSetup(id<FlutterBinaryMessenger> binaryMessenger,
13791458
[channel setMessageHandler:nil];
13801459
}
13811460
}
1461+
{
1462+
FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc]
1463+
initWithName:@"dev.flutter.pigeon.cloud_firestore_platform_interface."
1464+
@"FirebaseFirestoreHostApi.executePipeline"
1465+
binaryMessenger:binaryMessenger
1466+
codec:FirebaseFirestoreHostApiGetCodec()];
1467+
if (api) {
1468+
NSCAssert([api respondsToSelector:@selector(executePipelineApp:stages:options:completion:)],
1469+
@"FirebaseFirestoreHostApi api (%@) doesn't respond to "
1470+
@"@selector(executePipelineApp:stages:options:completion:)",
1471+
api);
1472+
[channel setMessageHandler:^(id _Nullable message, FlutterReply callback) {
1473+
NSArray *args = message;
1474+
FirestorePigeonFirebaseApp *arg_app = GetNullableObjectAtIndex(args, 0);
1475+
NSArray<NSDictionary<NSString *, id> *> *arg_stages = GetNullableObjectAtIndex(args, 1);
1476+
NSDictionary<NSString *, id> *arg_options = GetNullableObjectAtIndex(args, 2);
1477+
[api executePipelineApp:arg_app
1478+
stages:arg_stages
1479+
options:arg_options
1480+
completion:^(PigeonPipelineSnapshot *_Nullable output,
1481+
FlutterError *_Nullable error) {
1482+
callback(wrapResult(output, error));
1483+
}];
1484+
}];
1485+
} else {
1486+
[channel setMessageHandler:nil];
1487+
}
1488+
}
13821489
}

packages/cloud_firestore/cloud_firestore/ios/cloud_firestore/Sources/cloud_firestore/include/cloud_firestore/Public/FirestoreMessages.g.h

Lines changed: 28 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -165,6 +165,8 @@ typedef NS_ENUM(NSUInteger, AggregateType) {
165165
@class PigeonDocumentSnapshot;
166166
@class PigeonDocumentChange;
167167
@class PigeonQuerySnapshot;
168+
@class PigeonPipelineResult;
169+
@class PigeonPipelineSnapshot;
168170
@class PigeonGetOptions;
169171
@class PigeonDocumentOption;
170172
@class PigeonTransactionCommand;
@@ -229,7 +231,7 @@ typedef NS_ENUM(NSUInteger, AggregateType) {
229231
@property(nonatomic, assign) DocumentChangeType type;
230232
@property(nonatomic, strong) PigeonDocumentSnapshot *document;
231233
@property(nonatomic, strong) NSNumber *oldIndex;
232-
@property(nonatomic, strong) NSNumber *index;
234+
@property(nonatomic, strong) NSNumber *newIndex;
233235
@end
234236

235237
@interface PigeonQuerySnapshot : NSObject
@@ -243,6 +245,26 @@ typedef NS_ENUM(NSUInteger, AggregateType) {
243245
@property(nonatomic, strong) PigeonSnapshotMetadata *metadata;
244246
@end
245247

248+
@interface PigeonPipelineResult : NSObject
249+
/// `init` unavailable to enforce nonnull fields, see the `make` class method.
250+
- (instancetype)init NS_UNAVAILABLE;
251+
+ (instancetype)makeWithDocumentPath:(NSString *)documentPath
252+
createTime:(NSNumber *)createTime
253+
updateTime:(NSNumber *)updateTime;
254+
@property(nonatomic, copy) NSString *documentPath;
255+
@property(nonatomic, strong) NSNumber *createTime;
256+
@property(nonatomic, strong) NSNumber *updateTime;
257+
@end
258+
259+
@interface PigeonPipelineSnapshot : NSObject
260+
/// `init` unavailable to enforce nonnull fields, see the `make` class method.
261+
- (instancetype)init NS_UNAVAILABLE;
262+
+ (instancetype)makeWithResults:(NSArray<PigeonPipelineResult *> *)results
263+
executionTime:(NSNumber *)executionTime;
264+
@property(nonatomic, strong) NSArray<PigeonPipelineResult *> *results;
265+
@property(nonatomic, strong) NSNumber *executionTime;
266+
@end
267+
246268
@interface PigeonGetOptions : NSObject
247269
/// `init` unavailable to enforce nonnull fields, see the `make` class method.
248270
- (instancetype)init NS_UNAVAILABLE;
@@ -416,6 +438,11 @@ NSObject<FlutterMessageCodec> *FirebaseFirestoreHostApiGetCodec(void);
416438
- (void)persistenceCacheIndexManagerRequestApp:(FirestorePigeonFirebaseApp *)app
417439
request:(PersistenceCacheIndexManagerRequest)request
418440
completion:(void (^)(FlutterError *_Nullable))completion;
441+
- (void)executePipelineApp:(FirestorePigeonFirebaseApp *)app
442+
stages:(NSArray<NSDictionary<NSString *, id> *> *)stages
443+
options:(nullable NSDictionary<NSString *, id> *)options
444+
completion:(void (^)(PigeonPipelineSnapshot *_Nullable,
445+
FlutterError *_Nullable))completion;
419446
@end
420447

421448
extern void FirebaseFirestoreHostApiSetup(id<FlutterBinaryMessenger> binaryMessenger,

packages/cloud_firestore/cloud_firestore/lib/src/firestore.dart

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -354,6 +354,7 @@ class FirebaseFirestore extends FirebasePluginPlatform {
354354
/// .limit(10)
355355
/// .execute();
356356
/// ```
357+
// ignore: use_to_and_as_if_applicable
357358
PipelineSource pipeline() {
358359
return PipelineSource._(this);
359360
}

0 commit comments

Comments
 (0)