コード例 #1
0
    private static IEnumerable <MemberDeclarationSyntax> GenerateServiceMethod(string domain, HassService service)
    {
        var serviceName = service.Service !;

        var serviceArguments      = ServiceArguments.Create(domain, service);
        var haContextVariableName = GetVariableName <IHaContext>("_");

        var serviceMethodName = GetServiceMethodName(serviceName);

        var targetParam   = service.Target is not null ? $"{SimplifyTypeName(typeof(ServiceTarget))} target" : null;
        var targetArg     = service.Target is not null ? "target" : "null";
        var targetComment = service.Target is not null?ParameterComment("target", "The target for this service call") : (SyntaxTrivia?)null;

        if (serviceArguments is null)
        {
            // method without arguments
            yield return(ParseMethod(
                             $@"void {serviceMethodName}({targetParam})
                    {{
                        {haContextVariableName}.CallService(""{domain}"", ""{serviceName}"", {targetArg});
                    }}")
                         .ToPublic()
                         .WithSummaryComment(service.Description)
                         .AppendTrivia(targetComment));
        }
        else
        {
            // method using arguments object
            yield return(ParseMethod(
                             $@"void {serviceMethodName}({JoinList(targetParam, serviceArguments.TypeName)} data)
                    {{
                        {haContextVariableName}.CallService(""{domain}"", ""{serviceName}"", {targetArg}, data);
                    }}")
                         .ToPublic()
                         .WithSummaryComment(service.Description)
                         .AppendTrivia(targetComment));

            // method using arguments as separate parameters
            yield return(ParseMethod(
                             $@"void {serviceMethodName}({JoinList(targetParam, serviceArguments.GetParametersList())})
                    {{
                        {haContextVariableName}.CallService(""{domain}"", ""{serviceName}"", {targetArg}, {serviceArguments.GetNewServiceArgumentsTypeExpression()});
                    }}")
                         .ToPublic()
                         .WithSummaryComment(service.Description)
                         .AppendTrivia(targetComment)
                         .WithParameterComments(serviceArguments));
        }
    }
コード例 #2
0
    private static IEnumerable <TypeDeclarationSyntax> GenerateServiceArgsRecord(string domain, HassService service)
    {
        var serviceArguments = ServiceArguments.Create(domain, service);

        if (serviceArguments is null)
        {
            yield break;
        }

        var autoProperties = serviceArguments.Arguments
                             .Select(argument => Property($"{argument.TypeName!}?", argument.PropertyName !).ToPublic()
                                     .WithJsonPropertyName(argument.HaName !).WithSummaryComment(argument.Comment))
                             .ToArray();

        yield return(Record(serviceArguments.TypeName, autoProperties).ToPublic());
    }
コード例 #3
0
    private static IEnumerable <MemberDeclarationSyntax> GenerateExtensionMethod(string domain, HassService service)
    {
        var serviceName              = service.Service !;
        var serviceArguments         = ServiceArguments.Create(domain, service);
        var entityTypeName           = GetDomainEntityTypeName(service.Target?.Entity?.Domain !);
        var enumerableTargetTypeName = $"IEnumerable<{entityTypeName}>";

        if (serviceArguments is null)
        {
            yield return(ExtensionMethodWithoutArguments(service, serviceName, entityTypeName));

            yield return(ExtensionMethodWithoutArguments(service, serviceName, enumerableTargetTypeName));
        }
        else
        {
            yield return(ExtensionMethodWithClassArgument(service, serviceName, entityTypeName, serviceArguments));

            yield return(ExtensionMethodWithClassArgument(service, serviceName, enumerableTargetTypeName, serviceArguments));

            yield return(ExtensionMethodWithSeparateArguments(service, serviceName, entityTypeName, serviceArguments));

            yield return(ExtensionMethodWithSeparateArguments(service, serviceName, enumerableTargetTypeName, serviceArguments));
        }
    }