@@ -4,12 +4,12 @@ use serde::{Deserialize, Serialize};
44
55use super :: { Extensions , Meta , Notification , NotificationNoParam , Request , RequestNoParam } ;
66
7- // serde helper type
87#[ derive( Serialize , Deserialize ) ]
9- struct WithMeta < ' a , T > {
8+ struct WithMeta < ' a , M , P > {
9+ method : M ,
10+ params : P ,
11+ #[ serde( skip_serializing_if = "Option::is_none" ) ]
1012 _meta : Option < Cow < ' a , Meta > > ,
11- #[ serde( flatten) ]
12- _rest : T ,
1313}
1414
1515impl < M , R > Serialize for Request < M , R >
2323 {
2424 let extensions = & self . extensions ;
2525 let _meta = extensions. get :: < Meta > ( ) . map ( Cow :: Borrowed ) ;
26- let body = WithMeta { _meta, _rest : self } ;
27- WithMeta :: serialize ( & body, serializer)
26+ WithMeta :: serialize (
27+ & WithMeta {
28+ method : & self . method ,
29+ params : & self . params ,
30+ _meta,
31+ } ,
32+ serializer,
33+ )
2834 }
2935}
3036
@@ -45,11 +51,19 @@ where
4551 }
4652 Ok ( Request {
4753 extensions,
48- ..body. _rest
54+ method : body. method ,
55+ params : body. params ,
4956 } )
5057 }
5158}
5259
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+
5367impl < M > Serialize for RequestNoParam < M >
5468where
5569 M : Serialize ,
6074 {
6175 let extensions = & self . extensions ;
6276 let _meta = extensions. get :: < Meta > ( ) . map ( Cow :: Borrowed ) ;
63- let body = WithMeta { _meta, _rest : self } ;
64- WithMeta :: serialize ( & body, serializer)
77+ NoParamWithMeta :: serialize (
78+ & NoParamWithMeta {
79+ method : & self . method ,
80+ _meta,
81+ } ,
82+ serializer,
83+ )
6584 }
6685}
6786
@@ -73,15 +92,15 @@ where
7392 where
7493 D : serde:: Deserializer < ' de > ,
7594 {
76- let body = WithMeta :: deserialize ( deserializer) ?;
95+ let body = NoParamWithMeta :: deserialize ( deserializer) ?;
7796 let _meta = body. _meta . map ( |m| m. into_owned ( ) ) ;
7897 let mut extensions = Extensions :: new ( ) ;
7998 if let Some ( meta) = _meta {
8099 extensions. insert ( meta) ;
81100 }
82101 Ok ( RequestNoParam {
83102 extensions,
84- .. body. _rest
103+ method : body. method ,
85104 } )
86105 }
87106}
@@ -97,8 +116,14 @@ where
97116 {
98117 let extensions = & self . extensions ;
99118 let _meta = extensions. get :: < Meta > ( ) . map ( Cow :: Borrowed ) ;
100- let body = WithMeta { _meta, _rest : self } ;
101- WithMeta :: serialize ( & body, serializer)
119+ WithMeta :: serialize (
120+ & WithMeta {
121+ method : & self . method ,
122+ params : & self . params ,
123+ _meta,
124+ } ,
125+ serializer,
126+ )
102127 }
103128}
104129
@@ -119,7 +144,8 @@ where
119144 }
120145 Ok ( Notification {
121146 extensions,
122- ..body. _rest
147+ method : body. method ,
148+ params : body. params ,
123149 } )
124150 }
125151}
@@ -134,8 +160,13 @@ where
134160 {
135161 let extensions = & self . extensions ;
136162 let _meta = extensions. get :: < Meta > ( ) . map ( Cow :: Borrowed ) ;
137- let body = WithMeta { _meta, _rest : self } ;
138- WithMeta :: serialize ( & body, serializer)
163+ NoParamWithMeta :: serialize (
164+ & NoParamWithMeta {
165+ method : & self . method ,
166+ _meta,
167+ } ,
168+ serializer,
169+ )
139170 }
140171}
141172
@@ -147,15 +178,15 @@ where
147178 where
148179 D : serde:: Deserializer < ' de > ,
149180 {
150- let body = WithMeta :: deserialize ( deserializer) ?;
181+ let body = NoParamWithMeta :: deserialize ( deserializer) ?;
151182 let _meta = body. _meta . map ( |m| m. into_owned ( ) ) ;
152183 let mut extensions = Extensions :: new ( ) ;
153184 if let Some ( meta) = _meta {
154185 extensions. insert ( meta) ;
155186 }
156187 Ok ( NotificationNoParam {
157188 extensions,
158- .. body. _rest
189+ method : body. method ,
159190 } )
160191 }
161192}
0 commit comments