// ========================================================================== // Squidex Headless CMS // ========================================================================== // Copyright (c) Squidex UG (haftungsbeschraenkt) // All rights reserved. Licensed under the MIT license. // ========================================================================== using System.Collections.Generic; using System.Threading.Tasks; namespace Squidex.Infrastructure.Queries { public abstract class AsyncTransformVisitor : FilterNodeVisitor?>, TValue, TArgs> { public override ValueTask?> Visit(CompareFilter nodeIn, TArgs args) { return new ValueTask?>(nodeIn); } public override async ValueTask?> Visit(LogicalFilter nodeIn, TArgs args) { var pruned = new List>(nodeIn.Filters.Count); foreach (var inner in nodeIn.Filters) { var transformed = await inner.Accept(this, args); if (transformed != null) { pruned.Add(transformed); } } return new LogicalFilter(nodeIn.Type, pruned); } public override async ValueTask?> Visit(NegateFilter nodeIn, TArgs args) { var inner = await nodeIn.Filter.Accept(this, args); if (inner == null) { return inner; } return new NegateFilter(inner); } } }