Files
policy-service/lib/policy_service/aggregates/policy_id.ex
HaimKortovich f59c9cadfa
Some checks failed
Build and Publish / build-release (push) Failing after 35s
properly decode policy id
2026-04-17 12:57:35 -05:00

53 lines
1.3 KiB
Elixir

defmodule PolicyService.Aggregates.PolicyId do
@derive Jason.Encoder
defstruct [:org_id, :policy_type, :application_id]
def new(org_id, policy_type, application_id) do
%__MODULE__{
org_id: org_id,
policy_type: policy_type,
application_id: application_id
}
end
def parse(string) when is_binary(string) do
case String.split(string, ":", parts: 3) do
[org_id, policy_type, application_id] ->
{:ok,
%__MODULE__{
org_id: org_id,
policy_type: policy_type,
application_id: application_id
}}
_ ->
{:error, :invalid_policy_id}
end
end
def parse!(string) do
case parse(string) do
{:ok, id} -> id
{:error, reason} -> raise ArgumentError, "invalid policy id #{inspect(string)}: #{reason}"
end
end
defimpl String.Chars do
def to_string(%PolicyService.Aggregates.PolicyId{
org_id: org_id,
policy_type: policy_type,
application_id: application_id
}) do
org_id <> ":" <> policy_type <> ":" <> application_id
end
end
defimpl Commanded.Serialization.JsonDecoder do
def decode(%{org_id: org_id, policy_type: policy_type, application_id: application_id}) do
PolicyService.Aggregates.PolicyId.new(org_id, policy_type, application_id)
end
def decode(id), do: id
end
end