@@ -669,7 +669,7 @@ private CodeGenOutput GenerateFastifyPluginOutput(ServiceInfo service)
669
669
670
670
if ( response . BodyField is not null )
671
671
{
672
- code . WriteLine ( $ "{ GetJsonSchemaType ( response . BodyField . ServiceField . TypeName ) } ,") ;
672
+ code . WriteLine ( $ "{ GetJsonSchemaType ( service . GetFieldType ( response . BodyField . ServiceField ) ) } ,") ;
673
673
}
674
674
else if ( response . NormalFields ? . Count > 0 )
675
675
{
@@ -679,7 +679,7 @@ private CodeGenOutput GenerateFastifyPluginOutput(ServiceInfo service)
679
679
using ( code . Block ( "properties: {" , "}," ) )
680
680
{
681
681
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 ) ) } ,") ;
683
683
}
684
684
}
685
685
}
@@ -820,32 +820,27 @@ private CodeGenOutput GenerateFastifyPluginOutput(ServiceInfo service)
820
820
821
821
return new CodeGenOutput ( file ) ;
822
822
823
- string GetJsonSchemaType ( string typeName )
823
+ string GetJsonSchemaType ( ServiceTypeInfo ? serviceType )
824
824
{
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
+ } ;
849
844
}
850
845
851
846
void WriteJsonSchemaDtos ( CodeWriter code , ServiceInfo service )
@@ -875,7 +870,7 @@ void WriteJsonSchemaDtos(CodeWriter code, ServiceInfo service)
875
870
using ( code . Block ( "properties: {" , "}" ) )
876
871
{
877
872
foreach ( var field in dto . Fields )
878
- code . WriteLine ( $ "{ field . Name } : { GetJsonSchemaType ( field . TypeName ) } ,") ;
873
+ code . WriteLine ( $ "{ field . Name } : { GetJsonSchemaType ( service . GetFieldType ( field ) ) } ,") ;
879
874
}
880
875
}
881
876
}
0 commit comments