View Source Dsv.Empty protocol (Dsv v0.3.0)
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:nilor: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
Functions
Return :true if the value is empty. Otherwise, return :false.
Types
@type t() :: term()
All the types that implement this protocol.
Functions
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