defmodule Kinda.CodeGen.Resource do alias Kinda.CodeGen.KindDecl def resource_type_struct( {:cptr, %Zig.Parser.PointerOptions{align: nil, const: true, volatile: false, allowzero: false}, [type: type]}, %{} = resource_kind_map ) do mod = Map.fetch!(resource_kind_map, type) "#{mod}.Array" end def resource_type_struct( {:cptr, %Zig.Parser.PointerOptions{align: nil, const: false, volatile: false, allowzero: false}, [type: 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(%KindDecl{kind_name: kind_name}) when kind_name in ~w{USize OpaquePtr OpaqueArray} do """ #{kind_name}.open_all(env); kinda.aliasKind(#{kind_name}, kinda.Internal.#{kind_name}); """ end def resource_open(%KindDecl{kind_name: kind_name}) do """ #{kind_name}.open_all(env); """ end end