Complete loading page to pdf and base API

This commit is contained in:
2023-03-27 22:09:54 +03:00
parent 92469fa3a2
commit 91d8f676ae
24 changed files with 864 additions and 95 deletions

View File

@@ -3,6 +3,7 @@
package openapi
import (
"bytes"
"io"
"mime"
"net/http"
@@ -97,6 +98,94 @@ func decodeAddPageResponse(resp *http.Response) (res *Page, err error) {
return res, errors.Wrap(defRes, "error")
}
func decodeGetFileResponse(resp *http.Response) (res GetFileRes, err error) {
switch resp.StatusCode {
case 200:
// Code 200.
ct, _, err := mime.ParseMediaType(resp.Header.Get("Content-Type"))
if err != nil {
return res, errors.Wrap(err, "parse media type")
}
switch {
case ct == "application/pdf":
reader := resp.Body
b, err := io.ReadAll(reader)
if err != nil {
return res, err
}
response := GetFileOKApplicationPdf{Data: bytes.NewReader(b)}
return &response, nil
case ct == "text/html":
reader := resp.Body
b, err := io.ReadAll(reader)
if err != nil {
return res, err
}
response := GetFileOKTextHTML{Data: bytes.NewReader(b)}
return &response, nil
case ct == "text/plain":
reader := resp.Body
b, err := io.ReadAll(reader)
if err != nil {
return res, err
}
response := GetFileOKTextPlain{Data: bytes.NewReader(b)}
return &response, nil
default:
return res, validate.InvalidContentType(ct)
}
case 404:
// Code 404.
return &GetFileNotFound{}, nil
}
// Convenient error response.
defRes, err := func() (res *ErrorStatusCode, err error) {
ct, _, err := mime.ParseMediaType(resp.Header.Get("Content-Type"))
if err != nil {
return res, errors.Wrap(err, "parse media type")
}
switch {
case ct == "application/json":
buf, err := io.ReadAll(resp.Body)
if err != nil {
return res, err
}
d := jx.DecodeBytes(buf)
var response Error
if err := func() error {
if err := response.Decode(d); err != nil {
return err
}
if err := d.Skip(); err != io.EOF {
return errors.New("unexpected trailing data")
}
return nil
}(); err != nil {
err = &ogenerrors.DecodeBodyError{
ContentType: ct,
Body: buf,
Err: err,
}
return res, err
}
return &ErrorStatusCode{
StatusCode: resp.StatusCode,
Response: response,
}, nil
default:
return res, validate.InvalidContentType(ct)
}
}()
if err != nil {
return res, errors.Wrap(err, "default")
}
return res, errors.Wrap(defRes, "error")
}
func decodeGetPageResponse(resp *http.Response) (res GetPageRes, err error) {
switch resp.StatusCode {
case 200: