I dislike +1 posts, but I feel very strongly about this—it'd be amazing to 
have.

I want booting an application to fail as fast and obviously as possible if 
someone gives it a bad phoenix host url, ecto database url, rabbitMQ url, 
redis url, mongodb url, etc. Preferably, before the connection is 
attempted; which, depending on the library in question consuming the url, 
often fails with a confusing network-failure-related error message.
On Tuesday, May 16, 2023 at 7:51:21 PM UTC-4 Kip wrote:

> I think this is a good proposal, as is the ~UTC one.  Both make the intent 
> much clearer.
>
> On 16 May 2023, at 6:45 pm, Wojtek Mach <woj...@wojtekmach.pl> wrote:
>
> I just realised another small benefit of showing the full URL in the 
> sigil. Here’s a snippet from the proposal as rendered by my e-mail client:
>
> <PastedGraphic-1.png>
>
>
> The URL was automatically made clickable. Tools like Livebook could 
> potentially do the same.
>
> On 16 May 2023, at 10:38, Wojtek Mach <woj...@wojtekmach.pl> wrote:
>
> Hi, I'd like to propose adding ~URI for constructing URI structs. Here's 
> an example:
>
>     iex> ~URI"https://elixir-lang.org";
>     %URI{
>       scheme: "https",
>       authority: "elixir-lang.org",
>       userinfo: nil,
>       host: "elixir-lang.org",
>       port: 443,
>       path: nil,
>       query: nil,
>       fragment: nil
>     }
>
> I believe the advantage is we can make this a macro and thus parse the URI 
> string at compile-time
> so catch bugs because of incorrect format early (though these are pretty 
> uncommon) and also be a
> little bit more efficient at runtime.
>
> If added, I'm not sure whether ~URI should use URI.parse or URI.new! under 
> the hood so an advice
> on that would be appreciated.
>
> This is a separate but related discussion so while at it, I'd like to 
> propose adding Inspect
> implementation for URI that would return the sigil:
>
>     iex> ~URI"https://elixir-lang.org";
>     ~URI"https://elixir-lang.org";
>
> I think more compact representation helps e.g. here. Before:
>
>     iex> Req.new(url: "https://elixir-lang.org";)
>     %Req.Request{
>       method: :get,
>       url: %URI{
>         scheme: "https",
>         authority: "elixir-lang.org",
>         userinfo: nil,
>         host: "elixir-lang.org",
>         port: 443,
>         path: nil,
>         query: nil,
>         fragment: nil
>       },
>       headers: [],
>       body: nil,
>       options: %{},
>       ...
>     }
>
> After:
>
>     iex> Req.new(url: "https://elixir-lang.org";)
>     %Req.Request{
>       method: :get,
>       url: ~URI"https://elixir-lang.org";,
>       headers: [],
>       body: nil,
>       options: %{},
>       ...
>     }
>
> On the other hand, seeing the internal representation right away is 
> sometimes useful given the URI
> format is somewhat subtle.
>
> Before:
>
>     iex> URI.parse("/foo")
>     %URI{
>       scheme: nil,
>       userinfo: nil,
>       host: nil,
>       port: nil,
>       path: "/foo",
>       query: nil,
>       fragment: nil
>     }
>     iex> URI.parse("//foo")
>     %URI{
>       scheme: nil,
>       authority: "foo",
>       userinfo: nil,
>       host: "foo",
>       port: nil,
>       path: nil,
>       query: nil,
>       fragment: nil
>     }
>
> After:
>
>     iex> URI.parse("/foo")
>     ~URI"/foo"
>     iex> URI.parse("//foo")
>     ~URI"//foo"
>
> I think this downside can be alleviated by adding `IEx.Info` 
> implementation along these lines:
>
>     iex> i URI.parse("/foo")
>     Term
>       ~URI"/foo"
>     Data type
>       URI
>     Raw representation
>       %URI{
>         scheme: nil,
>         userinfo: nil,
>         host: nil,
>         port: nil,
>         path: "/foo",
>         query: nil,
>         fragment: nil
>       }
>
> -- 
> You received this message because you are subscribed to the Google Groups 
> "elixir-lang-core" group.
> To unsubscribe from this group and stop receiving emails from it, send an 
> email to elixir-lang-co...@googlegroups.com.
> To view this discussion on the web visit 
> https://groups.google.com/d/msgid/elixir-lang-core/9cc29c5e-ca64-42b3-83f8-84c60985efedn%40googlegroups.com
>  
> <https://groups.google.com/d/msgid/elixir-lang-core/9cc29c5e-ca64-42b3-83f8-84c60985efedn%40googlegroups.com?utm_medium=email&utm_source=footer>
> .
>
>
>
> -- 
> You received this message because you are subscribed to the Google Groups 
> "elixir-lang-core" group.
> To unsubscribe from this group and stop receiving emails from it, send an 
> email to elixir-lang-co...@googlegroups.com.
>
> To view this discussion on the web visit 
> https://groups.google.com/d/msgid/elixir-lang-core/5D183EE3-56B8-41BB-8D23-5014C72EA0BE%40wojtekmach.pl
>  
> <https://groups.google.com/d/msgid/elixir-lang-core/5D183EE3-56B8-41BB-8D23-5014C72EA0BE%40wojtekmach.pl?utm_medium=email&utm_source=footer>
> .
>
>
>

-- 
You received this message because you are subscribed to the Google Groups 
"elixir-lang-core" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to elixir-lang-core+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/elixir-lang-core/d835a6cc-a052-469b-871d-a45b3d9f2ea1n%40googlegroups.com.

Reply via email to