import Kernel, except: [to_string: 1] defprotocol Cldr.Chars do @moduledoc ~S""" The `Cldr.Chars` protocol mirrors the `String.Chars` protocol but localises the output. It is intended to be drop-in replacement for `String.Chars`. """ @doc """ Converts `term` to a localised string. """ @fallback_to_any true @spec to_string(t) :: String.t() def to_string(term) end defimpl Cldr.Chars, for: Cldr.LanguageTag do def to_string(language_tag) do Cldr.LanguageTag.to_string(language_tag) end end defimpl Cldr.Chars, for: BitString do def to_string(term) when is_binary(term) do term end def to_string(term) do raise Protocol.UndefinedError, protocol: @protocol, value: term, description: "cannot convert a bitstring to a string" end end defimpl Cldr.Chars, for: Any do def to_string(language_tag) do Kernel.to_string(language_tag) end end