The problem
I need to create a string interpolating a list of integers in it.
"""
SomeQuery {
someQuery(articleIds: #{inspect(article_ids)}) {
edges {
node {
id
}
}
}
}
"""
Failing example
For example, the list [725553234]
makes the example above to fail:
article_ids = [725553234]
"""
SomeQuery {
someQuery(articleIds: #{article_ids}) {
edges {
node {
id
}
}
}
}
"""
** (exit) an exception was raised: ** (UnicodeConversionError) invalid code point 725553234 (elixir) lib/list.ex:839: List.to_string/1 (commsapp_api) lib/my_project/client.ex:70: CommsappApi.News.Clients.CommunicationMs.Client.articles_feed/3
System
Erlang/OTP 20 [erts-9.3] [source] [64-bit] [smp:8:8] [ds:8:8:10]
[async-threads:10] [hipe] [kernel-poll:false] [dtrace]Elixir 1.6.3 (compiled with OTP 20)
Tried solutions
It tried the following:
- Using
inspect
is not working:articleIds: #{inspect(article_ids)}
- Using the IO.inspect with the
:char_lists
opt with:as_list
:IO.inspect(article_ids, char_lists: :as_lists
- Trying to join the integer list as string with:
articleIds: [#{Enum.join(article_ids, ", ")}]
- Interpolating the integers parsed to string with:
Enum.map(article_ids, &Integer.to_string/1) |> Enum.join(", ")
- I tried using a single line instead of a multiline string, not working
- Many things I don’t remember after trying different solutions… >.<
Guesses
The problem comes when using the brackets in the string, Elixir treats the interporlation as a list and raises the error because it cannot find the codepoints.
Ideas?
Thanks in advance!