bitwalker/toml-elixir

Cannot customize Table Array Transforms

Closed this issue · 0 comments

I am trying to use this library, it is working pretty well but for my project I need to be able to customize the table array transform function.

I made an example to show what happens with a simple toml input:

Transform function used for log purpose:

defmodule TestToml do
  use Toml.Transform

  def transform(k, v) do
    {k, v}
    |> IO.inspect
    v
  end
end

Input variable:

input = """
[servers.alpha]
  ip = "192.168.1.1"

  [[servers.alpha.ports]]
  Number = 8001
  [[servers.alpha.ports]]
  Number = 8002

[servers.beta]
ip = "192.168.1.2"

  [[servers.beta.ports]]
  Number = 8082
  [[servers.beta.ports]]
  Number = 8083
"""
iex(1)> Toml.decode(input, transforms: [TestToml])
{"ip", "192.168.1.1"}
{"Number", 8001}
{"Number", 8002}
{"alpha",
 %{"ip" => "192.168.1.1", "ports" => [%{"Number" => 8001}, %{"Number" => 8002}]}}
{"ip", "192.168.1.2"}
{"Number", 8082}
{"Number", 8083}
{"beta",
 %{"ip" => "192.168.1.2", "ports" => [%{"Number" => 8082}, %{"Number" => 8083}]}}
{"servers",
 %{
   "alpha" => %{
     "ip" => "192.168.1.1",
     "ports" => [%{"Number" => 8001}, %{"Number" => 8002}]
   },
   "beta" => %{
     "ip" => "192.168.1.2",
     "ports" => [%{"Number" => 8082}, %{"Number" => 8083}]
   }
 }}
{:ok,
 %{
   "servers" => %{
     "alpha" => %{
       "ip" => "192.168.1.1",
       "ports" => [%{"Number" => 8001}, %{"Number" => 8002}]
     },
     "beta" => %{
       "ip" => "192.168.1.2",
       "ports" => [%{"Number" => 8082}, %{"Number" => 8083}]
     }
   }
 }}
iex(2)>

In the logs we can see that the key ports never appear in the transform function even if it is properly converted