reactive_graph_std_string/behaviour/entity/string_operation/
function.rs

1use std::sync::Arc;
2use std::sync::LazyLock;
3
4use reactive_graph_behaviour_model_impl::entity::EntityBehaviourFactoryCreator;
5use reactive_graph_behaviour_model_impl::entity::EntityBehaviourFunctions;
6use reactive_graph_behaviour_model_impl::entity::EntityBehaviourFunctionsStorage;
7use voca_rs::case;
8use voca_rs::escape;
9use voca_rs::manipulate;
10use voca_rs::strip;
11
12use reactive_graph_std_string_model::NAMESPACE_STRING;
13
14use crate::behaviour::entity::string_operation::StringOperationFactory;
15
16pub type StringOperationFunction = fn(String) -> String;
17
18pub const FN_CAMEL_CASE: StringOperationFunction = |lhs: String| case::camel_case(lhs.as_str());
19pub const FN_CAPITALIZE: StringOperationFunction = |lhs: String| case::capitalize(lhs.as_str(), true);
20pub const FN_DECAPITALIZE: StringOperationFunction = |lhs: String| case::decapitalize(lhs.as_str(), true);
21pub const FN_ESCAPE_HTML: StringOperationFunction = |lhs: String| escape::escape_html(lhs.as_str());
22pub const FN_ESCAPE_REGEXP: StringOperationFunction = |lhs: String| escape::escape_regexp(lhs.as_str());
23pub const FN_KEBAB_CASE: StringOperationFunction = |lhs: String| case::kebab_case(lhs.as_str());
24pub const FN_LOWER_FIRST: StringOperationFunction = |lhs: String| case::lower_first(lhs.as_str());
25pub const FN_LOWERCASE: StringOperationFunction = |lhs: String| lhs.to_lowercase();
26pub const FN_PASCAL_CASE: StringOperationFunction = |lhs: String| case::pascal_case(lhs.as_str());
27pub const FN_REVERSE: StringOperationFunction = |lhs: String| manipulate::reverse(lhs.as_str());
28pub const FN_SHOUTY_KEBAB_CASE: StringOperationFunction = |lhs: String| case::shouty_kebab_case(lhs.as_str());
29pub const FN_SHOUTY_SNAKE_CASE: StringOperationFunction = |lhs: String| case::shouty_snake_case(lhs.as_str());
30pub const FN_SNAKE_CASE: StringOperationFunction = |lhs: String| case::snake_case(lhs.as_str());
31pub const FN_STRIP_HTML_TAGS: StringOperationFunction = |lhs: String| strip::strip_tags(lhs.as_str());
32pub const FN_SWAP_CASE: StringOperationFunction = |lhs: String| case::swap_case(lhs.as_str());
33pub const FN_TITLE_CASE: StringOperationFunction = |lhs: String| case::title_case(lhs.as_str());
34pub const FN_TRAIN_CASE: StringOperationFunction = |lhs: String| case::train_case(lhs.as_str());
35pub const FN_TRIM: StringOperationFunction = |lhs: String| String::from(lhs.trim());
36pub const FN_TRIM_START: StringOperationFunction = |lhs: String| String::from(lhs.trim_start());
37pub const FN_TRIM_END: StringOperationFunction = |lhs: String| String::from(lhs.trim_end());
38pub const FN_UNESCAPE_HTML: StringOperationFunction = |lhs: String| escape::unescape_html(lhs.as_str());
39pub const FN_UPPER_FIRST: StringOperationFunction = |lhs: String| case::upper_first(lhs.as_str());
40pub const FN_UPPERCASE: StringOperationFunction = |lhs: String| lhs.to_uppercase();
41
42const FACTORY_CREATOR: EntityBehaviourFactoryCreator<StringOperationFunction> = |ty, f| Arc::new(StringOperationFactory::new(ty.clone(), f));
43
44pub static STRING_OPERATIONS: EntityBehaviourFunctionsStorage<StringOperationFunction> = LazyLock::new(|| {
45    EntityBehaviourFunctions::<StringOperationFunction>::with_namespace(NAMESPACE_STRING, FACTORY_CREATOR)
46        .behaviour("camel_case", FN_CAMEL_CASE)
47        .behaviour("capitalize", FN_CAPITALIZE)
48        .behaviour("decapitalize", FN_DECAPITALIZE)
49        .behaviour("escape_html", FN_ESCAPE_HTML)
50        .behaviour("escape_regexp", FN_ESCAPE_REGEXP)
51        .behaviour("kebab_case", FN_KEBAB_CASE)
52        .behaviour("lower_first", FN_LOWER_FIRST)
53        .behaviour("lowercase", FN_LOWERCASE)
54        .behaviour("pascal_case", FN_PASCAL_CASE)
55        .behaviour("reverse", FN_REVERSE)
56        .behaviour("shouty_kebab_case", FN_SHOUTY_KEBAB_CASE)
57        .behaviour("shouty_snake_case", FN_SHOUTY_SNAKE_CASE)
58        .behaviour("snake_case", FN_SNAKE_CASE)
59        .behaviour("strip_html_tags", FN_STRIP_HTML_TAGS)
60        .behaviour("swap_case", FN_SWAP_CASE)
61        .behaviour("title_case", FN_TITLE_CASE)
62        .behaviour("train_case", FN_TRAIN_CASE)
63        .behaviour("trim", FN_TRIM)
64        .behaviour("trim_start", FN_TRIM_START)
65        .behaviour("trim_end", FN_TRIM_END)
66        .behaviour("unescape_html", FN_UNESCAPE_HTML)
67        .behaviour("upper_first", FN_UPPER_FIRST)
68        .behaviour("uppercase", FN_UPPERCASE)
69        .get()
70});