diff --git a/lib/types/env_data.ex b/lib/types/env_data.ex new file mode 100644 index 0000000..007f974 --- /dev/null +++ b/lib/types/env_data.ex @@ -0,0 +1,17 @@ +defmodule Kadena.Types.EnvData do + @moduledoc """ + `EnvData` struct definition. + """ + + @behaviour Kadena.Types.Spec + + @type data :: map() + + @type t :: %__MODULE__{data: data()} + + defstruct [:data] + + @impl true + def new(data) when is_map(data), do: %__MODULE__{data: data} + def new(_data), do: {:error, [data: :invalid]} +end diff --git a/lib/types/pact_code.ex b/lib/types/pact_code.ex new file mode 100644 index 0000000..4397a84 --- /dev/null +++ b/lib/types/pact_code.ex @@ -0,0 +1,17 @@ +defmodule Kadena.Types.PactCode do + @moduledoc """ + `PactCode` struct definition. + """ + + @behaviour Kadena.Types.Spec + + @type code :: String.t() + + @type t :: %__MODULE__{code: code()} + + defstruct [:code] + + @impl true + def new(code) when is_binary(code), do: %__MODULE__{code: code} + def new(_code), do: {:error, [code: :invalid]} +end diff --git a/test/types/env_data_test.exs b/test/types/env_data_test.exs new file mode 100644 index 0000000..73fcfd4 --- /dev/null +++ b/test/types/env_data_test.exs @@ -0,0 +1,27 @@ +defmodule Kadena.Types.EnvDataTest do + @moduledoc """ + `EnvData` struct definition tests. + """ + + use ExUnit.Case + + alias Kadena.Types.EnvData + + describe "new/1" do + test "with valid env data" do + %EnvData{data: %{}} = EnvData.new(%{}) + end + + test "with nil env data" do + {:error, [data: :invalid]} = EnvData.new(nil) + end + + test "with number env data" do + {:error, [data: :invalid]} = EnvData.new(12_345) + end + + test "with atom env data" do + {:error, [data: :invalid]} = EnvData.new(:atom) + end + end +end diff --git a/test/types/pact_code_test.exs b/test/types/pact_code_test.exs new file mode 100644 index 0000000..8d19b8c --- /dev/null +++ b/test/types/pact_code_test.exs @@ -0,0 +1,28 @@ +defmodule Kadena.Types.PactCodeTest do + @moduledoc """ + `PactCode` struct definition tests. + """ + + use ExUnit.Case + + alias Kadena.Types.PactCode + + describe "new/1" do + test "with a valid pact code" do + %PactCode{code: ~S(format \"hello {}\" [\"world\"])} = + PactCode.new(~S(format \"hello {}\" [\"world\"])) + end + + test "with a number pact code" do + {:error, [code: :invalid]} = PactCode.new(12_345) + end + + test "with a atom pact code" do + {:error, [code: :invalid]} = PactCode.new(:atom) + end + + test "with a nil pact code" do + {:error, [code: :invalid]} = PactCode.new(nil) + end + end +end