LauraBeatris
Recommend patterns for enum runtime validation
Disclaimer: I’m still a beginner when it comes to Elixir data types, so my apologies if the question sounds “silly”
Is there a recommended pattern for enum runtime validation in Elixir? For instance, the function above receives an argument called “intent” which can be only the following string values: ["sso", "dsync", "audit_logs", "log_streams"]
Is it possible to avoid even calling the function if the intent is not supported? Not sure if pattern matching could be used for that case?
def generate_link(params, opts) when is_map_key(params, :organization) and is_map_key(params, :intent) do
query = process_params(params, [:intent, :organization, :return_url, :success_url])
post("/portal/generate_link", query, opts)
end
Marked As Solved
cmo
def generate_link(%{intent: intent, organisation: _} = params, opts)
when intent in ["sso", "dsync", "audit_logs", "log_streams"] do
query = process_params(params, [:intent, :organization, :return_url, :success_url])
post("/portal/generate_link", query, opts)
end
The list in the guard needs to be a compile time list.
You can use a module attribute, i.e. @intents ~w[sso dsync audit_logs log_streams] if it is used in multiple places, or create a guard (see defguard) if the guard is used in multiple places.
4
Popular in Questions
What is the proper way to load a module from a file in to IEX?
In the python world, doing something like this pretty standard:
from ....
New
can someone please explain to me how Enum.reduce works with maps
New
I am VERY much an elixir newbie. I have taken one elixir course and one phoenix course on Udemy. During that course, I saw the instructor...
New
As a follow up to my earlier question:
I have the code compiling and running but not getting a successful login from the rest server. ...
New
Using vs code and installed ElixirLS: support and debugger.
And I got an error popped up on start up says
Failed to run ‘elixir’ comma...
New
I have a another noob question about loop. Since elixir is immutable, while loop is not directly possible.
total = 10
while total != 0
...
New
I am using Ecto timestamps with postgres, I can see the timestamps() use the :naive_dateime but for my use case I wanted to store the ti...
New
Is there a way to get the call stack or stack trace at any point in the code? Not from exceptions, but an expression that returns how the...
New
I have a list say
x = ["23gh", "56kh", "97mh"]
I would like to pass each element to Val in each iteration.
Say, in iteration 1 -------...
New
I’ve been re-reading swift book again and noticed that multiline strings there don’t have a trailing line break, unlike in elixir
iex(2)...
New
Other popular topics
Phoenix 1.4.0 released
Phoenix 1.4 is out! This release ships with exciting new features, most notably
with HTTP2 support, improved deve...
New
In the Dialyzer docs ( http://erlang.org/doc/man/dialyzer.html#requesting-or-suppressing-warnings-in-source-files ), there is a way to tu...
New
I couldn’t find any guides that worked well with Phoenix 1.6.0 and esbuild. I hope this helps people test the waters and eases you into t...
New
I wanted to check elixir version in phoenix because i found that my elixir is 1.5 but when i use Enum.chunk_by it said the function is un...
New
If I have a string “1000 cfu/ml” . I want to remove the characters and / and space . So the string is like this
"1000"
What is the ...
New
Hello, I have map which I want to convert it to string like this:
the map:
%{last_name: "tavakkoli", name: "shahryar"}
the string I ne...
New
Hi all,
I've just started learning Elixir and Phoenix Framework, so please pardon my n00bness at this stage.
I'm trying to use Postg...
New
Hi everyone,
One of the features added to Elixir early on to help integration with Erlang code was the idea of overridable function defi...
New
I am constructing a JSON object (map) and I need to conditionally set a field. I’m trying to write proper elixir-way code… and I’m at a l...
New
Hello again - after a longish gap I’ve decided I really must dig into Elixir and see what’s been happening here - so I have a few questio...
New







