lib/kinda.ex

defmodule Kinda do
  alias Kinda.CodeGen.Type
  require Logger

  @moduledoc """
  Documentation for `Kinda`.
  """

  defp is_array(%Type{zig_t: type}) do
    is_array(type)
  end

  defp is_array("[*c]const " <> _type) do
    true
  end

  defp is_array(type) when is_binary(type) do
    false
  end

  defp is_ptr("[*c]" <> _type) do
    true
  end

  defp is_ptr(type) when is_binary(type) do
    false
  end

  def unwrap_ref(%{ref: ref}) do
    ref
  end

  def unwrap_ref(arguments) when is_list(arguments) do
    Enum.map(arguments, &unwrap_ref/1)
  end

  def unwrap_ref(term) do
    term
  end

  def module_name(zig_t, forward_module, zig_t_module_map) do
    if is_array(zig_t) do
      forward_module |> Module.concat("Array")
    else
      if is_ptr(zig_t) do
        forward_module |> Module.concat("Ptr")
      else
        zig_t_module_map |> Map.fetch!(zig_t)
      end
    end
  end
end