1use std::borrow::Cow;
2
3use crate::common::CamelLikeOptions;
4use crate::common::is_case_camel_like;
5use crate::common::to_case_camel_like;
6
7const OPTIONS: CamelLikeOptions = CamelLikeOptions {
8 new_word: true,
9 first_word: false,
10 separator: b' ',
11 has_separator: false,
12 inverted: false,
13 concat_num: true,
14};
15
16#[inline]
21#[must_use]
22pub fn to_pascal_case<T>(input: &T) -> Cow<'_, [u8]>
23where
24 T: AsRef<[u8]> + ?Sized,
25{
26 to_case_camel_like(input.as_ref(), OPTIONS)
27}
28
29#[inline]
31#[must_use]
32pub fn is_pascal_case<T>(input: T) -> bool
33where
34 T: AsRef<[u8]>,
35{
36 is_case_camel_like(input.as_ref(), OPTIONS)
37}
38
39#[cfg(test)]
40mod tests {
41 use super::is_pascal_case;
42 use super::to_pascal_case;
43
44 #[test]
45 fn converts_examples() {
46 assert_eq!(to_pascal_case("fooBar").as_ref(), b"FooBar");
47 assert_eq!(to_pascal_case("FOO_BAR").as_ref(), b"FooBar");
48 assert_eq!(to_pascal_case("Foo Bar").as_ref(), b"FooBar");
49 assert_eq!(to_pascal_case("foo_bar").as_ref(), b"FooBar");
50 assert_eq!(to_pascal_case("Foo bar").as_ref(), b"FooBar");
51 assert_eq!(to_pascal_case("foo-bar").as_ref(), b"FooBar");
52 assert_eq!(to_pascal_case("FooBar").as_ref(), b"FooBar");
53 assert_eq!(to_pascal_case("FooBar3").as_ref(), b"FooBar3");
54 }
55
56 #[test]
57 fn checks_examples() {
58 assert!(is_pascal_case("Foo"));
59 assert!(is_pascal_case("FooBarIsAReallyReallyLongString"));
60 assert!(is_pascal_case("FooBarIsAReallyReally3LongString"));
61
62 assert!(!is_pascal_case("foo"));
63 assert!(!is_pascal_case("foo-bar-string-that-is-really-really-long"));
64 assert!(!is_pascal_case("FOO_BAR_STRING_THAT_IS_REALLY_REALLY_LONG"));
65 assert!(!is_pascal_case("foo_bar_string_that_is_really_really_long"));
66 assert!(!is_pascal_case("Foo bar string that is really really long"));
67 assert!(!is_pascal_case("Foo Bar Is A Really Really Long String"));
68 }
69
70 #[test]
71 fn supports_byte_input() {
72 assert_eq!(to_pascal_case(b"foo_bar").as_ref(), b"FooBar");
73 assert!(is_pascal_case(b"FooBar"));
74 }
75
76 #[test]
77 fn borrows_when_already_canonical() {
78 let input = b"FooBar";
79 assert!(matches!(to_pascal_case(input), std::borrow::Cow::Borrowed(_)));
80 }
81}