@@ -15,29 +15,31 @@ mod intercept_message;
15
15
16
16
pub struct EditorWrapper {
17
17
editor : Editor ,
18
- queue : VecDeque < QueuedMessage > ,
19
- }
20
-
21
- #[ allow( clippy:: large_enum_variant) ]
22
- enum QueuedMessage {
23
- Message ( Message ) ,
24
- EditorMessage ( EditorMessage ) ,
18
+ queue : VecDeque < EditorMessage > ,
19
+ messages : Vec < Message > ,
20
+ responses : Vec < NativeMessage > ,
25
21
}
26
22
27
23
impl EditorApi for EditorWrapper {
28
24
fn dispatch ( & mut self , message : EditorMessage ) -> Vec < NativeMessage > {
29
25
self . queue_editor_message ( message) ;
30
26
31
- let mut responses = Vec :: new ( ) ;
32
-
33
- while let Some ( queued_message) = self . queue . pop_front ( ) {
34
- match queued_message {
35
- QueuedMessage :: Message ( message) => self . handle_message ( message, & mut responses) ,
36
- QueuedMessage :: EditorMessage ( editor_message) => self . handle_editor_message ( editor_message, & mut responses) ,
27
+ while !self . queue . is_empty ( ) {
28
+ while let Some ( message) = self . queue . pop_front ( ) {
29
+ self . handle_editor_message ( message) ;
37
30
}
31
+ let frontend_messages = self
32
+ . editor
33
+ . handle_message ( Message :: Batched {
34
+ messages : std:: mem:: take ( & mut self . messages ) . into_boxed_slice ( ) ,
35
+ } )
36
+ . into_iter ( )
37
+ . filter_map ( |m| intercept_frontend_message:: intercept_frontend_message ( m, & mut self . responses ) )
38
+ . collect :: < Vec < _ > > ( ) ;
39
+ self . respond ( NativeMessage :: ToFrontend ( ron:: to_string ( & frontend_messages) . unwrap ( ) . into_bytes ( ) ) ) ;
38
40
}
39
41
40
- responses
42
+ std :: mem :: take ( & mut self . responses )
41
43
}
42
44
43
45
fn poll ( ) -> Vec < NativeMessage > {
@@ -61,6 +63,8 @@ impl EditorWrapper {
61
63
Self {
62
64
editor : Editor :: new ( ) ,
63
65
queue : VecDeque :: new ( ) ,
66
+ messages : Vec :: new ( ) ,
67
+ responses : Vec :: new ( ) ,
64
68
}
65
69
}
66
70
@@ -69,27 +73,22 @@ impl EditorWrapper {
69
73
futures:: executor:: block_on ( graphite_editor:: node_graph_executor:: replace_application_io ( application_io) ) ;
70
74
}
71
75
72
- fn handle_message ( & mut self , message : Message , responses : & mut Vec < NativeMessage > ) {
73
- if let Some ( message) = intercept_message:: intercept_message ( message, responses) {
74
- let messages = self . editor . handle_message ( message) ;
75
- let frontend_messages = messages
76
- . into_iter ( )
77
- . filter_map ( |m| intercept_frontend_message:: intercept_frontend_message ( m, responses) )
78
- . collect :: < Vec < _ > > ( ) ;
79
- responses. push ( NativeMessage :: ToFrontend ( ron:: to_string ( & frontend_messages) . unwrap ( ) . into_bytes ( ) ) ) ;
80
- }
76
+ fn handle_editor_message ( & mut self , message : EditorMessage ) {
77
+ handle_editor_message:: handle_editor_message ( self , message) ;
81
78
}
82
79
83
- fn handle_editor_message ( & mut self , message : EditorMessage , responses : & mut Vec < NativeMessage > ) {
84
- handle_editor_message :: handle_editor_message ( self , message , responses) ;
80
+ pub fn respond ( & mut self , response : NativeMessage ) {
81
+ self . responses . push ( response ) ;
85
82
}
86
83
87
84
pub ( super ) fn queue_editor_message ( & mut self , message : EditorMessage ) {
88
- self . queue . push_back ( QueuedMessage :: EditorMessage ( message) ) ;
85
+ self . queue . push_back ( message) ;
89
86
}
90
87
91
88
pub ( super ) fn queue_message ( & mut self , message : Message ) {
92
- self . queue . push_back ( QueuedMessage :: Message ( message) ) ;
89
+ if let Some ( message) = intercept_message:: intercept_message ( message, & mut self . responses ) {
90
+ self . messages . push ( message) ;
91
+ }
93
92
}
94
93
95
94
pub ( super ) fn poll_node_graph_evaluation ( & mut self ) {
0 commit comments