@@ -173,20 +173,84 @@ func postAndUnmarshal(environment environmentURL, endpoint string,
173173 }
174174 res .Body .Close ()
175175
176+ return unmarshalPostMFA (res , raw )
177+ }
178+
179+ func patchAndUnmarshal (environment environmentURL , endpoint string ,
180+ body io.Reader ) (* postResponse , * mfaResponse , error ) {
181+
182+ httpClient := & http.Client {}
183+ req , err := http .NewRequest ("PATCH" , string (environment )+ endpoint , body )
184+ if err != nil {
185+ return nil , nil , err
186+ }
187+ req .Header .Add ("Content-Type" , "application/json" )
188+ res , err := httpClient .Do (req )
189+ if err != nil {
190+ return nil , nil , err
191+ }
192+ raw , err := ioutil .ReadAll (res .Body )
193+ if err != nil {
194+ return nil , nil , err
195+ }
196+ res .Body .Close ()
197+
198+ return unmarshalPostMFA (res , raw )
199+ }
200+
201+ func deleteAndUnmarshal (environment environmentURL , endpoint string ,
202+ body io.Reader ) (* deleteResponse , error ) {
203+
204+ httpClient := & http.Client {}
205+ req , err := http .NewRequest ("DELETE" , string (environment )+ endpoint , body )
206+ if err != nil {
207+ return nil , err
208+ }
209+ req .Header .Add ("Content-Type" , "application/json" )
210+ res , err := httpClient .Do (req )
211+ if err != nil {
212+ return nil , err
213+ }
214+ raw , err := ioutil .ReadAll (res .Body )
215+ if err != nil {
216+ return nil , err
217+ }
218+ res .Body .Close ()
219+
220+ // Successful response
221+ var deleteRes deleteResponse
222+ if res .StatusCode == 200 {
223+ if err = json .Unmarshal (raw , & deleteRes ); err != nil {
224+ return nil , err
225+ }
226+ return & deleteRes , nil
227+ }
228+ // Attempt to unmarshal into Plaid error format
229+ var plaidErr plaidError
230+ if err = json .Unmarshal (raw , & plaidErr ); err != nil {
231+ return nil , err
232+ }
233+ plaidErr .StatusCode = res .StatusCode
234+ return nil , plaidErr
235+ }
236+
237+ // Unmarshals response into postResponse, mfaResponse, or plaidError
238+ func unmarshalPostMFA (res * http.Response , body []byte ) (* postResponse , * mfaResponse , error ) {
176239 // Different marshaling cases
177240 var mfaInter mfaIntermediate
178241 var postRes postResponse
242+ var err error
179243 switch {
180244 // Successful response
181245 case res .StatusCode == 200 :
182- if err = json .Unmarshal (raw , & postRes ); err != nil {
246+ if err = json .Unmarshal (body , & postRes ); err != nil {
183247 return nil , nil , err
184248 }
185249 return & postRes , nil , nil
186250
187251 // MFA case
188252 case res .StatusCode == 201 :
189- if err = json .Unmarshal (raw , & mfaInter ); err != nil {
253+ if err = json .Unmarshal (body , & mfaInter ); err != nil {
190254 return nil , nil , err
191255 }
192256 mfaRes := mfaResponse {Type : mfaInter .Type , AccessToken : mfaInter .AccessToken }
@@ -277,47 +341,11 @@ func postAndUnmarshal(environment environmentURL, endpoint string,
277341 // Error case, attempt to unmarshal into Plaid error format
278342 case res .StatusCode >= 400 :
279343 var plaidErr plaidError
280- if err = json .Unmarshal (raw , & plaidErr ); err != nil {
344+ if err = json .Unmarshal (body , & plaidErr ); err != nil {
281345 return nil , nil , err
282346 }
283347 plaidErr .StatusCode = res .StatusCode
284348 return nil , nil , plaidErr
285349 }
286350 return nil , nil , errors .New ("Unknown Plaid Error - Status:" + string (res .StatusCode ))
287351}
288-
289- func deleteAndUnmarshal (environment environmentURL , endpoint string ,
290- body io.Reader ) (* deleteResponse , error ) {
291-
292- httpClient := & http.Client {}
293- req , err := http .NewRequest ("DELETE" , string (environment )+ endpoint , body )
294- if err != nil {
295- return nil , err
296- }
297- req .Header .Add ("Content-Type" , "application/json" )
298- res , err := httpClient .Do (req )
299- if err != nil {
300- return nil , err
301- }
302- raw , err := ioutil .ReadAll (res .Body )
303- if err != nil {
304- return nil , err
305- }
306- res .Body .Close ()
307-
308- // Successful response
309- var deleteRes deleteResponse
310- if res .StatusCode == 200 {
311- if err = json .Unmarshal (raw , & deleteRes ); err != nil {
312- return nil , err
313- }
314- return & deleteRes , nil
315- }
316- // Attempt to unmarshal into Plaid error format
317- var plaidErr plaidError
318- if err = json .Unmarshal (raw , & plaidErr ); err != nil {
319- return nil , err
320- }
321- plaidErr .StatusCode = res .StatusCode
322- return nil , plaidErr
323- }
0 commit comments