1
1
use imap_codec:: {
2
- decode:: { CommandDecodeError , Decoder } ,
3
- fragmentizer:: { FragmentInfo , Fragmentizer } ,
2
+ fragmentizer:: { FragmentInfo , Fragmentizer , LiteralAnnouncement } ,
4
3
CommandCodec ,
5
4
} ;
6
5
7
6
#[ path = "common/common.rs" ]
8
7
mod common;
9
8
10
9
use common:: { read_more, COLOR_SERVER , RESET } ;
10
+ use imap_types:: core:: LiteralMode ;
11
11
12
12
use crate :: common:: Role ;
13
13
@@ -35,14 +35,27 @@ fn main() {
35
35
36
36
loop {
37
37
// Progress next message.
38
- let fragment_info = fragmentizer. progress ( ) ;
38
+ let Some ( fragment_info) = fragmentizer. progress ( ) else {
39
+ // Read more bytes ...
40
+ read_more ( & mut buffer, Role :: Client ) ;
41
+
42
+ // ... and pass the bytes to the Fragmentizer ...
43
+ fragmentizer. enqueue_bytes ( & buffer) ;
44
+ buffer. clear ( ) ;
45
+
46
+ // ... and try again.
47
+ continue ;
48
+ } ;
39
49
40
50
// The Fragmentizer detected a line that announces a literal.
41
51
// A command continuation request is expected.
42
- if let Some ( FragmentInfo :: Line {
43
- announcement : Some ( _) ,
52
+ if let FragmentInfo :: Line {
53
+ announcement : Some ( LiteralAnnouncement {
54
+ mode : LiteralMode :: Sync ,
55
+ ..
56
+ } ) ,
44
57
..
45
- } ) = fragment_info
58
+ } = fragment_info
46
59
{
47
60
// Simulate a command continuation request ...
48
61
println ! ( "S: {COLOR_SERVER}+ {RESET}" ) ;
@@ -51,16 +64,7 @@ fn main() {
51
64
continue ;
52
65
}
53
66
54
- // Does the Fragmentizer need more bytes?
55
- if fragmentizer. is_message_complete ( ) {
56
- // Read more bytes ...
57
- read_more ( & mut buffer, Role :: Server ) ;
58
-
59
- // ... and pass the bytes to the Fragmentizer ...
60
- fragmentizer. enqueue_bytes ( & buffer) ;
61
- buffer. clear ( ) ;
62
-
63
- // ... and try again.
67
+ if !fragmentizer. is_message_complete ( ) {
64
68
continue ;
65
69
}
66
70
0 commit comments