defmodule EverFaker.Random do @moduledoc """ Behaviour that defines randomisation in faker. """ @callback random_between(integer(), integer()) :: integer() @callback random_bytes(pos_integer()) :: binary() @callback random_uniform() :: float() @callback shuffle(Enum.t()) :: list() defmacro __using__(_) do quote do @behaviour EverFaker.Random def random_between(left, right) do Enum.random(left..right) end def random_bytes(total) do :crypto.strong_rand_bytes(total) end def random_uniform do :rand.uniform() end def shuffle(enum) do Enum.shuffle(enum) end defoverridable random_between: 2, random_bytes: 1, random_uniform: 0, shuffle: 1 end end end