dotnet-cqrs/Svrnty.CQRS.Grpc.Generators/Models/CommandInfo.cs
Jean-Philippe Brule 179b06374d fix: improve gRPC source generator type mapping and property naming
- Add ProtoPropertyName to PropertyInfo for correct proto property naming
- Fix ToPascalCaseHelper to match Grpc.Tools naming (e.g., value_per100g → ValuePer100G)
- Add IsResultNullable and ResultTypeWithoutNullable to QueryInfo
- Fix IsPrimitiveType to correctly handle nullable complex types
- Add GetCollectionElementType helper (excludes strings from collection detection)
- Use AddRange pattern for repeated/collection fields in proto messages
- Add explicit Analyzer reference in props for reliable source generator loading
- Handle null cases in single complex type response mapping
- Fix collection properties in complex results with proper nested type mapping

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-25 10:47:05 -05:00

74 lines
2.6 KiB
C#

using System.Collections.Generic;
using Microsoft.CodeAnalysis;
namespace Svrnty.CQRS.Grpc.Generators.Models
{
public class CommandInfo
{
public string Name { get; set; }
public string FullyQualifiedName { get; set; }
public string Namespace { get; set; }
public List<PropertyInfo> Properties { get; set; }
public string? ResultType { get; set; }
public string? ResultFullyQualifiedName { get; set; }
public bool HasResult => ResultType != null;
public string HandlerInterfaceName { get; set; }
public List<PropertyInfo> ResultProperties { get; set; }
public bool IsResultPrimitiveType { get; set; }
public CommandInfo()
{
Name = string.Empty;
FullyQualifiedName = string.Empty;
Namespace = string.Empty;
Properties = new List<PropertyInfo>();
HandlerInterfaceName = string.Empty;
ResultProperties = new List<PropertyInfo>();
IsResultPrimitiveType = false;
}
}
public class PropertyInfo
{
public string Name { get; set; }
/// <summary>
/// The property name as generated by Grpc.Tools from the proto field name.
/// This may differ from the C# property name due to casing differences.
/// </summary>
public string ProtoPropertyName { get; set; }
public string Type { get; set; }
public string FullyQualifiedType { get; set; }
public string ProtoType { get; set; }
public int FieldNumber { get; set; }
public bool IsComplexType { get; set; }
public List<PropertyInfo> NestedProperties { get; set; }
// Type conversion metadata
public bool IsEnum { get; set; }
public bool IsList { get; set; }
public bool IsNullable { get; set; }
public bool IsDecimal { get; set; }
public bool IsDateTime { get; set; }
public string? ElementType { get; set; }
public bool IsElementComplexType { get; set; }
public List<PropertyInfo>? ElementNestedProperties { get; set; }
public PropertyInfo()
{
Name = string.Empty;
ProtoPropertyName = string.Empty;
Type = string.Empty;
FullyQualifiedType = string.Empty;
ProtoType = string.Empty;
IsComplexType = false;
NestedProperties = new List<PropertyInfo>();
IsEnum = false;
IsList = false;
IsNullable = false;
IsDecimal = false;
IsDateTime = false;
IsElementComplexType = false;
}
}
}