Skip to content

Commit 98b53b1

Browse files
Merge pull request #42 from delegateas/dev
Release
2 parents 048098f + 32fbe74 commit 98b53b1

28 files changed

Lines changed: 118 additions & 67 deletions
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
using System;
2+
3+
namespace ExpressionEngine
4+
{
5+
internal class ExpressionEngineException : Exception
6+
{
7+
public ExpressionEngineException(string message) : base(message)
8+
{
9+
}
10+
}
11+
}

ExpressionEngine/ExpressionGrammar.cs

Lines changed: 7 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ namespace ExpressionEngine
1111
public class ExpressionGrammar
1212
{
1313
private readonly Parser<IRule> _method;
14-
private readonly Parser<ValueTask<ValueContainer>> _input;
14+
private readonly Parser<Task<ValueContainer>> _input;
1515

1616
public ExpressionGrammar(IEnumerable<IFunction> functions)
1717
{
@@ -66,14 +66,7 @@ from index in _method.Or(stringLiteral).Or(integer).Contained(lBracket, rBracket
6666
from nll in nullConditional
6767
from dot in Parse.Char('.')
6868
from index in Parse.AnyChar.Except(
69-
lBracket
70-
.Or(rBracket)
71-
.Or(lParenthesis)
72-
.Or(rParenthesis)
73-
.Or(Parse.Char('@'))
74-
.Or(Parse.Char(','))
75-
.Or(Parse.Char('.'))
76-
.Or(Parse.Char('?'))
69+
Parse.Chars('[', ']', '{', '}', '(', ')', '@', ',', '.', '?')
7770
).Many().Text()
7871
select new IndexRule(new StringLiteralRule(new ValueContainer(index)), nll);
7972

@@ -106,29 +99,22 @@ from indexes in bracketIndices.Or(dotIndices).Many()
10699
Parse.Char('}'))
107100
.Select(x => x.Evaluate());
108101

109-
Parser<ValueTask<ValueContainer>> expression =
110-
from at in Parse.Char('@')
111-
from method in _method
112-
select method.Evaluate();
102+
Parser<Task<ValueContainer>> expression =
103+
Parse.Char('@').SelectMany(at => _method, async (at, method) => await method.Evaluate());
113104

114105
Parser<string> allowedString =
115106
from t in simpleString.Or(allowedCharacters).Many()
116107
select string.Concat(t);
117108

118-
Parser<ValueTask<ValueContainer>> joinedString =
109+
Parser<Task<ValueContainer>> joinedString =
119110
from e in (
120111
from preFix in allowedString
121112
from exp in enclosedExpression.Optional()
122113
select exp.IsEmpty ? preFix : preFix + exp.Get())
123114
.Many()
124-
select new ValueTask<ValueContainer>(new ValueContainer(string.Concat(e)));
115+
select Task.FromResult(new ValueContainer(string.Concat(e)));
125116

126-
Parser<ValueTask<ValueContainer>> charPrefixedString =
127-
from at in Parse.Char('@')
128-
from str in Parse.LetterOrDigit.Many().Text().Except(Parse.Chars('{', '@'))
129-
select new ValueTask<ValueContainer>(new ValueContainer(str));
130-
131-
_input = expression.Or(charPrefixedString).Or(joinedString);
117+
_input = expression.Or(joinedString);
132118
}
133119

134120
public async ValueTask<string> EvaluateToString(string input)

ExpressionEngine/Functions/Implementations/CollectionFunctions/ContainsFunction.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ public override ValueTask<ValueContainer> ExecuteFunction(params ValueContainer[
4444
var substring = value.GetValue<string>();
4545
return new ValueTask<ValueContainer>(new ValueContainer(text.Contains(substring)));
4646
default:
47-
throw new PowerAutomateMockUpException($"Cannot perform contains on {collection.Type()}.");
47+
throw new ExpressionEngineException($"Cannot perform contains on {collection.Type()}.");
4848
}
4949
}
5050
}

ExpressionEngine/Functions/Implementations/CollectionFunctions/EmptyFunction.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ public override ValueTask<ValueContainer> ExecuteFunction(params ValueContainer[
2424
ValueContainer.ValueType.Object => new ValueTask<ValueContainer>(new ValueContainer(
2525
value.GetValue<Dictionary<string, ValueContainer>>().Count == 0)),
2626
ValueContainer.ValueType.Null => new ValueTask<ValueContainer>(new ValueContainer(true)),
27-
_ => throw new PowerAutomateMockUpException(
27+
_ => throw new ExpressionEngineException(
2828
$"Empty expression can only operate on String, Array or Object types, not {value.Type()}.")
2929
};
3030
}

ExpressionEngine/Functions/Implementations/CollectionFunctions/FirstFunction.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ public override ValueTask<ValueContainer> ExecuteFunction(params ValueContainer[
2121
value.GetValue<string>().Substring(0, 1))),
2222
ValueContainer.ValueType.Array => new ValueTask<ValueContainer>(new ValueContainer(
2323
value.GetValue<IEnumerable<ValueContainer>>().First())),
24-
_ => throw new PowerAutomateMockUpException(
24+
_ => throw new ExpressionEngineException(
2525
$"Empty expression can only operate on String or Array types, not {value.Type()}.")
2626
};
2727
}

ExpressionEngine/Functions/Implementations/CollectionFunctions/IntersectionFunction.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ public override ValueTask<ValueContainer> ExecuteFunction(params ValueContainer[
1717
{
1818
ValueContainer.ValueType.Array => IntersectList(parameters),
1919
ValueContainer.ValueType.Object => IntersectDict(parameters),
20-
_ => throw new PowerAutomateMockUpException(
20+
_ => throw new ExpressionEngineException(
2121
$"Can only intersect Array and Object, not {parameters[0].Type()}.")
2222
};
2323
}

ExpressionEngine/Functions/Implementations/CollectionFunctions/LastFunction.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ public override ValueTask<ValueContainer> ExecuteFunction(params ValueContainer[
2121
value.GetValue<string>().ToCharArray().Last().ToString())),
2222
ValueContainer.ValueType.Array => new ValueTask<ValueContainer>(new ValueContainer(
2323
value.GetValue<IEnumerable<ValueContainer>>().Last())),
24-
_ => throw new PowerAutomateMockUpException(
24+
_ => throw new ExpressionEngineException(
2525
$"Empty expression can only operate on String or Array types, not {value.Type()}.")
2626
};
2727
}

ExpressionEngine/Functions/Implementations/CollectionFunctions/SkipFunction.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ public override ValueTask<ValueContainer> ExecuteFunction(params ValueContainer[
2020
{
2121
ValueContainer.ValueType.Array => new ValueTask<ValueContainer>(new ValueContainer(
2222
value.GetValue<IEnumerable<ValueContainer>>().Skip(count))),
23-
_ => throw new PowerAutomateMockUpException(
23+
_ => throw new ExpressionEngineException(
2424
$"Empty expression can only operate on String or Array types, not {value.Type()}.")
2525
};
2626
}

ExpressionEngine/Functions/Implementations/CollectionFunctions/TakeFunction.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ public override ValueTask<ValueContainer> ExecuteFunction(params ValueContainer[
2020
{
2121
ValueContainer.ValueType.Array => new ValueTask<ValueContainer>(new ValueContainer(
2222
value.GetValue<IEnumerable<ValueContainer>>().Take(count))),
23-
_ => throw new PowerAutomateMockUpException(
23+
_ => throw new ExpressionEngineException(
2424
$"Empty expression can only operate on String or Array types, not {value.Type()}.")
2525
};
2626
}

ExpressionEngine/Functions/Implementations/CollectionFunctions/UnionFunction.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ public override async ValueTask<ValueContainer> ExecuteFunction(params ValueCont
1717
{
1818
ValueContainer.ValueType.Array => UnionList(parameters),
1919
ValueContainer.ValueType.Object => UnionDict(parameters),
20-
_ => throw new PowerAutomateMockUpException(
20+
_ => throw new ExpressionEngineException(
2121
$"Can only union Array and Object, not {parameters[0].Type()}.")
2222
};
2323
}

0 commit comments

Comments
 (0)