sriki

sriki

Protocol String.Chars not implemented for

I got the error mentioned in the title while running the following code. The weird part is I did get the response I expected but with this message attached.

defmodule Kodi.Worker do
def get_response() do
    result = url_for() |> HTTPoison.get |> parse_response
    case result do
        {:ok, response} -> "response: #{response}"
        :error -> "query error"
    end
end

defp url_for() do
    "http://192.168.0.104:8080/jsonrpc?request={%22jsonrpc%22:%20%222.0%22,%20%22id%22:%201,%20%22method%22:%20%22Playlist.GetPlaylists%22}"
end

defp parse_response({:ok, %HTTPoison.Response{body: body, status_code: 200}}) do
    body |> JSON.decode! |> filter_response
end

defp parse_response(_) do
    :error
end

defp filter_response(json) do
    try do
        #response = (json["result"])
        #{:ok, response}
        {:ok, json}
    rescue
        _ -> :error
    end
end
end

Any idea?

EDIT:
Error message:
** (Protocol.UndefinedError) protocol String.Chars not implemented for %HTTPoison.Response{body: “{"id":1,"jsonrpc":"2.0","result":[{"playlistid":0,"type":"audio"},{"playlistid":1,"type":"video"},{"playlistid":2,"type":"picture"}]}”, headers: [{“Content-Length”, “133”}, {“Content-Type”, “application/json”}, {“Date”, “Wed, 04 May 2016 05:00:55 GMT”}], status_code: 200}
(elixir) lib/string/chars.ex:3: String.Chars.impl_for!/1
(elixir) lib/string/chars.ex:17: String.Chars.to_string/1
(kodi) lib/worker.ex:5: Kodi.Worker.get_response/0

It looks like you are correct. I might be treating the response as string when it’s not. I will look into it again to figure out how to fix it. Thanks.

I made a mistake in my code. I am fixing it and update the thread “soon”.

Most Liked

hubertlepicki

hubertlepicki

You are not getting this error caused by the code above.

What may be happening is that you are getting a JSON response out from the get_response() function, and later on treat it as a string, while it is Map.

I usually get this error message when I try to use IO.puts instead of IO.inspect to print something out to console that is not a string.

Fuller code example would be better, along with full error message (you cut it off in most interesting part, before the module name).

31
Post #3
guljarpd

guljarpd

#hubertlepicki
Thanks,
Your post saved my lot of time, same issue I was also facing.

NobbZ

NobbZ

It would have been much easier if you had posted the full errormessage including the module for that String.Chars is not implemented and the line number it is complaining about.

So I have to guess for now where the message does come from, and the sole possbility I do see for now is this line: {:ok, response} -> "response: #{response}". response is of type HTTPotion.Response or HTTPotion..AsyncResponse and after a quick look up in the sources I wasn’t able to find a defimpl for both of them and they don’t seem to have Inspect implemented either (there was not a single defimpl in the repository according to github search).

So If that is really the line causing you trouble, You need to get the information you want to have in the string in another way.

sriki

sriki

I missed the “!” in the above line. With that added, I still got an error message but it’s more about the json data structure and how it’s being parsed. I will deal with it. Thanks for pointing in the right direction and apologies for cutting off the full error message.

pixare40

pixare40

This saved me as well. Thi was my exact issue

Where Next?

Popular in Questions Top

sergio
In Ruby, I can go: User.find_by(email: "foobar@email.com").update(email: "hello@email.com") How can I do something similar in Elixir? ...
New
9mm
I am constructing a JSON object (map) and I need to conditionally set a field. I’m trying to write proper elixir-way code… and I’m at a l...
New
nobody
How to bind a phoenix app to a specific ip address? could not find anything about that, nowhere, unfortunately, but for me this is quite...
New
fireproofsocks
Forgive me if this is obvious, but how does one delete a database record WITHOUT selecting it first? Ecto.Repo — Ecto v3.14.0 has exampl...
New
jay1
Why is it that the mnesia database isn’t the most preferred database for use in Elixir/Phoenix?
New
beno
I will often find my self writing things similar to: case some_value do nil -> something() "" -> something() _ -> somethi...
New
vonH
When I run the Plug and I recompile I wind up having to use Ctrl C to quit iex and start again. Witht the help of rlwrap I can use the cu...
New
romenigld
I am trying to run a deploy with docker and I successfully runned with this command: docker build -t romenigld/blog-prod . but when I t...
New
dotdotdotPaul
Okay, I’m having a heck of a time trying to figure out how to best handle the validation of belongs_to associations in Ecto. I’m sure I’...
New
lanycrost
Hi everyone! I need implement if…else if…else condition from my elixir code, and anymore of this control flow structures not work proper...
New

Other popular topics Top

Darmani72
If I have a post route which an argument: post /my_post_route/:my_param1, MyController.my_post_handler How would get the post params ...
New
marius95
Hello everyone, I try to use an Javascript Event Handler in my root.html.leex file. Therefore I created a function in the app.js file: ...
New
malloryerik
Hi, this is for people who, like me, have had some friction using .html.heex templates in VSCode. The solution seems to be, in a hyphena...
New
9mm
I am constructing a JSON object (map) and I need to conditionally set a field. I’m trying to write proper elixir-way code… and I’m at a l...
New
fireproofsocks
Forgive me if this is obvious, but how does one delete a database record WITHOUT selecting it first? Ecto.Repo — Ecto v3.14.0 has exampl...
New
josevalim
Hi everyone, One of the features added to Elixir early on to help integration with Erlang code was the idea of overridable function defi...
New
vrod
I am using the Starship cross-shell prompt – it seems pretty nice, but I get some errors: [WARN] - (starship::utils): Executing command ...
New
Emily
I have VueJS GUIs with the project generated using Webpack. I have Elixir modules that will need to be used by the VueJS GUIs. I forese...
New
AstonJ
Please see the new poll here: Which code editor or IDE do you use? (Poll) (2022 Edition) It’s been a while since we first asked this, I...
208 31142 143
New
komlanvi
Hi everyone, I was playing with phoenix liveView but I run into an issue. I have a form and want to validate each input text when the te...
New

We're in Beta

About us Mission Statement