kanishka
Are there patterns similar to having a private constructor along with a public build/validate function to guide users of a struct module to build valid instances? I understand that you may not be able to completely stop a user from creating a struct with invalid field values, but just wonder if there are patterns for something along those lines. I understand that you can use Ecto validations with embedded schemas to express some constraints, but wondering if there some pattern for plain structs
Trending in Questions
I’m working on a project that simulates the bumbl example in the programming phoenix book. It acts almost like an email client. We have a...
New
Hello!
Could someone please give me a help/sample code, how to delete a file from s3 using waffle/waffle_ecto from Phoenix app.
I creat...
New
I’m seeing that a list inside a Kino.DataTable will be interpreted as a charlist, even if the Kino.configure() is set to charlists: :as_l...
New
So my question is quite simple and i have found no conclusive answer on forum, google or AI.
Should we use :erlang.float for Integer to ...
New
Hi, I’ve just set up an application with ash_authentication. There is only magic link strategy for now, so there is no confirmation add o...
New
If a change or preparation module uses Ash.Changeset.get_argument/2 or Ash.Query.get_argument/2 (or any of the other get_argument functio...
New
Hello,
I know there is an approach for handling lists that allows for optimized traversal, but I can’t recall the specific method (somet...
New
Other Trending Topics
I am happy to introduce the very α version of the new programming language compiled to BEAM.
Welcome Cure.
It has literally three kille...
New
Hi there! We created Gust: A task orchestrator inspired by Airflow.
For those who have never heard about Aiflow, it’s a Python-based wor...
New
Beam Bots (or just BB for short) is a framework for building fault-tolerant robotics applications in Elixir using familiar OTP patterns. ...
New
Xamal is a deployment tool for Elixir apps that deploys native releases to bare metal servers over SSH. It’s a port of GitHub - basecamp/...
New
Hello everyone. After busy few months I am happy to announce v0.1.0 of Emerge & Solve.
They are GUI (Emerge) and State management (S...
New
Corex is an accessible, unstyled UI component library for Phoenix that integrates Zag.js state machines using Vanilla JavaScript and Live...
New
Categories:
Sub Categories:
Forums
Popular Tags
- #ecto
- #liveview
- #troubleshooting
- #learning-elixir
- #library
- #deployment
- #erlang
- #testing
- #genserver
- #mix
- #absinthe
- #remote-other
- #otp
- #plug
- #how-to-question
- #macros
- #postgres
- #elixirconf
- #channels
- #exunit
- #discussion
- #code-sync
- #podcasts
- #javascript
- #onsite
- #dialyzer
- #docker
- #authentication
- #umbrella
- #full-time-contract
- #podcasts-by-brainlid
- #ecto-query
- #elixirconf-us
- #blog-post
- #elixir-ls
- #ai
- #phoenix_html
- #iex
- #graphql
- #genstage
- #websockets
- #supervisor
- #advent-of-code
- #distillery
- #processes
- #api
- #forms
- #hex
- #security
- #metaprogramming










Showing Posts 1 to 10- Show Best Posts
- Show All (oldest first)
- Show All (newest first)
sodapopcan
There is not. A common pattern is to define a
new/1for this and you just have to document that that is what should be used.Edit: sorry “there is not” referring to not being able to mail a struct as private.
kartheek
Elixir does have concept of constructors - they are from OOPS world. There is map and there is struct which is map with additional field
__struct__. There are functions which operate on data. There are Modules which group functions together. I might be oversimplifying things..I use
@enforce_keysandinit(opts)to initialise structs (not everywhere though).Eiji
There is no solution which covers all use cases, but a pure
Elixirvalidation is pretty simple to write, for example with code below:the struct would not be validated (except
@enforce_keyswhen using it “by hand” like%Example{}. Officially there is no support for preventing others to use write struct by hand.dimitarvp
Or you can use the
domolibrary.kanishka
I will probably use this or new, and return a Result for this quick and dirty case and keep domo in mind.
kanishka
My current understanding is that Ecto is popular for validating DB persisted structs, and there is some momentum around libraries that validate data received from external services. It looks like domo has some users, but it’s not used everywhere, and the norm for structs that are not persisted are various patterns mentioned above? I am curious if you think domo will keep growing and start to become a library that people use in most projects, or if there is some resistance to introducing a library for logic that most people feel they can implement on their own quickly?
Eiji
I would say that any library to achieve something like that would need to:
be a part of some generator provided by
Elixircore team or related (ecto,phoenixetc.)have guides about it everywhere (just like now it’s for
phoenixfor example)have a big community (which comes from points 1 and 2, but it may be required by some companies) - especially a big number of users who test every release
Look that
ectodoes not have it’s own generators, but support for it is important inphoenixgenerators. It’s widely adopted, well tested and especially every bigger/complete/seriousElixir/Phoenixtutorial adds lots of information about it.On the other side if we have
xnumber of libraries doing similar thing where:there is no chance that one library would be used in most projects especially if it would not be needed in simplest cases. Developers for each project would use at most one library which:
Look that old
Phoenixtemplates would be used almost only in unmaintained projects. Almost all projects already moved or would move toheexpretty soon not because it’s best for everything and there would never be a better solution, but because aPhoenixcore team (of course they had a reason for it) would drop support for it in newest releases.Personally I’m subscribing Phoenix.HTML goes slim · Issue #372 · phoenixframework/phoenix_html · GitHub issue. You can answer yourself … Do you know and use in most projects
templelibrary? I have used it before introducingheexengine.Of course I’m not saying that only
Elixir/Ecto/Phoenixcore teams are doing a great libraries, but the chances to adopt their libraries in most projects are much higher because of support (as above - supported in official generator), respect for their knowledge/skills and a huge communities around them.dimitarvp
It is. I only used
domoonce and liked it but a lot of people are not happy with compilation and macro hackery and I can understand and sympathize.In your case, a plain old struct +
@enforce_keys+ anewfunction + a non-adversarial usage will do the trick just fine.kartheek
I have been using these for a long time:
You mention about something about stopping a user from creating a struct with invalid fields. User is another developer working on the project or user who will be using the application?
There is NimbleOptions NimbleOptions — NimbleOptions v1.1.1.
Elixir community is small, it does not have the volume/size like other languages:
This does not translate to a problem with language, framework or libraries. Adoption numbers, popularity and momentum numbers are on a different scale in elixir world.
json_xema- i have been using from around 2019/2020(i don’t remember exact date). It just works, it has 57 stars and 4 forks. On hex.pm it has around 200 downloads a day.sabiwara
In addition to other answers, if you are using typespecs and dialyzer it might be interesting to add a definition of an
opaquetype for your struct to achieve some kind of encapsulation.Dialyzer will report:
While this doesn’t offer strong guarantees, it can help detect cases that are by-passing your constructor in your codebase.