bianchidotdev

bianchidotdev

Liveview: is_connected macro?

I came across a blog post that implemented a function guard for a liveview socket connection’s presence. It seems like a really ergonomic way to separate out mount functions for connected sockets and disconnected sockets, and I was surprised I wasn’t able to find any existing proposals or suggestions to implement connected? as a macro (very possibly my search fu failing me).

Is there any appetite in implementing this function guard in core liveview? Are there reasons it’s not implemented as a guard yet.

Code referenced in the blog post:

defguard is_connected?(socket) when socket.transport_pid != nil

Enabling:

def mount(params, session, socket) when is_connected?(socket) do
  # Connected mount
end

def mount(params, session, socket) do
  # Disconnected mount
end

First 5 of 5 Posts Switch mode

al2o3cr

al2o3cr

One reason this may not exist already - the map.field notation wasn’t supported in guards until this PR, released in 1.11:

https://github.com/elixir-lang/elixir/pull/9711

Phoenix 1.6 only requires Elixir 1.9+, so Phoenix 1.7 is the earliest version this guard could have been included in.

D4no0

D4no0

definetly some new feature I didn’t see yet

JohnnyCurran

JohnnyCurran

Glad you liked the article! I have been thinking about making a PR to add it to LiveView. I wanted to get some feedback on it first. I suppose this thread might serve that purpose

I haven’t tested it, but I imagine the map.field syntax could be worked around by matching on the fields in the struct:

defguard connected?(%Socket{transport: transport}) when transport != nil

But that’s just a guess. I wrote that in the forum post editor

codeanpeace

codeanpeace

Gave it a whirl and it doesn’t look like you can pattern match when defining guards:

** (ArgumentError) invalid syntax in defguard is_connected?(%Socket{transport_pid: transport_pid})

JohnnyCurran

JohnnyCurran

:frowning:

Thanks for giving it a shot though!

I guess that makes sense because guards have to be compile time constants and pattern matching is not

— All posts loaded —

Where Next?

Trending in Proposals: Ideas Top

Other Trending Topics Top

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
jimsynz
Beam Bots (or just BB for short) is a framework for building fault-tolerant robotics applications in Elixir using familiar OTP patterns. ...
New
Damirados
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
ausimian
Emily is an Elixir library that runs Nx computations on Apple’s MLX. Install it as the default Nx backend and Nx, defn, Axon, Nx.Serving,...
New
type1fool
I just stumbled on a newly redesigned elixir-lang.org. :tada: It looks like @Software_Mansion did the work, and I think it is generally a...
New
juhalehtonen
There has been a thread to discuss the Stack Overflow Developer Survey on this forum every year since 2018, so here’s yet another one for...
New

We're in Beta

About us Mission Statement