22
33import lombok .RequiredArgsConstructor ;
44import online .sharedtype .SharedType ;
5+ import online .sharedtype .processor .context .Context ;
56import online .sharedtype .processor .domain .component .ComponentInfo ;
67import online .sharedtype .processor .domain .component .EnumValueInfo ;
78import online .sharedtype .processor .domain .def .EnumDef ;
1415import online .sharedtype .processor .writer .render .Template ;
1516
1617import online .sharedtype .processor .support .annotation .Nullable ;
18+
1719import java .util .ArrayList ;
1820import java .util .List ;
1921import java .util .Objects ;
2022import java .util .Set ;
2123
2224@ RequiredArgsConstructor
2325final class RustEnumConverter extends AbstractEnumConverter {
26+ private final Context ctx ;
2427 private final TypeExpressionConverter typeExpressionConverter ;
2528 private final RustMacroTraitsGenerator rustMacroTraitsGenerator ;
2629
@@ -29,13 +32,15 @@ public Tuple<Template, AbstractTypeExpr> convert(TypeDef typeDef) {
2932 EnumDef enumDef = (EnumDef ) typeDef ;
3033
3134 String valueType = getValueTypeExpr (enumDef );
35+ boolean hasValue = valueType != null ;
3236 // value can be literal or enum
3337 EnumExpr value = new EnumExpr (
3438 enumDef .simpleName (),
3539 extractEnumValues (enumDef .components ()),
3640 rustMacroTraitsGenerator .generate (enumDef ),
37- valueType != null ,
38- valueType
41+ hasValue ,
42+ valueType ,
43+ hasValue && ctx .getProps ().getRust ().hasEnumValueTypeAlias () ? String .format ("%sValue" , enumDef .simpleName ()) : null
3944 );
4045 return Tuple .of (Template .TEMPLATE_RUST_ENUM , value );
4146 }
@@ -76,7 +81,10 @@ static final class EnumExpr extends AbstractTypeExpr {
7681 final List <EnumerationExpr > enumerations ;
7782 final Set <String > macroTraits ;
7883 final boolean hasValue ;
84+ @ Nullable
7985 final String valueType ;
86+ @ Nullable
87+ final String valueTypeAlias ;
8088
8189 String macroTraitsExpr () {
8290 return ConversionUtils .buildRustMacroTraitsExpr (macroTraits );
0 commit comments