All checks were successful
Build and Publish / build-release (push) Successful in 1m41s
58 lines
1.5 KiB
Elixir
58 lines
1.5 KiB
Elixir
defmodule PolicyService.Aggregates.PolicyId do
|
|
@type t :: %__MODULE__{
|
|
org_id: String.t(),
|
|
policy_type: String.t(),
|
|
application_id: String.t()
|
|
}
|
|
@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
|