apoorv-2204

apoorv-2204

Shared Common Constants/Errors Across the Application

What is the best way to define Elixir App wide constants and errors?.In languages like go lang we export and import constants and errors.

What is the idiomatic or best, the De facto industry standard of Elixir community or generally design pattern for it?

requirements: we should be able to match them in guards and clauses, it should be as similar to normal variables in elixir function.What if we want to have constants for UI and backend at the same time, Like for an atom UI will show a String, in backend a integer.

ps: I found this article from 2016.

And some examples from timex lib, but cant use them in guard or clause
https://github.com/bitwalker/timex/blob/main/lib/timex/constants.ex

Most Liked

ImNotAVirus

ImNotAVirus

I had replied to your old post and I’m reposting my reply but with a few additions.

For many projects, I’ve often needed to use constants/enums. So I made a lib for it: SimpleEnum.

I’ll let you read the thread for more details, but to sum up:

  • Enums can be used in guards
  • There are no dependencies, as with EctoEnum for example.
  • the introspection system makes it easy to connect SimpleEnum to other libs

Here is an example from the documentation:

iex> defmodule MyEnums do
...>   import SimpleEnum, only: [defenum: 2]
...>
...>   defenum :color, [:blue, :green, :red]
...>   defenum :day, monday: "MON", tuesday: "TUE", wednesday: "WED"
...> end

iex> require MyEnums

iex> MyEnums.color(:blue)
0
iex> MyEnums.color(0)
:blue
iex> MyEnums.day(:monday)
"MON"
iex> MyEnums.day("MON")
:monday
JEG2

JEG2

Author of Designing Elixir Systems with OTP

I’m also interested in hearing answers to this, especially for options that don’t spread compile time dependencies far and wide.

dimitarvp

dimitarvp

To be fair I’d just do this:

defmodule MyApp.UnixErrors do
  defmacro __using__(_opts) do
    quote do
      @bad_argument :badarg
      @invalid :einval
    end
  end
end

defmodule MyApp.UserModule1 do
  use MyApp.UnixErrors

  def hello(), do: @bad_argument
end

This too is some level of compile-time dependencies but they are flat, there are no cycles or deep graphs involved.

Last Post!

dimitarvp

dimitarvp

Ah, you mean the module attributes can’t start with a capital letter. Can’t help you there, but I don’t see why would that be a hard requirement for you either.

Where Next?

Popular in Questions Top

rms.mrcs
Hi, I need to transform a list of numbers into a map where the keys are the indexes and the values are the original values of the list. ...
New
JeremM34
Hello, how can I check the Phoenix version ? Thanks !
New
minhajuddin
I have seen a lot of code which picks the first element from a list using Enum.at(0) instead of List.first. Is there a reason why people ...
New
Qqwy
Original source of discussion: This topic on the Pragmatic Programmers’ Functional Web Development with Elixir, OTP, and Phoenix forum. ...
New
lanycrost
Hi everyone! I need implement if…else if…else condition from my elixir code, and anymore of this control flow structures not work proper...
New
fireproofsocks
Forgive me if this is obvious, but how does one delete a database record WITHOUT selecting it first? Ecto.Repo — Ecto v3.14.0 has exampl...
New
dblack
I’ve got an issue with an app and I’ve no idea of how to troubleshoot it. I’m hoping someone here might have seen something similar. I p...
New

Other popular topics Top

JeremM34
Hello, how can I check the Phoenix version ? Thanks !
New
Qqwy
Original source of discussion: This topic on the Pragmatic Programmers’ Functional Web Development with Elixir, OTP, and Phoenix forum. ...
New
vonH
In asking this question I am more interested about the expressiveness of the language itself and less concerned about the availability of...
New
stefanchrobot
What’s the safe way to decode a JSON string into a struct? I want to avoid calling String.to_atom. Jason.decode can give me a map with st...
New
AstonJ
Seen any cool LiveView demos, sample apps or examples? Please post them here! :003:
New
siddhant3030
Hi, I have to write a raw query for one of my project. But till now I have used ecto queries and don’t have much experience writing raw ...
New

We're in Beta

About us Mission Statement