Files
policy-service/lib/policy_service/aggregates/policy_id.ex
HaimKortovich 5037bc3632
Some checks are pending
Build and Publish / build-release (push) Waiting to run
wip
2026-04-13 15:30:31 -05:00

49 lines
1.2 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(id), do: id
end
end