#join #string #list #grammar

no-std oxford_join

Join string slices with Oxford Commas!

8 releases

Uses new Rust 2021

0.2.5 Sep 11, 2022
0.2.4 Aug 11, 2022
0.2.3 Apr 30, 2022
0.2.1 Jan 13, 2022
0.1.1 Jun 27, 2021

#213 in Text processing

41 downloads per month
Used in guff_css

WTFPL license

23KB
376 lines

Oxford Join

Documentation Changelog crates.io Build Status Dependency Status PRs Welcome

Join a slice of strings with Oxford Commas inserted as necessary, using the Conjunction of your choice.

(You know, as it should be. Haha.)

The return formatting depends on the size of the set:

0: ""
1: "first"
2: "first <CONJUNCTION> last"
n: "first, second, …, <CONJUNCTION> last"

This crate is #![no_std]-compatible.

Examples

The magic is accomplished with the OxfordJoin trait. Import that, and most slice-y things holding AsRef<str> will inherit the OxfordJoin::oxford_join method for joining.

use oxford_join::{Conjunction, OxfordJoin};

let set = ["Apples", "Oranges"];
assert_eq!(set.oxford_join(Conjunction::And), "Apples and Oranges");

let set = ["Apples", "Oranges", "Bananas"];
assert_eq!(set.oxford_join(Conjunction::And), "Apples, Oranges, and Bananas");

// There are also shorthand methods for and, or, and_or, and nor, allowing you
// to skip the Conjunction enum entirely.
assert_eq!(set.oxford_and(), "Apples, Oranges, and Bananas");
assert_eq!(set.oxford_and_or(), "Apples, Oranges, and/or Bananas");
assert_eq!(set.oxford_nor(), "Apples, Oranges, nor Bananas");
assert_eq!(set.oxford_or(), "Apples, Oranges, or Bananas");

That's all, folks!

Installation

Add oxford_join to your dependencies in Cargo.toml, like:

[dependencies]
oxford_join = "0.2.*"

License

Copyright © 2022 Blobfolio, LLC <hello@blobfolio.com>

This work is free. You can redistribute it and/or modify it under the terms of the Do What The Fuck You Want To Public License, Version 2.

DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
Version 2, December 2004

Copyright (C) 2004 Sam Hocevar <sam@hocevar.net>

Everyone is permitted to copy and distribute verbatim or modified
copies of this license document, and changing it is allowed as long
as the name is changed.

DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION

0. You just DO WHAT THE FUCK YOU WANT TO.

No runtime deps