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

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.

dimitarvp

dimitarvp

Have you tried? :wink:

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

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
senggen
Erlang/OTP 25 [erts-13.2.2] [source] [64-bit] [smp:8:8] [ds:8:8:10] [async-threads:1] 15:22:35.803 [error] gen_event {lager_file_backend...
New
srinivasu
How to handle excepions in elixir? Suppose i have A, B, C ,D, E modules. and each module has get() function. A.get() method will call th...
New
bsollish-terakeet
Credo is smart enough to check for (something like) this: assert length(the_list) == 0 with this response: Checking if an enum is empt...
New
pgiesin
This should be a simple problem but I just can’t seem to figure it out. I have a standalone Elixir app that won’t find the database. Dep...
New
Kagamiiiii
Student & New to elixir. Nice language. I want to convert a english character, e.g. “a”, which is stored in a variable, to it’s asci...
New
myronmarston
The Elixir Typespec docs show the following syntax for keyword lists in typespecs: # ... | [key: type] # keyword lis...
New
makeitrein
Hey all, just started picking up Elixir last week and am writing a scraper as a learning project. Baby step #1 is extracting the number ...
New
shahryarjb
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
hpopp
To simplify some tasks at work, I wrote and published this package yesterday. It’s a simple macro that enables Access behaviour on struct...
New

Other popular topics Top

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
9mm
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
lastday4you
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
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
SoCreat
i’m a new one to elixir which editor can i use vs code? or atom? Thanks! :smiley:
New
dotdotdotPaul
Okay, I'm having a heck of a time trying to figure out how to best handle the validation of belongs_to associations in Ecto. I'm sure I'...
New
axelson
This post is a wiki (feel free to hit the edit button near the bottom right of this post to add your own changes!) This post collects co...
239 45766 226
New
KronicDeth
Elixir plugin for JetBrain’s IntelliJ Platform (including Rubymine) This is a plugin that adds support for Elixir to JetBrains IntelliJ...
289 35421 110
New
fireproofsocks
Forgive me if this is obvious, but how does one delete a database record WITHOUT selecting it first? https://hexdocs.pm/ecto/Ecto.Repo.h...
New
beno
I will often find my self writing things similar to: case some_value do nil -> something() "" -> something() _ -> someth...
New

We're in Beta

About us Mission Statement