Implement optional io.Reader in AudioRequest (#303) (#265) (#331)

* Implement optional io.Reader in AudioRequest (#303) (#265)

* Fix err shadowing

* Add test to cover AudioRequest io.Reader usage

* Add additional test cases to cover AudioRequest io.Reader usage

* Add test to cover opening the file specified in an AudioRequest
This commit is contained in:
Mariano Darc
2023-06-05 08:07:13 +02:00
committed by GitHub
parent 61ba5f3369
commit fa694c61c2
4 changed files with 124 additions and 18 deletions

View File

@@ -1,13 +1,16 @@
package openai
import (
"fmt"
"io"
"mime/multipart"
"os"
"path"
)
type FormBuilder interface {
CreateFormFile(fieldname string, file *os.File) error
CreateFormFileReader(fieldname string, r io.Reader, filename string) error
WriteField(fieldname, value string) error
Close() error
FormDataContentType() string
@@ -24,15 +27,28 @@ func NewFormBuilder(body io.Writer) *DefaultFormBuilder {
}
func (fb *DefaultFormBuilder) CreateFormFile(fieldname string, file *os.File) error {
fieldWriter, err := fb.writer.CreateFormFile(fieldname, file.Name())
return fb.createFormFile(fieldname, file, file.Name())
}
func (fb *DefaultFormBuilder) CreateFormFileReader(fieldname string, r io.Reader, filename string) error {
return fb.createFormFile(fieldname, r, path.Base(filename))
}
func (fb *DefaultFormBuilder) createFormFile(fieldname string, r io.Reader, filename string) error {
if filename == "" {
return fmt.Errorf("filename cannot be empty")
}
fieldWriter, err := fb.writer.CreateFormFile(fieldname, filename)
if err != nil {
return err
}
_, err = io.Copy(fieldWriter, file)
_, err = io.Copy(fieldWriter, r)
if err != nil {
return err
}
return nil
}