1616import online .sharedtype .processor .writer .converter .type .TypeExpressionConverter ;
1717import online .sharedtype .processor .writer .render .Template ;
1818
19- import online .sharedtype .processor .support .annotation .Nullable ;
2019import java .util .List ;
2120import java .util .stream .Collectors ;
2221
2322@ RequiredArgsConstructor
24- final class ConstantConverter implements TemplateDataConverter {
23+ final class RustConstantConverter extends AbstractConstantConverter {
2524 private final Context ctx ;
2625 private final TypeExpressionConverter typeExpressionConverter ;
27- private final SharedType .TargetType targetType ;
28-
29- @ Override
30- public boolean shouldAccept (TypeDef typeDef ) {
31- return typeDef instanceof ConstantNamespaceDef ;
32- }
3326
3427 @ Override
3528 public Tuple <Template , AbstractTypeExpr > convert (TypeDef typeDef ) {
29+ Config config = ctx .getTypeStore ().getConfig (typeDef );
30+
3631 ConstantNamespaceDef constantNamespaceDef = (ConstantNamespaceDef ) typeDef ;
37- ConstantNamespaceExpr value = new ConstantNamespaceExpr (
32+ ConstantNamespaceExpr < ConstantExpr > value = new ConstantNamespaceExpr <> (
3833 constantNamespaceDef .simpleName (),
39- constantNamespaceDef .components ().stream ().map (field -> toConstantExpr (field , typeDef )).collect (Collectors .toList ())
34+ constantNamespaceDef .components ().stream ().map (field -> toConstantExpr (field , typeDef , config . getRustConstKeyword () )).collect (Collectors .toList ())
4035 );
4136
42- Config config = ctx .getTypeStore ().getConfig (typeDef );
43- return Tuple .of (Template .forConstant (targetType , config .isConstantNamespaced ()), value );
37+ return Tuple .of (Template .forConstant (SharedType .TargetType .RUST , config .isConstantNamespaced ()), value );
4438 }
4539
46- private ConstantExpr toConstantExpr (ConstantField constantField , TypeDef contextTypeDef ) {
40+ private ConstantExpr toConstantExpr (ConstantField constantField , TypeDef contextTypeDef , String keyword ) {
4741 return new ConstantExpr (
4842 constantField ,
43+ keyword ,
4944 toConstantTypeExpr (constantField , contextTypeDef ),
5045 toConstantValue (constantField )
5146 );
5247 }
5348
5449 private String toConstantTypeExpr (ConstantField constantField , TypeDef contextTypeDef ) {
55- if (targetType == SharedType . TargetType . RUST && constantField .value () instanceof EnumConstantValue ) {
50+ if (constantField .value () instanceof EnumConstantValue ) {
5651 EnumConstantValue enumConstantValue = (EnumConstantValue ) constantField .value ();
5752 ConcreteTypeInfo enumTypeInfo = enumConstantValue .getEnumType ();
5853 EnumDef enumTypeDef = (EnumDef ) enumTypeInfo .typeDef ();
@@ -65,28 +60,22 @@ private String toConstantTypeExpr(ConstantField constantField, TypeDef contextTy
6560 }
6661
6762 private String toConstantValue (ConstantField constantField ) {
68- if (targetType == SharedType .TargetType .RUST ) {
69- ConcreteTypeInfo type = constantField .value ().getValueType ();
70- ValueHolder value = constantField .value ();
71- if (value instanceof EnumConstantValue && value .getValueType ().getKind () == ConcreteTypeInfo .Kind .ENUM ) {
72- EnumConstantValue enumConstantValue = (EnumConstantValue ) value ;
73- return String .format ("%s::%s" ,type .simpleName (), enumConstantValue .getEnumConstantName ());
74- }
63+ ConcreteTypeInfo type = constantField .value ().getValueType ();
64+ ValueHolder value = constantField .value ();
65+ if (value instanceof EnumConstantValue && value .getValueType ().getKind () == ConcreteTypeInfo .Kind .ENUM ) {
66+ EnumConstantValue enumConstantValue = (EnumConstantValue ) value ;
67+ return String .format ("%s::%s" ,type .simpleName (), enumConstantValue .getEnumConstantName ());
7568 }
7669 return constantField .value ().literalValue ();
7770 }
7871
79- @ RequiredArgsConstructor
80- static final class ConstantNamespaceExpr extends AbstractTypeExpr {
81- final String name ;
82- final List <ConstantExpr > constants ;
83- }
84-
85- final class ConstantExpr extends AbstractFieldExpr {
72+ static final class ConstantExpr extends AbstractFieldExpr {
73+ final String keyword ;
8674 final String type ;
8775 final String value ;
88- ConstantExpr (ComponentInfo componentInfo , String type , String value ) {
89- super (componentInfo , targetType );
76+ ConstantExpr (ComponentInfo componentInfo , String keyword , String type , String value ) {
77+ super (componentInfo , SharedType .TargetType .RUST );
78+ this .keyword = keyword ;
9079 this .type = type ;
9180 this .value = value ;
9281 }
0 commit comments