defmodule Dust.Protocol.Path.LegacyDot do
@moduledoc """
Dotted-path helpers from the pre-segment-first capability version.
Visibly named + separate so callers can be migrated one at a time
without breaking the SDK build. Deleted at the end of the migration.
Mirrors `DustProtocol.Path.LegacyDot` in the canonical package.
"""
@spec normalize(binary()) :: {:ok, binary()} | {:error, atom()}
def normalize(""), do: {:error, :empty_path}
def normalize(path) when is_binary(path) do
canonical = String.replace(path, "/", ".")
case parse(canonical) do
{:ok, _segments} -> {:ok, canonical}
{:error, reason} -> {:error, reason}
end
end
@spec normalize_pattern(binary()) :: {:ok, binary()} | {:error, atom()}
def normalize_pattern(""), do: {:error, :empty_path}
def normalize_pattern(pattern) when is_binary(pattern) do
canonical = String.replace(pattern, "/", ".")
segments = String.split(canonical, ".")
if Enum.any?(segments, &(&1 == "")) do
{:error, :empty_segment}
else
{:ok, canonical}
end
end
@spec parse(binary()) :: {:ok, [binary()]} | {:error, atom()}
def parse(""), do: {:error, :empty_path}
def parse(path) when is_binary(path) do
segments = String.split(path, ".")
if Enum.any?(segments, &(&1 == "")) do
{:error, :empty_segment}
else
{:ok, segments}
end
end
@spec to_string([binary()]) :: binary()
def to_string(segments) when is_list(segments) do
Enum.join(segments, ".")
end
end