defmodule Kinda.CodeGen.NIFDecl do alias Kinda.CodeGen.KindDecl @type dirty() :: :io | :cpu | false @type t() :: %__MODULE__{ wrapper_name: nil | String.t(), nif_name: nil | String.t(), params: [String.t()] | integer() } defstruct nif_name: nil, arity: 0, wrapper_name: nil, params: nil # TODO: make this extensible def from_resource_kind(%KindDecl{module_name: module_name, kind_functions: kind_functions}) do for {f, a} <- [ ptr: 1, ptr_to_opaque: 1, opaque_ptr: 1, array: 1, mut_array: 1, primitive: 1, make: 1, dump: 1, make_from_opaque_ptr: 2, array_as_opaque: 1 ] ++ kind_functions do %__MODULE__{ nif_name: Module.concat(module_name, f), wrapper_name: Module.concat(module_name, f), params: a } end end end