defmodule BoringAvatars do @moduledoc """ Direct port of [boring-avatars](https://github.com/boringdesigners/boring-avatars) to Elixir. Generates SVG avatars based on a given name and a color palette. ## Usage iex> BoringAvatars.beam(name: "Maria") Options can be passed as a keyword list or as a `%BoringAvatars.Props{}` struct. See `BoringAvatars.Props` for all available options. """ @doc """ Callback to implement for a custom avatar variant. Receives a `%BoringAvatars.Props{}` struct or a keyword list of options and should return `iodata()` representing the generated SVG. """ @callback avatar(%BoringAvatars.Props{} | keyword()) :: iodata() @doc "Generates a Bauhaus variant avatar." defdelegate bauhaus(props \\ []), to: BoringAvatars.Variant.Bauhaus, as: :avatar @doc "Generates a Beam variant avatar." defdelegate beam(props \\ []), to: BoringAvatars.Variant.Beam, as: :avatar @doc "Generates a Marble variant avatar." defdelegate marble(props \\ []), to: BoringAvatars.Variant.Marble, as: :avatar @doc "Generates a Pixel variant avatar." defdelegate pixel(props \\ []), to: BoringAvatars.Variant.Pixel, as: :avatar @doc "Generates a Ring variant avatar." defdelegate ring(props \\ []), to: BoringAvatars.Variant.Ring, as: :avatar @doc "Generates a Sunset variant avatar." defdelegate sunset(props \\ []), to: BoringAvatars.Variant.Sunset, as: :avatar end