From a500fea095e3672aff69e2d7e9338338765f70d0 Mon Sep 17 00:00:00 2001 From: Anthony Mineo Date: Wed, 13 Apr 2022 17:37:18 -0400 Subject: [PATCH] refactor(spec): add type specs --- lib/t2_server_query.ex | 7 ++++--- lib/t2_server_query/packet_parser.ex | 5 ++++- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/lib/t2_server_query.ex b/lib/t2_server_query.ex index 51e9e39..c729a79 100644 --- a/lib/t2_server_query.ex +++ b/lib/t2_server_query.ex @@ -70,6 +70,7 @@ defmodule T2ServerQuery do }} """ + @spec query(String.t(), integer(), integer()) :: {atom(), %T2ServerQuery.QueryResult{}} def query(server_ip, port \\ 28_000, timeout \\ 3_500) do Logger.info "query: #{server_ip}" case is_valid_ip?(server_ip) do @@ -78,9 +79,8 @@ defmodule T2ServerQuery do end end - + @spec handle_query(String.t(), integer(), integer()) :: {atom(), %T2ServerQuery.QueryResult{}} defp handle_query(server_ip, port, timeout) do - {:ok, socket} = :gen_udp.open(0, [:binary, {:active, false}]) # Convert a string ip from "127.0.0.1" into {127, 0, 0, 1} @@ -106,7 +106,7 @@ defmodule T2ServerQuery do PacketParser.init(hex_info_packet, hex_status_packet) end - + @spec is_valid_ip?(any()) :: boolean() defp is_valid_ip?(nil), do: false defp is_valid_ip?(server_ip) do case Regex.match?(~r/^([1-2]?[0-9]{1,2}\.){3}([1-2]?[0-9]{1,2})$/, server_ip) do @@ -116,6 +116,7 @@ defmodule T2ServerQuery do end + @spec handle_udp_response(tuple(), String.t(), integer()) :: tuple() | String.t() defp handle_udp_response({:ok, {_ip, port, packet}}, _server_ip, port) do packet |> Base.encode16 diff --git a/lib/t2_server_query/packet_parser.ex b/lib/t2_server_query/packet_parser.ex index 37a0cf0..4519389 100644 --- a/lib/t2_server_query/packet_parser.ex +++ b/lib/t2_server_query/packet_parser.ex @@ -43,9 +43,9 @@ defmodule T2ServerQuery.PacketParser do Refer to `T2ServerQuery.QueryResult` for what a typical struct would look like. - """ + alias T2ServerQuery.QueryResult @doc """ @@ -53,6 +53,7 @@ defmodule T2ServerQuery.PacketParser do Normally you wouldn't need to run this function manually since it's called in a pipeline from the main `T2ServerQuery.query` """ + @spec init({:error, String.t()}, any()) :: {:error, map()} def init({:error, host}, _) do results = %QueryResult{} @@ -65,6 +66,7 @@ defmodule T2ServerQuery.PacketParser do } end + @spec init(binary(), binary()) :: {:ok, %QueryResult{}} def init(info_packet, status_packet) when is_binary(info_packet) and is_binary(status_packet) do info_results = info_packet @@ -81,6 +83,7 @@ defmodule T2ServerQuery.PacketParser do pack_results({:ok, status_results, info_results}) end + @spec pack_results({:ok, map(), map()}) :: {:ok, %QueryResult{}} defp pack_results({:ok, status_results, info_results}) do results = %QueryResult{}