Skip to content

Commit

Permalink
Base16String and Base64Url structs definitions
Browse files Browse the repository at this point in the history
  • Loading branch information
Santiago Botero committed Sep 15, 2022
1 parent 469d945 commit 94a130e
Show file tree
Hide file tree
Showing 6 changed files with 92 additions and 0 deletions.
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -24,3 +24,6 @@ kadena-*.tar

# Temporary files, for example, from tests.
/tmp/

# Dialyzer plt files
/priv/plts
15 changes: 15 additions & 0 deletions lib/types/base16_string.ex
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
defmodule Kadena.Types.Base16String do
@moduledoc """
`Base16String` struct definition
"""

@behaviour Kadena.Types.Spec

@type t :: %__MODULE__{value: String.t()}

defstruct [:value]

@impl true
def new(str) when is_binary(str), do: %__MODULE__{value: str}
def new(_str), do: {:error, :invalid_string}
end
15 changes: 15 additions & 0 deletions lib/types/base64_url.ex
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
defmodule Kadena.Types.Base64Url do
@moduledoc """
`Base64Url` struct definition
"""

@behaviour Kadena.Types.Spec

@type t :: %__MODULE__{value: String.t()}

defstruct [:value]

@impl true
def new(str) when is_binary(str), do: %__MODULE__{value: str}
def new(_str), do: {:error, :invalid_string}
end
9 changes: 9 additions & 0 deletions lib/types/spec.ex
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
defmodule Kadena.Types.Spec do
@moduledoc """
Defines base types constructions
"""

@type error :: {:error, atom()}

@callback new(any()) :: struct() | error()
end
25 changes: 25 additions & 0 deletions test/types/base16_string_test.exs
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
defmodule Kadena.Types.Base16StringTest do
@moduledoc """
`Base16String` struct definition tests
"""

use ExUnit.Case

alias Kadena.Types.Base16String

setup do
%{valid_param: "valid_param", invalid_param: :atom}
end

test "new/1 with valid params", %{valid_param: valid_param} do
%Base16String{value: ^valid_param} = Base16String.new(valid_param)
end

test "new/1 with invalid params", %{invalid_param: invalid_param} do
{:error, :invalid_string} = Base16String.new(invalid_param)
end

test "new/1 with nil params" do
{:error, :invalid_string} = Base16String.new(nil)
end
end
25 changes: 25 additions & 0 deletions test/types/base64_url_test.exs
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
defmodule Kadena.Types.Base64UrlTest do
@moduledoc """
`Base64Url` struct definition tests
"""

use ExUnit.Case

alias Kadena.Types.Base64Url

setup do
%{valid_param: "valid_param", invalid_param: :atom}
end

test "new/1 with valid params", %{valid_param: valid_param} do
%Base64Url{value: ^valid_param} = Base64Url.new(valid_param)
end

test "new/1 with invalid params", %{invalid_param: invalid_param} do
{:error, :invalid_string} = Base64Url.new(invalid_param)
end

test "new/1 with nil params" do
{:error, :invalid_string} = Base64Url.new(nil)
end
end

0 comments on commit 94a130e

Please sign in to comment.