Include address scope in inspect output.

This commit is contained in:
James Harton 2017-10-11 17:41:57 +13:00
parent d92a777500
commit ee7b25e79c
4 changed files with 19 additions and 16 deletions

View file

@ -1,5 +1,5 @@
defimpl Inspect, for: IP.Address do defimpl Inspect, for: IP.Address do
alias IP.Address alias IP.{Address, Scope}
import Inspect.Algebra import Inspect.Algebra
@moduledoc """ @moduledoc """
@ -12,13 +12,14 @@ defimpl Inspect, for: IP.Address do
## Examples ## Examples
iex> IP.Address.from_string!("192.0.2.1", 4) iex> IP.Address.from_string!("192.0.2.1", 4)
#IP.Address<192.0.2.1> #IP.Address<192.0.2.1 DOCUMENTATION>
iex> IP.Address.from_string!("2001:db8::1", 6) iex> IP.Address.from_string!("2001:db8::1", 6)
#IP.Address<2001:db8::1> #IP.Address<2001:db8::1 DOCUMENTATION>
""" """
@spec inspect(Address.t, list) :: binary @spec inspect(Address.t, list) :: binary
def inspect(address, _opts) do def inspect(address, _opts) do
concat ["#IP.Address<#{address}>"] scope = Scope.address_scope(address)
concat ["#IP.Address<#{address} #{scope}>"]
end end
end end

View file

@ -395,7 +395,7 @@ defmodule IP.Address do
iex> "192.0.2.1" iex> "192.0.2.1"
...> |> IP.Address.from_string!() ...> |> IP.Address.from_string!()
...> |> IP.Address.to_6to4() ...> |> IP.Address.to_6to4()
#IP.Address<2002:c000:201::> #IP.Address<2002:c000:201:: GLOBAL UNICAST (6to4)>
""" """
@spec to_6to4(t) :: {:ok, t} | {:error, term} @spec to_6to4(t) :: {:ok, t} | {:error, term}
def to_6to4(%Address{address: address, version: 4}) do def to_6to4(%Address{address: address, version: 4}) do
@ -435,7 +435,7 @@ defmodule IP.Address do
...> |> IP.Address.from_string!() ...> |> IP.Address.from_string!()
...> |> IP.Address.from_6to4() ...> |> IP.Address.from_6to4()
...> |> inspect() ...> |> inspect()
"{:ok, #IP.Address<192.0.2.1>}" "{:ok, #IP.Address<192.0.2.1 DOCUMENTATION>}"
iex> "2001:db8::" iex> "2001:db8::"
...> |> IP.Address.from_string!() ...> |> IP.Address.from_string!()
@ -477,13 +477,13 @@ defmodule IP.Address do
...> |> IP.Address.from_string!() ...> |> IP.Address.from_string!()
...> |> IP.Address.teredo() ...> |> IP.Address.teredo()
...> |> Map.get(:server) ...> |> Map.get(:server)
#IP.Address<65.54.227.120> #IP.Address<65.54.227.120 GLOBAL UNICAST>
iex> "2001:0:4136:e378:8000:63bf:3fff:fdd2" iex> "2001:0:4136:e378:8000:63bf:3fff:fdd2"
...> |> IP.Address.from_string!() ...> |> IP.Address.from_string!()
...> |> IP.Address.teredo() ...> |> IP.Address.teredo()
...> |> Map.get(:client) ...> |> Map.get(:client)
#IP.Address<63.255.253.210> #IP.Address<63.255.253.210 GLOBAL UNICAST>
iex> "2001:0:4136:e378:8000:63bf:3fff:fdd2" iex> "2001:0:4136:e378:8000:63bf:3fff:fdd2"
...> |> IP.Address.from_string!() ...> |> IP.Address.from_string!()

View file

@ -188,7 +188,7 @@ defmodule IP.Prefix do
iex> IP.Prefix.from_string!("192.0.2.0/24") iex> IP.Prefix.from_string!("192.0.2.0/24")
...> |> IP.Prefix.subnet_mask() ...> |> IP.Prefix.subnet_mask()
#IP.Address<255.255.255.0> #IP.Address<255.255.255.0 RESERVED>
""" """
@spec subnet_mask(t) :: binary @spec subnet_mask(t) :: binary
def subnet_mask(%Prefix{mask: mask, address: %Address{version: 4}}) do def subnet_mask(%Prefix{mask: mask, address: %Address{version: 4}}) do
@ -203,7 +203,7 @@ defmodule IP.Prefix do
iex> IP.Prefix.from_string!("192.0.2.0/24") iex> IP.Prefix.from_string!("192.0.2.0/24")
...> |> IP.Prefix.wildcard_mask() ...> |> IP.Prefix.wildcard_mask()
#IP.Address<0.0.0.255> #IP.Address<0.0.0.255 CURRENT NETWORK>
""" """
@spec wildcard_mask(t) :: binary @spec wildcard_mask(t) :: binary
def wildcard_mask(%Prefix{mask: mask, address: %Address{version: 4}}) do def wildcard_mask(%Prefix{mask: mask, address: %Address{version: 4}}) do
@ -220,11 +220,11 @@ defmodule IP.Prefix do
iex> IP.Prefix.from_string!("192.0.2.128/24") iex> IP.Prefix.from_string!("192.0.2.128/24")
...> |> IP.Prefix.first() ...> |> IP.Prefix.first()
#IP.Address<192.0.2.0> #IP.Address<192.0.2.0 DOCUMENTATION>
iex> IP.Prefix.from_string!("2001:db8::128/64") iex> IP.Prefix.from_string!("2001:db8::128/64")
...> |> IP.Prefix.first() ...> |> IP.Prefix.first()
#IP.Address<2001:db8::> #IP.Address<2001:db8:: DOCUMENTATION>
""" """
@spec first(t) :: Address.t @spec first(t) :: Address.t
def first(%Prefix{address: %Address{address: address, version: version}, mask: mask}) do def first(%Prefix{address: %Address{address: address, version: version}, mask: mask}) do
@ -238,11 +238,11 @@ defmodule IP.Prefix do
iex> IP.Prefix.from_string!("192.0.2.128/24") iex> IP.Prefix.from_string!("192.0.2.128/24")
...> |> IP.Prefix.last() ...> |> IP.Prefix.last()
#IP.Address<192.0.2.255> #IP.Address<192.0.2.255 DOCUMENTATION>
iex> IP.Prefix.from_string!("2001:db8::128/64") iex> IP.Prefix.from_string!("2001:db8::128/64")
...> |> IP.Prefix.last() ...> |> IP.Prefix.last()
#IP.Address<2001:db8::ffff:ffff:ffff:ffff> #IP.Address<2001:db8::ffff:ffff:ffff:ffff DOCUMENTATION>
""" """
def last(%Prefix{address: %Address{address: address, version: 4}, mask: mask}) do def last(%Prefix{address: %Address{address: address, version: 4}, mask: mask}) do
Address.from_integer!((address &&& mask) + (~~~mask &&& @ipv4_mask), 4) Address.from_integer!((address &&& mask) + (~~~mask &&& @ipv4_mask), 4)
@ -304,7 +304,7 @@ defmodule IP.Prefix do
...> |> IP.Prefix.from_string! ...> |> IP.Prefix.from_string!
...> |> IP.Prefix.eui_64("60:f8:1d:ad:d8:90") ...> |> IP.Prefix.eui_64("60:f8:1d:ad:d8:90")
...> |> inspect() ...> |> inspect()
"{:ok, #IP.Address<2001:db8::62f8:1dff:fead:d890>}" "{:ok, #IP.Address<2001:db8::62f8:1dff:fead:d890 DOCUMENTATION>}"
""" """
@spec eui_64(t, binary) :: Address.t @spec eui_64(t, binary) :: Address.t
def eui_64(%Prefix{address: %Address{version: 6}, def eui_64(%Prefix{address: %Address{version: 6},
@ -330,7 +330,7 @@ defmodule IP.Prefix do
iex> "2001:db8::/64" iex> "2001:db8::/64"
...> |> IP.Prefix.from_string! ...> |> IP.Prefix.from_string!
...> |> IP.Prefix.eui_64!("60:f8:1d:ad:d8:90") ...> |> IP.Prefix.eui_64!("60:f8:1d:ad:d8:90")
#IP.Address<2001:db8::62f8:1dff:fead:d890> #IP.Address<2001:db8::62f8:1dff:fead:d890 DOCUMENTATION>
""" """
@spec eui_64!(t, binary) :: Address.t @spec eui_64!(t, binary) :: Address.t
def eui_64!(prefix, mac) do def eui_64!(prefix, mac) do

View file

@ -30,6 +30,8 @@ defmodule IP.Scope do
] ]
@v6_scopes [ @v6_scopes [
{"2002::/16", "GLOBAL UNICAST (6to4)"},
{"2001::/32", "GLOBAL UNICAST (TEREDO)"},
{"2001:10::/28", "ORCHID"}, {"2001:10::/28", "ORCHID"},
{"2001:db8::/32", "DOCUMENTATION"}, {"2001:db8::/32", "DOCUMENTATION"},
{"2000::/3", "GLOBAL UNICAST"}, {"2000::/3", "GLOBAL UNICAST"},