11use crate :: {
2- core:: {
3- Id ,
4- client:: Client ,
5- error:: { Result , ServerError } ,
6- } ,
2+ core:: { Id , client:: Client , error:: Result } ,
73 nodes:: { Message , Node , alias:: get_original} ,
84} ;
95use dashmap:: DashMap ;
10- use serde:: Serialize ;
116use stardust_xr_wire:: {
12- flex:: serialize,
137 messenger:: MethodResponse ,
148 scenegraph:: { self , ScenegraphError } ,
159} ;
@@ -19,62 +13,6 @@ use std::{
1913} ;
2014use tracing:: { debug, debug_span} ;
2115
22- pub struct MethodResponseSender ( pub ( crate ) MethodResponse ) ;
23- impl MethodResponseSender {
24- pub fn send_err ( self , error : ScenegraphError ) {
25- self . 0 . send ( Err ( error) ) ;
26- }
27- pub fn send < T : Serialize > ( self , result : Result < T , ServerError > ) {
28- let data = match result {
29- Ok ( d) => d,
30- Err ( e) => {
31- self . 0 . send ( Err ( ScenegraphError :: MemberError {
32- error : e. to_string ( ) ,
33- } ) ) ;
34- return ;
35- }
36- } ;
37- let Ok ( serialized) = stardust_xr_wire:: flex:: serialize ( data) else {
38- self . 0 . send ( Err ( ScenegraphError :: MemberError {
39- error : "Internal: Failed to serialize" . to_string ( ) ,
40- } ) ) ;
41- return ;
42- } ;
43- self . 0 . send ( Ok ( ( & serialized, Vec :: < OwnedFd > :: new ( ) ) ) ) ;
44- }
45- pub fn wrap < T : Serialize , F : FnOnce ( ) -> Result < T > > ( self , f : F ) {
46- self . send ( f ( ) )
47- }
48- pub fn wrap_async < T : Serialize > (
49- self ,
50- f : impl Future < Output = Result < ( T , Vec < OwnedFd > ) > > + Send + ' static ,
51- ) {
52- tokio:: task:: spawn ( async move {
53- let ( value, fds) = match f. await {
54- Ok ( d) => d,
55- Err ( e) => {
56- self . 0 . send ( Err ( ScenegraphError :: MemberError {
57- error : e. to_string ( ) ,
58- } ) ) ;
59- return ;
60- }
61- } ;
62- let Ok ( serialized) = serialize ( value) else {
63- self . 0 . send ( Err ( ScenegraphError :: MemberError {
64- error : "Internal: Failed to serialize" . to_string ( ) ,
65- } ) ) ;
66- return ;
67- } ;
68- self . 0 . send ( Ok ( ( & serialized, fds) ) ) ;
69- } ) ;
70- }
71- }
72- impl std:: fmt:: Debug for MethodResponseSender {
73- fn fmt ( & self , f : & mut std:: fmt:: Formatter < ' _ > ) -> std:: fmt:: Result {
74- f. debug_struct ( "TypedMethodResponse" ) . finish ( )
75- }
76- }
77-
7816#[ derive( Default ) ]
7917pub struct Scenegraph {
8018 pub ( super ) client : OnceLock < Weak < Client > > ,
@@ -157,7 +95,7 @@ impl scenegraph::Scenegraph for Scenegraph {
15795 data : data. to_vec ( ) ,
15896 fds,
15997 } ,
160- MethodResponseSender ( response) ,
98+ response. into ( ) ,
16199 ) ;
162100 }
163101}
0 commit comments