mudasobwa

mudasobwa

Creator of Cure

Blog post, announcing Pyc package. It allows transparent validation across inserted data with Exvalibur, chaining functions in a monadic-like way, and exposes all the keys as local variables inside methods declared with defmethod (without compilation warnings.)

It also reasonably implements Access behaviour for wrapped structs and Collectable protocol with validation.

https://dev.to/mudasobwa/elixir-structs-on-steroids-5cd9

Showing Posts 7 to 1

mudasobwa

mudasobwa OP

Creator of Cure

Recalled. To be used in config.exs. Also, I should support plain guards, thanks.

mudasobwa

mudasobwa OP

Creator of Cure

Sure. The users of this package put guards in their config.exs files though.

mudasobwa

mudasobwa OP

Creator of Cure

This is how Exvalibur works now :slight_smile:

I do not remember why exactly I went with binaries, but I am pretty sure it was because I wanted things TBD and I failed to do it properly.

benwilson512

benwilson512

Author of Craft GraphQL APIs in Elixir with Absinthe

Ah, that’s my mistake, the Exvalibur — exvalibur v0.10.0 page looked like the top module doc and I looked for </> and didn’t see it. I see the code now, I wonder why it wasn’t higher on google.

As far as the macros go, it’s a pretty large topic. I’d consider the guides, and the Metaprogramming Elixir book. I’m a little short on time at the moment but I may be able to comment later with more details. The short version is that your Code.string_to_quoted is what the compiler already does. Try using just is_map(val) and see what the input to your function is.

The functions inside Code should basically never be called at runtime. They’re not optimized for it and can lead to a variety of issues.

mudasobwa

mudasobwa OP

Creator of Cure

I doubt I understand. Hexdocs have a built-in support for links to the source and docs are indeed linked to the code.

Also, I would be grateful to see how to use macros to avoid strings there.

benwilson512

benwilson512

Author of Craft GraphQL APIs in Elixir with Absinthe

Hey @mudasobwa. It’s always great to see people take on problems.

There’s a few thing about these libraries that would make them more likely to be used by others. The first big one for Exvalibur is making the source code more readily available. The hexdocs don’t link to any source code, and I couldn’t find it with some cursory googling either. I had to create a project, add it as a dep, and then open the deps directory to get a look at it.

The code contains a LOT of Code. function calls. This is almost always a sign that things aren’t quite right. A lot of it is to support the strings which, as @OvermindDL1 notes, is completely unnecessary because of Elixir’s built in macro support.

OvermindDL1

OvermindDL1

If the struct has more than three fields,
pattern matching in the function head is to be copy-pasted over the whole module or extracted into a cryptic macro.

Yeah, I tend to use the shorter_maps library for that but even it can still get very long and the formatter breaks things up very weird at times… >.>

Even then, although, it quickly becomes hardly maintainable due to unused variables warnings thrown whenever one calls the all-in-one macro and does not use all the variables injected.

You can just do quote generated: true do to silence most warnings (though not variable unused I think?), or in that case can transform the body to add hoisted versions. Even then that won’t work if you need to pass in 2 of that struct in the same head. :slight_smile:

I needed a monadic behaviour there (once any call in the pipe failed, I want the rest transformations to be skipped and the error immediately returned back.)

You really should look at all of expede’s packages on hex.pm. I use a few of them pretty excessively… >.>

guards: %{check_bar: "is_map(bar)"}}]

And reason this is a string instead of just:

guards: %{check_bar: is_map(bar)}}]

Since the use can be a macro anyway, so it can read it straight? :slight_smile:

Looks like an interesting library overall though. :slight_smile:

— All posts loaded —

Where Next? Top

Trending in Announcing Top

woylie
Flop is an Elixir library that applies filtering, ordering and pagination parameters to your Ecto queries. offset-based pagination with...
New
MRdotB
I needed to reuse React components from my Chrome extension in my Phoenix/LiveView backend. I noticed that for Svelte/Vue, there are live...
New
woylie
I released Doggo, a collection of unstyled Phoenix components. https://github.com/woylie/doggo Features Unstyled Phoenix components....
New
GenericJam
Edit: 2026 May 15 - This post is archived. Mob is alive!! Main docs: mob v0.7.11 — Documentation A bit of explanation for the slightly c...
New
JesseHerrick
Hey, I’m Jesse and I’m the main contributor behind Dexter, a full-featured, lightning-fast Elixir LSP optimized for large codebases. It s...
New
ahamez
Hi everyone, I’ve been working on this protobuf library for 3 years. We use it in the company I work for, EasyMile, to communicate with ...
New
garrison
Hobbes is a low-level distributed database for the Elixir programming language. Hobbes provides a simple, safe, and scalable storage lay...
New

Other Trending Topics Top

mudasobwa
I am happy to introduce the very α version of the new programming language compiled to BEAM. Welcome Cure. It has literally three kille...
New
mhanberg
Hi everyone! The first release candidate for the Expert language server project is now available! We’ve published a press release detai...
New
webofbits
With AI doing more of the implementation work, I’ve been wondering how much coding I should deliberately keep doing myself. My main conc...
#ai
New
budgie
A little off-topic, but I feel like people here have a good head on their shoulders. I used to be quite good at making software. Was luc...
New
bartblast
Hey folks, I just published a post about Hologram’s funding and where the project goes next - the short version: Curiosum as Main Spons...
New
CodeSync
:microphone: ElixirConf 2026 - Call for Talks is open! We’re heading to Chicago :united_states: :round_pushpin: In person + virtual :d...
New

We're in Beta

About us Mission Statement

Options

Thread Display Mode




Thread Preview

Skip Thread Previews