lib/codegen/resource.ex

defmodule Kinda.CodeGen.Resource do
  alias Kinda.CodeGen.Type

  def resource_type_struct("[*c]const " <> type, %{} = resource_kind_map) do
    mod = Map.fetch!(resource_kind_map, type)
    "#{mod}.Array"
  end

  def resource_type_struct("[*c]" <> type, %{} = resource_kind_map) do
    mod = Map.fetch!(resource_kind_map, type)
    "#{mod}.Ptr"
  end

  def resource_type_struct(type, %{} = resource_kind_map) do
    mod = Map.fetch!(resource_kind_map, type)
    "#{mod}"
  end

  def resource_type_resource_kind(type, %{} = resource_kind_map) do
    resource_type_struct(type, resource_kind_map) <> ".resource"
  end

  def resource_type_var(type, %{} = resource_kind_map) do
    resource_type_resource_kind(type, resource_kind_map) <> ".t"
  end

  def resource_open(%Type{kind_name: kind_name}) do
    """
    #{kind_name}.open_all(env);
    """
  end
end