#path #prefix #set #extern #between #1

common-path

Finds the common prefix between a set of paths

1 stable release

Uses old Rust 2015

1.0.0 Nov 15, 2018

#772 in Rust patterns

Download history 13119/week @ 2022-08-15 11876/week @ 2022-08-22 11188/week @ 2022-08-29 9792/week @ 2022-09-05 10218/week @ 2022-09-12 9613/week @ 2022-09-19 11240/week @ 2022-09-26 11903/week @ 2022-10-03 12705/week @ 2022-10-10 10828/week @ 2022-10-17 10196/week @ 2022-10-24 12922/week @ 2022-10-31 13203/week @ 2022-11-07 12258/week @ 2022-11-14 11796/week @ 2022-11-21 13521/week @ 2022-11-28

51,485 downloads per month
Used in 8 crates (4 directly)

MIT/Apache

7KB
75 lines

= common-path

https://docs.rs/common-path[Documentation]

A small crate that provides functions for determining the common prefix, if any, between a set of paths

== Installation

In your Cargo.toml, add this to the [dependencies] section:


common-path = "1"

and in your crate root, add


// src/lib.rs, src/main.rs, etc extern crate common_path;

== Usage

There are two functions provided: common_path, and common_path_all


extern crate common_path; use std::path::Path;

fn main() { let a = Path::new("/a/b/c/d"); let b = Path::new("/a/b/e/f"); let prefix = common_path::common_path(a, b); // => Some(Path::new("/a/b")) }

If you need to find a common prefix for more than 2 paths, common_path_all takes anything that can be turned into an iterator of Path references:


extern crate common_path; use std::path::Path;

fn main() { let a = Path::new("/a/b/c/d"); let b = Path::new("/a/b/e/f"); let c = Path::new("/a/g/h/i"); let prefix = common_path::common_path_all(vec![a, b, c]); // => Some(Path::new("/a")) }

=== Notes

This library makes no attempt to canonicalize the paths, so 2 paths that should theoretically have a common prefix might get missed unless they are canonicalized beforehand.

For example, /foo/bar/baz and /foo/quux/../bar/baz/quuux should have the common prefix /foo/bar/baz, once they are canonicalized, but in this form, this library will return a prefix of /foo. If you call Path::canonicalize on them beforehand, you will get the "correct" prefix, but canonicalize will return on an error on paths that don't actually exist, so I wanted to avoid using it in this library.

No runtime deps