@@ -63,7 +63,7 @@ impl Multipart {
6363 fn build_form ( & mut self , py : Python ) -> PyResult < multipart:: Form > {
6464 let mut form = multipart:: Form :: new ( ) ;
6565 for part in & mut self . parts {
66- let ( name, inner) = part. build_form_part ( py) ?;
66+ let ( name, inner) = part. build_part ( py) ?;
6767 form = form. part ( name, inner) ;
6868 }
6969 Ok ( form)
@@ -121,55 +121,43 @@ impl Part {
121121 }
122122 }
123123
124- fn build_inner ( value : Value , length : Option < u64 > ) -> Result < multipart:: Part , Error > {
125- Ok ( match value {
126- Value :: Text ( text) => multipart:: Part :: stream ( Body :: from ( Bytes :: from_owner ( text) ) ) ,
127- Value :: Bytes ( bytes) => multipart:: Part :: stream ( Body :: from ( Bytes :: from_owner ( bytes) ) ) ,
128- Value :: File ( path) => pyo3_async_runtimes:: tokio:: get_runtime ( )
129- . block_on ( multipart:: Part :: file ( path) )
130- . map_err ( Error :: from) ?,
131- Value :: Stream ( stream) => {
132- let stream = Body :: wrap_stream ( stream) ;
133- match length {
134- Some ( length) => multipart:: Part :: stream_with_length ( stream, length) ,
135- None => multipart:: Part :: stream ( stream) ,
136- }
137- }
138- } )
139- }
140-
141- fn clone_value_or_take ( & mut self , py : Python ) -> PyResult < Value > {
142- self . value
124+ fn build_part ( & mut self , py : Python ) -> PyResult < ( String , multipart:: Part ) > {
125+ let value = self
126+ . value
143127 . as_ref ( )
144128 . and_then ( |value| value. try_clone ( py) )
145129 . or_else ( || self . value . take ( ) )
146- . ok_or_else ( || Error :: Memory . into ( ) )
147- }
148-
149- fn build_form_part ( & mut self , py : Python ) -> PyResult < ( String , multipart:: Part ) > {
150- let value = self . clone_value_or_take ( py) ?;
151- let name = self . name . clone ( ) ;
152- let filename = self . filename . clone ( ) ;
153- let mime = self . mime . clone ( ) ;
154- let length = self . length ;
155- let headers = self . headers . clone ( ) ;
130+ . ok_or_else ( || Error :: Memory ) ?;
156131
157132 py. detach ( move || {
158- let mut inner = Self :: build_inner ( value, length) ?;
133+ let mut inner = match value {
134+ Value :: Text ( text) => multipart:: Part :: stream ( Bytes :: from_owner ( text) ) ,
135+ Value :: Bytes ( bytes) => multipart:: Part :: stream ( Bytes :: from_owner ( bytes) ) ,
136+ Value :: File ( path) => pyo3_async_runtimes:: tokio:: get_runtime ( )
137+ . block_on ( multipart:: Part :: file ( path) )
138+ . map_err ( Error :: from) ?,
139+ Value :: Stream ( stream) => {
140+ let stream = Body :: wrap_stream ( stream) ;
141+ match self . length {
142+ Some ( length) => multipart:: Part :: stream_with_length ( stream, length) ,
143+ None => multipart:: Part :: stream ( stream) ,
144+ }
145+ }
146+ } ;
159147
160- if let Some ( filename) = filename {
148+ if let Some ( filename) = self . filename . clone ( ) {
161149 inner = inner. file_name ( filename) ;
162150 }
163151
164- if let Some ( mime) = mime {
165- inner = inner. mime_str ( & mime) . map_err ( Error :: Library ) ?;
152+ if let Some ( ref mime) = self . mime {
153+ inner = inner. mime_str ( mime) . map_err ( Error :: Library ) ?;
166154 }
167155
168- if let Some ( headers) = headers {
156+ if let Some ( headers) = self . headers . clone ( ) {
169157 inner = inner. headers ( headers. 0 ) ;
170158 }
171159
172- Ok ( ( name, inner) )
160+ Ok ( ( self . name . clone ( ) , inner) )
173161 } )
174162 }
175163
0 commit comments