#
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements.  See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License.  You may obtain a copy of the License at
#
#    http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#

charAt=org.wso2.siddhi.extension.string.CharAtFunctionExtension
coalesce=org.wso2.siddhi.extension.string.CoalesceFunctionExtension
concat=org.wso2.siddhi.extension.string.ConcatFunctionExtension
length=org.wso2.siddhi.extension.string.LengthFunctionExtension
lower=org.wso2.siddhi.extension.string.LowerFunctionExtension
regexp=org.wso2.siddhi.extension.string.RegexpFunctionExtension
repeat=org.wso2.siddhi.extension.string.RepeatFunctionExtension
replaceAll=org.wso2.siddhi.extension.string.ReplaceAllFunctionExtension
replaceFirst=org.wso2.siddhi.extension.string.ReplaceFirstFunctionExtension
reverse=org.wso2.siddhi.extension.string.ReverseFunctionExtension
strcmp=org.wso2.siddhi.extension.string.StrcmpFunctionExtension
substr=org.wso2.siddhi.extension.string.SubstrFunctionExtension
trim=org.wso2.siddhi.extension.string.TrimFunctionExtension
upper=org.wso2.siddhi.extension.string.UpperFunctionExtension
hex=org.wso2.siddhi.extension.string.HexFunctionExtension
unhex=org.wso2.siddhi.extension.string.UnhexFunctionExtension
contains=org.wso2.siddhi.extension.string.ContainsFunctionExtension

# Eagle Siddhi Extension
equalsIgnoreCase=org.apache.eagle.alert.engine.siddhi.extension.EqualsIgnoreCaseExtension
containsIgnoreCase=org.apache.eagle.alert.engine.siddhi.extension.ContainsIgnoreCaseExtension
regexpIgnoreCase=org.apache.eagle.alert.engine.siddhi.extension.RegexpIgnoreCaseFunctionExtension

