@@ -111,10 +111,18 @@ defmodule OpenApiTypesense.Client do
111111 query: URI . encode_query ( opts [ :opts ] || [ ] )
112112 }
113113
114+ encoded_body =
115+ if opts [ :request ] do
116+ [ content_type ] = opts [ :request ]
117+ parse_content_type ( content_type , opts [ :body ] )
118+ else
119+ Jason . encode_to_iodata! ( opts [ :body ] )
120+ end
121+
114122 { _req , resp } =
115123 [
116124 method: opts [ :method ] || :get ,
117- body: opts [ :body ] ,
125+ body: encoded_body ,
118126 url: url ,
119127 retry: retry ,
120128 max_retries: max_retries ,
@@ -130,6 +138,23 @@ defmodule OpenApiTypesense.Client do
130138 parse_resp ( resp , opts [ :response ] )
131139 end
132140
141+ defp parse_content_type ( { "application/octet-stream" , { :string , :generic } } , body ) do
142+ Enum . map_join ( body , "\n " , & Jason . encode_to_iodata! / 1 )
143+ end
144+
145+ defp parse_content_type ( { "application/json" , _ } , body ) do
146+ Jason . encode_to_iodata! ( body )
147+ end
148+
149+ # defp parse_content_type({"application/json", {mod, :t}}, body) do
150+ # # Checks if map keys are atom or string
151+ # if Enum.all?(Map.keys(body), &is_atom/1) do
152+ # Jason.encode_to_iodata!(struct(mod, body))
153+ # else
154+ # Jason.encode_to_iodata!(body)
155+ # end
156+ # end
157+
133158 defp parse_resp ( % Req.TransportError { } = error , _opts_resp ) do
134159 { :error , Exception . message ( error ) }
135160 end
0 commit comments