feat!: introduce Path as a subset of Url to enforce type safety
#3361
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Prepare for #611
With #3034,
Urlgained support for virtual filesystem namespaces, which means a scheme can appear in the URL now, so it can be used like this:The value returned here is actually a path that does not include the scheme (
sftp://my-server/), so returning it as aUrlno longer makes sense:Url("/to/file")denotes a local file whose path is/to/file./to/filein themy-servernamespaceThat ambiguity can create potential security risks, for example, passing it to an API like
fs.remove()could end up deleting a local file when the intention was to delete a remote one.By introducing
Pathand restricting its usage, for example,fs.remove()accepts onlyUrland notPath, so that users must explicitly construct aUrlfrom aPathbefore operating on it, which reduces misuse-driven security risks and enforces type safety:Url's
strip_prefix()method now returns a newly introducedPathtype instead of the originalUrl.Pathexposes all ofUrl's API except for the scheme. Documentation is available at https://yazi-rs.github.io/docs/next/plugins/types#path