Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit a00bbc0

Browse files
committed
Switch on ServiceTypeKind
instead of digging into the type name directly.
1 parent 35be5b5 commit a00bbc0

File tree

1 file changed

+23
-28
lines changed

1 file changed

+23
-28
lines changed

src/Facility.CodeGen.JavaScript/JavaScriptGenerator.cs

Lines changed: 23 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -669,7 +669,7 @@ private CodeGenOutput GenerateFastifyPluginOutput(ServiceInfo service)
669669

670670
if (response.BodyField is not null)
671671
{
672-
code.WriteLine($"{GetJsonSchemaType(response.BodyField.ServiceField.TypeName)},");
672+
code.WriteLine($"{GetJsonSchemaType(service.GetFieldType(response.BodyField.ServiceField))},");
673673
}
674674
else if (response.NormalFields?.Count > 0)
675675
{
@@ -679,7 +679,7 @@ private CodeGenOutput GenerateFastifyPluginOutput(ServiceInfo service)
679679
using (code.Block("properties: {", "},"))
680680
{
681681
foreach (var normalField in response.NormalFields)
682-
code.WriteLine($"{normalField.ServiceField.Name}: {GetJsonSchemaType(normalField.ServiceField.TypeName)},");
682+
code.WriteLine($"{normalField.ServiceField.Name}: {GetJsonSchemaType(service.GetFieldType(normalField.ServiceField))},");
683683
}
684684
}
685685
}
@@ -820,32 +820,27 @@ private CodeGenOutput GenerateFastifyPluginOutput(ServiceInfo service)
820820

821821
return new CodeGenOutput(file);
822822

823-
string GetJsonSchemaType(string typeName)
823+
string GetJsonSchemaType(ServiceTypeInfo? serviceType)
824824
{
825-
if (typeName.EndsWith("[]", StringComparison.Ordinal))
826-
return $"{{ type: 'array', items: {GetJsonSchemaType(typeName.Substring(0, typeName.Length - 2))} }}";
827-
if (typeName.StartsWith("nullable<", StringComparison.Ordinal))
828-
return $"{{ oneOf: [ {GetJsonSchemaType(typeName.Substring(9, typeName.Length - 10))}, {{ type: 'null' }} ] }}";
829-
if (typeName.StartsWith("result<", StringComparison.Ordinal))
830-
return $"{{ type: 'object', properties: {{ value: {GetJsonSchemaType(typeName.Substring(7, typeName.Length - 8))}, error: {{ $ref: '_error' }} }} }}";
831-
if (typeName.StartsWith("map<", StringComparison.Ordinal))
832-
return $"{{ type: 'object', additionalProperties: {GetJsonSchemaType(typeName.Substring(4, typeName.Length - 5))} }}";
833-
if (typeName is "error")
834-
return $"{{ $ref: '{"_error"}' }}";
835-
if (customTypes.Contains(typeName))
836-
return $"{{ $ref: '{typeName}' }}";
837-
if (typeName is "string" or "bytes" or "datetime")
838-
return $"{{ type: '{"string"}' }}";
839-
if (typeName is "boolean")
840-
return $"{{ type: '{"boolean"}' }}";
841-
if (typeName is "int32" or "int64")
842-
return $"{{ type: '{"integer"}' }}";
843-
if (typeName is "decimal" or "double")
844-
return $"{{ type: '{"number"}' }}";
845-
if (typeName is "object")
846-
return $"{{ type: '{"object"}', additionalProperties: true }}";
847-
848-
throw new NotSupportedException("Unknown type " + typeName);
825+
if (serviceType is null)
826+
throw new ArgumentNullException(nameof(serviceType));
827+
828+
return serviceType.Kind switch
829+
{
830+
ServiceTypeKind.String or ServiceTypeKind.Bytes or ServiceTypeKind.DateTime or ServiceTypeKind.ExternalEnum => $"{{ type: '{"string"}' }}",
831+
ServiceTypeKind.Boolean => $"{{ type: '{"boolean"}' }}",
832+
ServiceTypeKind.Double or ServiceTypeKind.Decimal => $"{{ type: '{"number"}' }}",
833+
ServiceTypeKind.Int32 or ServiceTypeKind.Int64 => $"{{ type: '{"integer"}' }}",
834+
ServiceTypeKind.Object or ServiceTypeKind.ExternalDto => $"{{ type: '{"object"}', additionalProperties: true }}",
835+
ServiceTypeKind.Error => $"{{ $ref: '{"_error"}' }}",
836+
ServiceTypeKind.Dto => $"{{ $ref: '{serviceType.Dto!.Name}' }}",
837+
ServiceTypeKind.Enum => $"{{ $ref: '{serviceType.Enum!.Name}' }}",
838+
ServiceTypeKind.Result => $"{{ type: 'object', properties: {{ value: {GetJsonSchemaType(serviceType.ValueType!)}, error: {{ $ref: '_error' }} }} }}",
839+
ServiceTypeKind.Array => $"{{ type: 'array', items: {GetJsonSchemaType(serviceType.ValueType!)} }}",
840+
ServiceTypeKind.Map => $"{{ type: 'object', additionalProperties: {GetJsonSchemaType(serviceType.ValueType!)} }}",
841+
ServiceTypeKind.Nullable => $"{{ oneOf: [ {GetJsonSchemaType(serviceType.ValueType!)}, {{ type: 'null' }} ] }}",
842+
_ => throw new NotSupportedException($"Unsupported service type '{serviceType.Kind}'"),
843+
};
849844
}
850845

851846
void WriteJsonSchemaDtos(CodeWriter code, ServiceInfo service)
@@ -875,7 +870,7 @@ void WriteJsonSchemaDtos(CodeWriter code, ServiceInfo service)
875870
using (code.Block("properties: {", "}"))
876871
{
877872
foreach (var field in dto.Fields)
878-
code.WriteLine($"{field.Name}: {GetJsonSchemaType(field.TypeName)},");
873+
code.WriteLine($"{field.Name}: {GetJsonSchemaType(service.GetFieldType(field))},");
879874
}
880875
}
881876
}

0 commit comments

Comments
 (0)