View Source Dsv.Empty protocol (Dsv v0.2.1)

A protocol to check if a provided value is empty. This protocol is used by the Dsv.NotEmpty validator.

Default Implementations

The protocol provides default implementations for the following data types:

  • List: Checks if the list has a length of 0.
  • Map: Checks if the map has no key-value pairs.
  • Tuple: Checks if the tuple has no elements.
  • String: Checks if the string has a length of 0.
  • Integer: Always return :false, integer can not be empty.
  • Float: Always return :false, float can not be empty.
  • Date: Always return :false, date can not be empty.
  • DateTime: Always return :false, date time can not be empty.
  • NaiveDateTime: Always return :false, naive date time can not be empty.
  • Time: Always return :false, time can not be empty.
  • Atom: Checks if the atom is :nil or :false.

You can implement custom emptiness checks for other data types by providing specific protocol implementations.

Example

defmodule MyStruct do
  defstruct data: [:a, :b, :c]
end

defimpl Empty, for: MyStruct do
  def empty?(%MyStruct{data: data}), do: length(data) == 0
end

Summary

Types

t()

All the types that implement this protocol.

Functions

Return :true if the value is empty. Otherwise, return :false.

Types

@type t() :: term()

All the types that implement this protocol.

Functions

@spec empty?(any()) :: boolean()

Return :true if the value is empty. Otherwise, return :false.

For List, it will return :true only for the [] list. In other cases, it will return :false.

For Map, it will return :true only for the %{} map. In other cases, it will return :false.

For Tuple, it will return :true only for {} tuple. In other cases, it will return :false.

For String, it will return :true only for "" string. In other cases, it will return :false.

For Integer, Float, Date, DateTime, NaiveDateTime, and Time, it will always return :false as if value of this type exists, it cannot be empty.

For Atom, it will return :true for values :false and nil. In other cases, it will return :false.

Example

iex> Dsv.Empty.empty?(:false)
:true

iex> Dsv.Empty.empty?("")
:true

iex> Dsv.Empty.empty?("not empty")
:false

iex> Dsv.Empty.empty?([])
:true

iex> Dsv.Empty.empty?(:true)
:false

iex> Dsv.Empty.empty?(1.1)
:false

iex> Dsv.Empty.empty?(~D[2000-01-01])
:false

iex> Dsv.Empty.empty?(~U[2000-01-01 11:11:11Z])
:false

iex> Dsv.Empty.empty?(~N[2000-01-01 11:11:11])
:false

iex> Dsv.Empty.empty?(~T[11:11:11])
:false