Skip to content

feature: Support accessing nested type as builder method parameters #1878

@RLittlesII

Description

@RLittlesII
using System;
using System.Collections.Generic;
using System.Threading;
using System.Threading.Tasks;
using Microsoft.Extensions.Logging;
using Spectre.Console.Cli;
using Console.Features.Data.Api;
using Console.Features.Domain.Entities;
using Console.Mediation;
using Console.Mediation.Queries;

namespace Domain.Queries;

public static class Search
{
    public record Query(Func<FilterBuilder, SearchFilter> Builder) : IQuery<Result>;

    public record Result(string OriginalQuery, IEnumerable<SearchResult> SearchResults);

    public class Handler : QueryHandlerBase<Query, Result>
    {
        /// <inheritdoc/>
        protected override Task<Result> Handle(Query query, CancellationToken cancellationToken = default)
        {
            var filter = query.Builder.Invoke(FilterBuilder.Create());
            return Task.FromResult(new Result(string.Empty, []));
        }
    }

    public class FilterBuilder
    {
        private FilterBuilder()
        {
        }

        public static implicit operator SearchFilter(FilterBuilder builder) => builder.Build();

        public static FilterBuilder Create() => new FilterBuilder();
    }
}

Currently produces

    internal sealed partial class QueryFixture : AutoFixtureBase<QueryFixture>
    {
        public static implicit operator Search.Query(QueryFixture fixture) => fixture.Build();
        public QueryFixture WithBuilder(System.Func<Console.Features.Domain.Queries.Search+FilterBuilder,Console.Features.Domain.Entities.SearchFilter> Builder) => With(ref _Builder, Builder);
        public QueryFixture WithOriginal(Console.Features.Domain.Queries.Search+Query original) => With(ref _original, original);
        private Search.Query Build() => new Search.Query(_Builder, _original);
        private System.Func<Console.Features.Domain.Queries.Search+FilterBuilder,Console.Features.Domain.Entities.SearchFilter> _Builder = default;
        private Console.Features.Domain.Queries.Search+Query _original = default;
    }

Metadata

Metadata

Assignees

Labels

No labels
No labels

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions