defmodule Zig.Type.Optional do
alias Zig.Type
use Type
defstruct [:child]
@type t :: %__MODULE__{child: Type.t()}
def from_json(%{"child" => child}, module),
do: %__MODULE__{child: Type.from_json(child, module)}
def to_string(optional), do: "?#{Kernel.to_string(optional.child)}"
def to_call(optional), do: "?#{Type.to_call(optional.child)}"
def return_allowed?(optional), do: Type.return_allowed?(optional.child)
def spec(%{child: child}, context, opts) do
quote do
unquote(Type.spec(child, context, opts)) | nil
end
end
def of(child), do: %__MODULE__{child: child}
end