@@ -736,6 +736,47 @@ impl From<SlidingSyncSelectiveModeBuilder> for SlidingSyncMode {
736
736
}
737
737
}
738
738
739
+ #[ derive( Clone , Debug ) ]
740
+ enum WindowedModeBuilderKind {
741
+ Paging ,
742
+ Growing ,
743
+ }
744
+
745
+ /// Builder for a new sliding sync list in growing/paging mode.
746
+ #[ derive( Clone , Debug ) ]
747
+ pub struct SlidingSyncWindowedModeBuilder {
748
+ mode : WindowedModeBuilderKind ,
749
+ batch_size : u32 ,
750
+ maximum_number_of_rooms_to_fetch : Option < u32 > ,
751
+ }
752
+
753
+ impl SlidingSyncWindowedModeBuilder {
754
+ fn new ( mode : WindowedModeBuilderKind , batch_size : u32 ) -> Self {
755
+ Self { mode, batch_size, maximum_number_of_rooms_to_fetch : None }
756
+ }
757
+
758
+ /// The maximum number of rooms to fetch.
759
+ pub fn maximum_number_of_rooms_to_fetch ( mut self , num : u32 ) -> Self {
760
+ self . maximum_number_of_rooms_to_fetch = Some ( num) ;
761
+ self
762
+ }
763
+ }
764
+
765
+ impl From < SlidingSyncWindowedModeBuilder > for SlidingSyncMode {
766
+ fn from ( builder : SlidingSyncWindowedModeBuilder ) -> Self {
767
+ match builder. mode {
768
+ WindowedModeBuilderKind :: Paging => Self :: Paging {
769
+ batch_size : builder. batch_size ,
770
+ maximum_number_of_rooms_to_fetch : builder. maximum_number_of_rooms_to_fetch ,
771
+ } ,
772
+ WindowedModeBuilderKind :: Growing => Self :: Growing {
773
+ batch_size : builder. batch_size ,
774
+ maximum_number_of_rooms_to_fetch : builder. maximum_number_of_rooms_to_fetch ,
775
+ } ,
776
+ }
777
+ }
778
+ }
779
+
739
780
/// How a [`SlidingSyncList`] fetches the data.
740
781
#[ derive( Debug , Clone , PartialEq , Eq , Serialize , Deserialize ) ]
741
782
pub enum SlidingSyncMode {
@@ -782,13 +823,13 @@ impl SlidingSyncMode {
782
823
}
783
824
784
825
/// Create a `SlidingSyncMode::Paging`.
785
- pub fn new_paging ( batch_size : u32 , maximum_number_of_rooms_to_fetch : Option < u32 > ) -> Self {
786
- Self :: Paging { batch_size , maximum_number_of_rooms_to_fetch }
826
+ pub fn new_paging ( batch_size : u32 ) -> SlidingSyncWindowedModeBuilder {
827
+ SlidingSyncWindowedModeBuilder :: new ( WindowedModeBuilderKind :: Paging , batch_size )
787
828
}
788
829
789
830
/// Create a `SlidingSyncMode::Growing`.
790
- pub fn new_growing ( batch_size : u32 , maximum_number_of_rooms_to_fetch : Option < u32 > ) -> Self {
791
- Self :: Growing { batch_size , maximum_number_of_rooms_to_fetch }
831
+ pub fn new_growing ( batch_size : u32 ) -> SlidingSyncWindowedModeBuilder {
832
+ SlidingSyncWindowedModeBuilder :: new ( WindowedModeBuilderKind :: Growing , batch_size )
792
833
}
793
834
}
794
835
@@ -957,7 +998,7 @@ mod tests {
957
998
let ( sender, _receiver) = channel ( 1 ) ;
958
999
959
1000
let mut list = SlidingSyncList :: builder ( "testing" )
960
- . sync_mode ( SlidingSyncMode :: new_paging ( 10 , None ) )
1001
+ . sync_mode ( SlidingSyncMode :: new_paging ( 10 ) )
961
1002
. build ( sender) ;
962
1003
963
1004
assert_ranges ! {
@@ -999,7 +1040,7 @@ mod tests {
999
1040
let ( sender, _receiver) = channel ( 1 ) ;
1000
1041
1001
1042
let mut list = SlidingSyncList :: builder ( "testing" )
1002
- . sync_mode ( SlidingSyncMode :: new_paging ( 10 , Some ( 22 ) ) )
1043
+ . sync_mode ( SlidingSyncMode :: new_paging ( 10 ) . maximum_number_of_rooms_to_fetch ( 22 ) )
1003
1044
. build ( sender) ;
1004
1045
1005
1046
assert_ranges ! {
@@ -1041,7 +1082,7 @@ mod tests {
1041
1082
let ( sender, _receiver) = channel ( 1 ) ;
1042
1083
1043
1084
let mut list = SlidingSyncList :: builder ( "testing" )
1044
- . sync_mode ( SlidingSyncMode :: new_growing ( 10 , None ) )
1085
+ . sync_mode ( SlidingSyncMode :: new_growing ( 10 ) )
1045
1086
. build ( sender) ;
1046
1087
1047
1088
assert_ranges ! {
@@ -1083,7 +1124,7 @@ mod tests {
1083
1124
let ( sender, _receiver) = channel ( 1 ) ;
1084
1125
1085
1126
let mut list = SlidingSyncList :: builder ( "testing" )
1086
- . sync_mode ( SlidingSyncMode :: new_growing ( 10 , Some ( 22 ) ) )
1127
+ . sync_mode ( SlidingSyncMode :: new_growing ( 10 ) . maximum_number_of_rooms_to_fetch ( 22 ) )
1087
1128
. build ( sender) ;
1088
1129
1089
1130
assert_ranges ! {
@@ -1255,7 +1296,7 @@ mod tests {
1255
1296
} ;
1256
1297
1257
1298
// Changing from `Selective` to `Growing`.
1258
- list. set_sync_mode ( SlidingSyncMode :: new_growing ( 10 , None ) ) . unwrap ( ) ;
1299
+ list. set_sync_mode ( SlidingSyncMode :: new_growing ( 10 ) ) . unwrap ( ) ;
1259
1300
1260
1301
assert_ranges ! {
1261
1302
list = list,
@@ -1291,7 +1332,7 @@ mod tests {
1291
1332
} ;
1292
1333
1293
1334
// Changing from `Growing` to `Paging`.
1294
- list. set_sync_mode ( SlidingSyncMode :: new_paging ( 10 , None ) ) . unwrap ( ) ;
1335
+ list. set_sync_mode ( SlidingSyncMode :: new_paging ( 10 ) ) . unwrap ( ) ;
1295
1336
1296
1337
assert_ranges ! {
1297
1338
list = list,
@@ -1490,15 +1531,15 @@ mod tests {
1490
1531
#[ test]
1491
1532
fn test_sliding_sync_mode_serialization ( ) {
1492
1533
assert_json_roundtrip ! (
1493
- from SlidingSyncMode : SlidingSyncMode :: new_paging( 1 , Some ( 2 ) ) => json!( {
1534
+ from SlidingSyncMode : SlidingSyncMode :: from ( SlidingSyncMode :: new_paging( 1 ) . maximum_number_of_rooms_to_fetch ( 2 ) ) => json!( {
1494
1535
"Paging" : {
1495
1536
"batch_size" : 1 ,
1496
1537
"maximum_number_of_rooms_to_fetch" : 2
1497
1538
}
1498
1539
} )
1499
1540
) ;
1500
1541
assert_json_roundtrip ! (
1501
- from SlidingSyncMode : SlidingSyncMode :: new_growing( 1 , Some ( 2 ) ) => json!( {
1542
+ from SlidingSyncMode : SlidingSyncMode :: from ( SlidingSyncMode :: new_growing( 1 ) . maximum_number_of_rooms_to_fetch ( 2 ) ) => json!( {
1502
1543
"Growing" : {
1503
1544
"batch_size" : 1 ,
1504
1545
"maximum_number_of_rooms_to_fetch" : 2
0 commit comments