Packages
avrora
0.1.0-beta
0.30.2
0.30.1
0.30.0
0.29.2
0.29.1
0.29.0
0.28.0
0.27.0
0.26.0
0.25.0
0.24.2
0.24.1
0.24.0
0.23.0
0.22.0
0.21.1
0.21.0
0.20.0
0.19.0
0.18.1
0.18.0
0.17.0
0.16.0
0.15.0
0.14.1
0.14.0
0.13.0
0.12.0
0.11.0
0.10.0
0.9.1
0.9.0
0.8.1
0.8.0
0.7.1
0.7.0
0.6.0
0.5.1
0.5.0
0.4.0
0.3.1
0.3.0
0.2.2
0.2.1
0.2.0
0.1.1-beta
0.1.0-beta
An Elixir library for working with Avro messages conveniently. It supports local schema files and Confluent® schema registry.
Current section
Files
Jump to
Current section
Files
lib/aurora/name.ex
defmodule Avrora.Name do
@moduledoc """
A wrapper around versioned name the schema. It can handle names like `io.confluent.Payment`
and `io.confluent.Payment:42` by using `:` as a delimiter.
"""
defstruct [:name, :version]
@type t :: %__MODULE__{
name: String.t(),
version: nil | integer()
}
@delimiter_char ":"
@doc """
Parses given name and plits it on `name` + `version` by a `:` delimiter.
## Examples
iex> Avrora.Name.parse("Payment")
{:ok, %Avrora.Name{name: "Payment", version: nil}}
iex> Avrora.Name.parse("io.confluent.Payment:42")
{:ok, %Avrora.Name{name: "io.confluent.Payment", version: 42}}
"""
@spec parse(String.t()) :: {:ok, t()} | {:error, term()}
def parse(payload) when is_binary(payload) do
with parts <- String.split(payload, @delimiter_char, parts: 2) do
version = Enum.at(parts, 1)
version =
if is_binary(version) do
case Integer.parse(version) do
{version, _} -> version
_ -> nil
end
end
{:ok, %__MODULE__{name: Enum.at(parts, 0), version: version}}
end
end
end