Comments (5)
6 years later and just reporting that I'm finding myself quite astonished here.
Program:
use url::Url;
fn main() {
let url1 = Url::parse("http://localhost:5000").unwrap();
println!("Port: {:?}", url1.port());
let url2 = Url::parse("http://localhost:80").unwrap();
println!("Port: {:?}", url2.port());
}
Output:
Port: Some(5000)
Port: None
I think is very unintuitive, I clearly set the port and expect it to be there. Erasing it for 80 is magic.
from rust-url.
For people coming along later and looking for a better option, use url.port_or_known_default()
, it behaves how you'd actually expect it to behave.
from rust-url.
The idea is to do like browsers’s URLUtils.port
which is the empty string when the port number is the same as the scheme’s default (80 for HTTP).
There’s a .port_or_default()
convenience method, which may be what you’re looking for.
I’ve considered changing "port" to be the current "port or default", and have a "port is default" boolean or something. What do you think?
from rust-url.
I would defer to the 'Principle of least astonishment' and say that a URL library in isolation should parse all ports equally.
Behaviour like URLUtils.port
makes sense to me in a certain environment (like an HTTP browser that has certain common cases), but not in a general URL library. I would certainly encourage the change.
If anything, I would say maybe there should be a method .is_default() -> bool
/ is_default_for_scheme() -> bool
instead of a method that returns an Option<u16>
to check for default port values.
from rust-url.
I’m very skeptical of this so-called "principle of least astonishment". What’s astonishing to someone might be obvious and make perfect sense to someone else. Everyone has different experience and makes different assumptions.
Regardless, a more important concern for this library is interoperability. Any deviation like this is a potential number of sites that work fine in other browsers but are broken in Servo.
from rust-url.
Related Issues (20)
- `=` is not being escaped as query value HOT 2
- [DataUrl] Unable to parse application/json;utf8 containing # HOT 1
- Feature request: provide separate struct for URL which is can-be-base
- Error: 🚫 Building project failed: error[E0583]: file not found for module `origin`serde, interproc... HOT 2
- Poping a path segment removes slash separator HOT 2
- No hostname format validation in URL HOT 5
- The input urls generated by the fuzzer can be problematic as it causes very long parse times
- Incorrect error when url contains number sign HOT 1
- URI and IRI support? HOT 1
- `form_urlencoded::ByteSerialize` does NOT conform to the URL standard HOT 1
- Why is IP convert to Domain HOT 3
- perf: Use `NonZeroU16` for port numbers
- Url with quote after schema is getting parsed as valid. HOT 13
- v2.5.1 breaking crates.io CI HOT 1
- MSRV bump 1.67 in v2.5.1 HOT 23
- idna `to_unicode()` API has degraded in 1.0 HOT 10
- Massive regression in compile times HOT 19
- data-url: Fuzzed data URL causes high memory usage
- Upgrade to 2.5.1 breaks compilation on Windows HOT 3
- Upgrading url downgrades idna HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from rust-url.