Packages
avrora
0.30.1
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/avrora/schema/name.ex
defmodule Avrora.Schema.Name do
@moduledoc """
Struct for versioned schema names like `io.acme.Payment:42`.
"""
defstruct [:origin, :name, :version]
@type t :: %__MODULE__{
origin: String.t(),
name: String.t(),
version: nil | integer()
}
@delimiter_char ":"
@doc """
Parse schema name with optional version, returning struct.
## Examples
iex> Avrora.Schema.Name.parse("Payment")
{:ok, %Avrora.Schema.Name{origin: "Payment", name: "Payment", version: nil}}
iex> Avrora.Schema.Name.parse("io.acme.Payment:42")
{:ok, %Avrora.Schema.Name{origin: "io.acme.Payment:42", name: "io.acme.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__{origin: payload, name: Enum.at(parts, 0), version: version}}
end
end
end