pub struct Converter {
pub boundaries: Vec<Boundary>,
pub patterns: Vec<Pattern>,
pub delimiter: String,
}Expand description
The parameters for performing a case conversion.
A Converter stores three fields needed for case conversion.
boundaries: how a string is split into words.patterns: how words are mutated, or how each character’s case will change.delimiter: how the mutated words are joined into the final string.
Then calling convert on a Converter will apply a case conversion
defined by those fields. The Converter struct is what is used underneath those functions
available in the Casing struct.
You can use Converter when you need more specificity on conversion
than those provided in Casing, or if it is simply more convenient or explicit.
use convert_case::{Boundary, Case, Casing, Converter, Pattern};
let s = "DialogueBox-border-shadow";
// Convert using Casing trait
assert_eq!(
s.from_case(Case::Kebab).to_case(Case::Snake),
"dialoguebox_border_shadow",
);
// Convert using similar methods on Converter
let conv = Converter::new()
.from_case(Case::Kebab)
.to_case(Case::Snake);
assert_eq!(conv.convert(s), "dialoguebox_border_shadow");
// Convert by setting each field explicitly
let conv = Converter::new()
.set_boundaries(&[Boundary::Hyphen])
.set_patterns(&[Pattern::Lowercase])
.set_delimiter("_");
assert_eq!(conv.convert(s), "dialoguebox_border_shadow");Or you can use Converter when you are performing a transformation
not provided as a variant of Case.
let dot_camel = Converter::new()
.set_boundaries(&[Boundary::LowerUpper, Boundary::LowerDigit])
.set_patterns(&[Pattern::Camel])
.set_delimiter(".");
assert_eq!(dot_camel.convert("CollisionShape2D"), "collision.Shape.2d");Fields§
§boundaries: Vec<Boundary>How a string is split into words.
patterns: Vec<Pattern>How each word is mutated before joining.
delimiter: StringThe string used to join mutated words together.
Implementations§
Source§impl Converter
impl Converter
Sourcepub fn new() -> Converter
pub fn new() -> Converter
Creates a new Converter with default fields. This is the same as Default::default().
The Converter will use Boundary::defaults() for boundaries, no patterns, and an empty
string as a delimiter.
let conv = Converter::new();
assert_eq!(conv.convert("Ice-cream TRUCK"), "IcecreamTRUCK")Sourcepub fn convert<T>(&self, s: T) -> String
pub fn convert<T>(&self, s: T) -> String
Converts a string.
let conv = Converter::new()
.to_case(Case::Camel);
assert_eq!(conv.convert("XML_HTTP_Request"), "xmlHttpRequest")Sourcepub fn to_case(self, case: Case<'_>) -> Converter
pub fn to_case(self, case: Case<'_>) -> Converter
Set the pattern and delimiter to those associated with the given case.
let conv = Converter::new()
.to_case(Case::Pascal);
assert_eq!(conv.convert("variable name"), "VariableName")Sourcepub fn from_case(self, case: Case<'_>) -> Converter
pub fn from_case(self, case: Case<'_>) -> Converter
Sets the boundaries to those associated with the provided case. This is used
by the from_case function in the Casing trait.
let conv = Converter::new()
.from_case(Case::Snake)
.to_case(Case::Title);
assert_eq!(conv.convert("dot_productValue"), "Dot Productvalue")Sourcepub fn set_boundaries(self, bs: &[Boundary]) -> Converter
pub fn set_boundaries(self, bs: &[Boundary]) -> Converter
Sets the boundaries to those provided.
let conv = Converter::new()
.set_boundaries(&[Boundary::Underscore, Boundary::LowerUpper])
.to_case(Case::Lower);
assert_eq!(conv.convert("firstName_lastName"), "first name last name");Sourcepub fn add_boundary(self, b: Boundary) -> Converter
pub fn add_boundary(self, b: Boundary) -> Converter
Adds a boundary to the list of boundaries.
let conv = Converter::new()
.from_case(Case::Title)
.add_boundary(Boundary::Hyphen)
.to_case(Case::Snake);
assert_eq!(conv.convert("My Biography - Video 1"), "my_biography___video_1")Sourcepub fn add_boundaries(self, bs: &[Boundary]) -> Converter
pub fn add_boundaries(self, bs: &[Boundary]) -> Converter
Adds a vector of boundaries to the list of boundaries.
let conv = Converter::new()
.from_case(Case::Kebab)
.to_case(Case::Title)
.add_boundaries(&[Boundary::Underscore, Boundary::LowerUpper]);
assert_eq!(conv.convert("2020-10_firstDay"), "2020 10 First Day");Sourcepub fn remove_boundary(self, b: Boundary) -> Converter
pub fn remove_boundary(self, b: Boundary) -> Converter
Removes a boundary from the list of boundaries if it exists.
Note: Boundary::Custom variants are never considered equal due to
function pointer comparison limitations, so they cannot be removed using this method.
Recall that the default boundaries include no custom enumerations.
let conv = Converter::new()
.remove_boundary(Boundary::Acronym)
.to_case(Case::Kebab);
assert_eq!(conv.convert("HTTPRequest_parser"), "httprequest-parser");Sourcepub fn remove_boundaries(self, bs: &[Boundary]) -> Converter
pub fn remove_boundaries(self, bs: &[Boundary]) -> Converter
Removes all the provided boundaries from the list of boundaries if it exists.
Note: Boundary::Custom variants are never considered equal due to
function pointer comparison limitations, so they cannot be removed using this method.
Recall that the default boundaries include no custom enumerations.
let conv = Converter::new()
.remove_boundaries(&Boundary::digits())
.to_case(Case::Snake);
assert_eq!(conv.convert("C04 S03 Path Finding.pdf"), "c04_s03_path_finding.pdf");Sourcepub fn set_pattern(self, p: Pattern) -> Converter
pub fn set_pattern(self, p: Pattern) -> Converter
Sets a single pattern, replacing any existing patterns.
let conv = Converter::new()
.set_delimiter("_")
.set_pattern(Pattern::Sentence);
assert_eq!(conv.convert("BJARNE CASE"), "Bjarne_case");Sourcepub fn set_patterns(self, ps: &[Pattern]) -> Converter
pub fn set_patterns(self, ps: &[Pattern]) -> Converter
Sets the patterns to those provided, replacing any existing patterns. An empty slice means no mutation (words pass through unchanged).
let conv = Converter::new()
.set_delimiter("_")
.set_patterns(&[Pattern::Sentence]);
assert_eq!(conv.convert("BJARNE CASE"), "Bjarne_case");Sourcepub fn add_pattern(self, p: Pattern) -> Converter
pub fn add_pattern(self, p: Pattern) -> Converter
Adds a pattern to the end of the pattern list. Patterns are applied in order, so this pattern will be applied last.
let conv = Converter::new()
.from_case(Case::Kebab)
.add_pattern(Pattern::RemoveEmpty)
.add_pattern(Pattern::Camel);
assert_eq!(conv.convert("--leading-delims"), "leadingDelims");Sourcepub fn add_patterns(self, ps: &[Pattern]) -> Converter
pub fn add_patterns(self, ps: &[Pattern]) -> Converter
Adds multiple patterns to the end of the pattern list.
let conv = Converter::new()
.add_patterns(&[Pattern::RemoveEmpty, Pattern::Lowercase]);Sourcepub fn remove_pattern(self, p: Pattern) -> Converter
pub fn remove_pattern(self, p: Pattern) -> Converter
Removes a pattern from the list if it exists.
Note: Pattern::Custom variants are never considered equal due to
function pointer comparison limitations, so they cannot be removed using this method.
let conv = Converter::new()
.set_boundaries(&[Boundary::Space])
.to_case(Case::Snake)
.remove_pattern(Pattern::Lowercase);
assert_eq!(conv.convert("HeLLo WoRLD"), "HeLLo_WoRLD");Sourcepub fn remove_patterns(self, ps: &[Pattern]) -> Converter
pub fn remove_patterns(self, ps: &[Pattern]) -> Converter
Removes all specified patterns from the list.
Note: Pattern::Custom variants are never considered equal due to
function pointer comparison limitations, so they cannot be removed using this method.
let conv = Converter::new()
.set_patterns(&[Pattern::RemoveEmpty, Pattern::Lowercase, Pattern::Capital])
.remove_patterns(&[Pattern::Lowercase, Pattern::Capital]);
// Only RemoveEmpty remainsSourcepub fn set_delimiter<T>(self, d: T) -> Converterwhere
T: ToString,
pub fn set_delimiter<T>(self, d: T) -> Converterwhere
T: ToString,
Sets the delimiter.
let conv = Converter::new()
.to_case(Case::Snake)
.set_delimiter(".");
assert_eq!(conv.convert("LowerWithDots"), "lower.with.dots");Trait Implementations§
Auto Trait Implementations§
impl Freeze for Converter
impl RefUnwindSafe for Converter
impl Send for Converter
impl Sync for Converter
impl Unpin for Converter
impl UnsafeUnpin for Converter
impl UnwindSafe for Converter
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
Source§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>, which can then be
downcast into Box<dyn ConcreteType> where ConcreteType implements Trait.Source§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait> (where Trait: Downcast) to Rc<Any>, which can then be further
downcast into Rc<ConcreteType> where ConcreteType implements Trait.Source§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &Any’s vtable from &Trait’s.Source§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &mut Any’s vtable from &mut Trait’s.Source§impl<T> DowncastSend for T
impl<T> DowncastSend for T
Source§impl<T> DowncastSync for T
impl<T> DowncastSync for T
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more