defmodule Zig.Type.Resource do alias Zig.Type use Type defstruct [:name] @type t :: %__MODULE__{name: String.t()} def from_json(%{"name" => name, "payload" => payload}, module) when not is_nil(module) do # TODO: use the Zig parser to do this in the future. name = ~r/resource.Resource\(([a-zA-Z0-9_\*\.\[\]\(\)\s]+),sema/ |> Regex.replace(name, "Resource(#{payload},root") |> String.replace(".#{module}", "nif") |> String.replace("stub_erl_nif", "e") %__MODULE__{name: name} end def to_string(resource), do: resource.name def to_call(resource), do: resource.name def spec(_resource, context, opts) do case {context, Keyword.get(opts, :type)} do {:return, :binary} -> Type.spec(:binary) {_, _} -> Type.spec(:reference) end end def return_allowed?(_resource), do: true end