Current section
Files
Jump to
Current section
Files
lib/inspect/angle.ex
defimpl Inspect, for: Angle do
import Inspect.Algebra
@moduledoc """
Defines the inspect protocol for Angles so that they can look pretty.
"""
@degrees "\u00b0"
@radians "\u33ad"
@gradians "\u1d4d"
@prime "\u2032"
@double_prime "\u2033"
@doc false
@spec inspect(Angle.t, any) :: String.t
def inspect(%Angle{d: 0}, _opts), do: "#Angle<0>"
def inspect(%Angle{r: 0}, _opts), do: "#Angle<0>"
def inspect(%Angle{g: 0}, _opts), do: "#Angle<0>"
def inspect(%Angle{dms: {0, 0, 0}}, _opts), do: "#Angle<0>"
def inspect(%Angle{d: n}, opts) when is_number(n), do: concat ["#Angle<", to_doc(n, opts), @degrees, ">"]
def inspect(%Angle{r: n}, opts) when is_number(n), do: concat ["#Angle<", to_doc(n, opts), @radians, ">"]
def inspect(%Angle{g: n}, opts) when is_number(n), do: concat ["#Angle<", to_doc(n, opts), @gradians, ">"]
def inspect(%Angle{dms: {d, 0, 0}}, opts) when is_integer(d), do: concat ["#Angle<", to_doc(d, opts), @degrees, ">"]
def inspect(%Angle{dms: {d, m, 0}}, opts) when is_integer(d) and is_integer(m) do
concat ["#Angle<", to_doc(d, opts), @degrees, " ", to_doc(m, opts), @prime, ">"]
end
def inspect(%Angle{dms: {d, m, s}}, opts) when is_integer(d) and is_integer(m) and is_number(s) do
concat ["#Angle<",
to_doc(d, opts), @degrees, " ",
to_doc(m, opts), @prime, " ",
to_doc(s, opts), @double_prime, ">"]
end
end