Packages

Library for working with XDR in Elixir

Current section

Files

Jump to
exdr lib xdr types bool.ex
Raw

lib/xdr/types/bool.ex

defmodule XDR.Type.Bool do
@moduledoc """
Boolean
values are presented in Elixir as true / false and encoded as 1 / 0
"""
defstruct type_name: "Bool", value: nil
@type value() :: boolean()
@type t() :: %__MODULE__{ type_name: String.t(), value: value()}
@type encoding() :: <<_::32>>
defimpl XDR.Type do
alias XDR.Type.Int
def build_type(type, _options \\ []) do
type
end
def resolve_type!(type, _) do
type
end
def build_value!(type, value) when is_boolean(value) do
%{type | value: value}
end
def build_value!(%{type_name: name}, value) do
raise XDR.Error, message: "Invalid value", type: name, data: value
end
def extract_value!(%{value: value}), do: value
def encode!(%{value: true}), do: Int.encode(1)
def encode!(%{value: false}), do: Int.encode(0)
def decode!(type, encoding) do
{value, rest} = Int.decode!(encoding)
type_with_value = build_value!(type, value == 1)
{type_with_value, rest}
end
end
end