Przeglądaj źródła

feat: add a new rule function rm_prefix

zmstone 1 rok temu
rodzic
commit
029e2dfb1e

+ 6 - 0
apps/emqx_rule_engine/src/emqx_rule_funcs.erl

@@ -136,6 +136,8 @@
     ltrim/1,
     reverse/1,
     rtrim/1,
+    rtrim/2,
+    rm_prefix/2,
     strlen/1,
     substr/2,
     substr/3,
@@ -770,6 +772,10 @@ reverse(S) -> emqx_variform_bif:reverse(S).
 
 rtrim(S) -> emqx_variform_bif:rtrim(S).
 
+rtrim(S, Chars) -> emqx_variform_bif:rtrim(S, Chars).
+
+rm_prefix(S, Prefix) -> emqx_variform_bif:rm_prefix(S, Prefix).
+
 strlen(S) -> emqx_variform_bif:strlen(S).
 
 substr(S, Start) -> emqx_variform_bif:substr(S, Start).

+ 12 - 0
apps/emqx_utils/src/emqx_variform_bif.erl

@@ -25,6 +25,7 @@
     reverse/1,
     rtrim/1,
     rtrim/2,
+    rm_prefix/2,
     strlen/1,
     substr/2,
     substr/3,
@@ -107,6 +108,17 @@ rtrim(S) when is_binary(S) ->
 rtrim(S, Chars) when is_binary(S) ->
     string:trim(S, trailing, Chars).
 
+%% @doc Remove the prefix of a string if there is a match.
+%% The original stirng is returned if there is no match.
+rm_prefix(S, Prefix) ->
+    Size = size(Prefix),
+    case S of
+        <<P:Size/binary, Rem/binary>> when P =:= Prefix ->
+            Rem;
+        _ ->
+            S
+    end.
+
 strlen(S) when is_binary(S) ->
     string:length(S).