@@ -3,15 +3,32 @@ use std::borrow::Cow;
33use serde:: { Deserialize , Serialize } ;
44
55use super :: { Extensions , Meta , Notification , NotificationNoParam , Request , RequestNoParam } ;
6+ #[ derive( Serialize , Deserialize ) ]
7+ struct WithMeta < ' a , P > {
8+ #[ serde( skip_serializing_if = "Option::is_none" ) ]
9+ _meta : Option < Cow < ' a , Meta > > ,
10+ #[ serde( flatten) ]
11+ _rest : P ,
12+ }
613
714#[ derive( Serialize , Deserialize ) ]
8- struct WithMeta < ' a , M , P > {
15+ struct Proxy < ' a , M , P > {
916 method : M ,
10- params : P ,
17+ params : WithMeta < ' a , P > ,
18+ }
19+
20+ #[ derive( Serialize , Deserialize ) ]
21+ struct WithMetaNoParam < ' a > {
1122 #[ serde( skip_serializing_if = "Option::is_none" ) ]
1223 _meta : Option < Cow < ' a , Meta > > ,
1324}
1425
26+ #[ derive( Serialize , Deserialize ) ]
27+ struct ProxyNoParam < ' a , M > {
28+ method : M ,
29+ params : WithMetaNoParam < ' a > ,
30+ }
31+
1532impl < M , R > Serialize for Request < M , R >
1633where
1734 M : Serialize ,
@@ -23,11 +40,13 @@ where
2340 {
2441 let extensions = & self . extensions ;
2542 let _meta = extensions. get :: < Meta > ( ) . map ( Cow :: Borrowed ) ;
26- WithMeta :: serialize (
27- & WithMeta {
43+ Proxy :: serialize (
44+ & Proxy {
2845 method : & self . method ,
29- params : & self . params ,
30- _meta,
46+ params : WithMeta {
47+ _rest : & self . params ,
48+ _meta,
49+ } ,
3150 } ,
3251 serializer,
3352 )
@@ -43,27 +62,20 @@ where
4362 where
4463 D : serde:: Deserializer < ' de > ,
4564 {
46- let body = WithMeta :: deserialize ( deserializer) ?;
47- let _meta = body. _meta . map ( |m| m. into_owned ( ) ) ;
65+ let body = Proxy :: deserialize ( deserializer) ?;
66+ let _meta = body. params . _meta . map ( |m| m. into_owned ( ) ) ;
4867 let mut extensions = Extensions :: new ( ) ;
4968 if let Some ( meta) = _meta {
5069 extensions. insert ( meta) ;
5170 }
5271 Ok ( Request {
5372 extensions,
5473 method : body. method ,
55- params : body. params ,
74+ params : body. params . _rest ,
5675 } )
5776 }
5877}
5978
60- #[ derive( Serialize , Deserialize ) ]
61- struct NoParamWithMeta < ' a , M > {
62- method : M ,
63- #[ serde( skip_serializing_if = "Option::is_none" ) ]
64- _meta : Option < Cow < ' a , Meta > > ,
65- }
66-
6779impl < M > Serialize for RequestNoParam < M >
6880where
6981 M : Serialize ,
@@ -74,10 +86,10 @@ where
7486 {
7587 let extensions = & self . extensions ;
7688 let _meta = extensions. get :: < Meta > ( ) . map ( Cow :: Borrowed ) ;
77- NoParamWithMeta :: serialize (
78- & NoParamWithMeta {
89+ ProxyNoParam :: serialize (
90+ & ProxyNoParam {
7991 method : & self . method ,
80- _meta,
92+ params : WithMetaNoParam { _meta } ,
8193 } ,
8294 serializer,
8395 )
92104 where
93105 D : serde:: Deserializer < ' de > ,
94106 {
95- let body = NoParamWithMeta :: deserialize ( deserializer) ?;
96- let _meta = body. _meta . map ( |m| m. into_owned ( ) ) ;
107+ let body = ProxyNoParam :: < ' _ , _ > :: deserialize ( deserializer) ?;
108+ let _meta = body. params . _meta . map ( |m| m. into_owned ( ) ) ;
97109 let mut extensions = Extensions :: new ( ) ;
98110 if let Some ( meta) = _meta {
99111 extensions. insert ( meta) ;
@@ -116,11 +128,13 @@ where
116128 {
117129 let extensions = & self . extensions ;
118130 let _meta = extensions. get :: < Meta > ( ) . map ( Cow :: Borrowed ) ;
119- WithMeta :: serialize (
120- & WithMeta {
131+ Proxy :: serialize (
132+ & Proxy {
121133 method : & self . method ,
122- params : & self . params ,
123- _meta,
134+ params : WithMeta {
135+ _rest : & self . params ,
136+ _meta,
137+ } ,
124138 } ,
125139 serializer,
126140 )
@@ -136,16 +150,16 @@ where
136150 where
137151 D : serde:: Deserializer < ' de > ,
138152 {
139- let body = WithMeta :: deserialize ( deserializer) ?;
140- let _meta = body. _meta . map ( |m| m. into_owned ( ) ) ;
153+ let body = Proxy :: deserialize ( deserializer) ?;
154+ let _meta = body. params . _meta . map ( |m| m. into_owned ( ) ) ;
141155 let mut extensions = Extensions :: new ( ) ;
142156 if let Some ( meta) = _meta {
143157 extensions. insert ( meta) ;
144158 }
145159 Ok ( Notification {
146160 extensions,
147161 method : body. method ,
148- params : body. params ,
162+ params : body. params . _rest ,
149163 } )
150164 }
151165}
@@ -160,10 +174,10 @@ where
160174 {
161175 let extensions = & self . extensions ;
162176 let _meta = extensions. get :: < Meta > ( ) . map ( Cow :: Borrowed ) ;
163- NoParamWithMeta :: serialize (
164- & NoParamWithMeta {
177+ ProxyNoParam :: serialize (
178+ & ProxyNoParam {
165179 method : & self . method ,
166- _meta,
180+ params : WithMetaNoParam { _meta } ,
167181 } ,
168182 serializer,
169183 )
@@ -178,8 +192,8 @@ where
178192 where
179193 D : serde:: Deserializer < ' de > ,
180194 {
181- let body = NoParamWithMeta :: deserialize ( deserializer) ?;
182- let _meta = body. _meta . map ( |m| m. into_owned ( ) ) ;
195+ let body = ProxyNoParam :: < ' _ , _ > :: deserialize ( deserializer) ?;
196+ let _meta = body. params . _meta . map ( |m| m. into_owned ( ) ) ;
183197 let mut extensions = Extensions :: new ( ) ;
184198 if let Some ( meta) = _meta {
185199 extensions. insert ( meta) ;
0 commit comments