@@ -567,44 +567,56 @@ private String toOptionalValue(String value) {
567567 return "(Just " + value + ")" ;
568568 }
569569
570+ private Optional <String > paramToStringMapper (final String paramName , final CodegenProperty property ) {
571+ if (property .isEnum ) {
572+ return Optional .of (toVarName (paramName ) + "ToString" );
573+ } else if (property .isString || property .isBinary || property .isByteArray ) {
574+ return Optional .empty ();
575+ } else if (property .isBoolean ) {
576+ return Optional .of ("(\\ val -> if val then \" true\" else \" false\" )" );
577+ } else if (property .isDateTime ) {
578+ return Optional .of ("DateTime.toString" );
579+ } else if (property .isDate ) {
580+ return Optional .of ("DateOnly.toString" );
581+ } else if (property .isUuid ) {
582+ return Optional .of ("Uuid.toString" );
583+ } else if (ElmVersion .ELM_018 .equals (elmVersion )) {
584+ return Optional .of ("toString" );
585+ } else if (property .isInteger || property .isLong ) {
586+ return Optional .of ("String.fromInt" );
587+ } else if (property .isFloat || property .isDouble ) {
588+ return Optional .of ("String.fromFloat" );
589+ }
590+ throw new RuntimeException ("Parameter '" + paramName + "' cannot be converted to a string. Please report the issue." );
591+ }
592+
593+ private CodegenProperty paramToProperty (final CodegenParameter parameter ) {
594+ final CodegenProperty property = new CodegenProperty ();
595+ property .isEnum = parameter .isEnum ;
596+ property .isString = parameter .isString ;
597+ property .isBinary = parameter .isBinary ;
598+ property .isByteArray = parameter .isByteArray ;
599+ property .isBoolean = parameter .isBoolean ;
600+ property .isDateTime = parameter .isDateTime ;
601+ property .isDate = parameter .isDate ;
602+ property .isUuid = parameter .isUuid ;
603+ property .isInteger = parameter .isInteger ;
604+ property .isLong = parameter .isLong ;
605+ property .isFloat = parameter .isFloat ;
606+ property .isDouble = parameter .isDouble ;
607+ return property ;
608+ }
609+
570610 private String paramToString (final String prefix , final CodegenParameter param , final boolean useMaybe , final String maybeMapResult ) {
571611 final String paramName = (ElmVersion .ELM_018 .equals (elmVersion ) ? "" : prefix + "." ) + param .paramName ;
572612 if (!useMaybe ) {
573613 param .required = true ;
574614 }
575615
576- String mapFn = null ;
577- if (param .isString || param .isBinary || param .isByteArray ) {
578- mapFn = "" ;
579- } else if (param .isBoolean ) {
580- mapFn = "(\\ val -> if val then \" true\" else \" false\" )" ;
581- } else if (param .isDateTime ) {
582- mapFn = "DateTime.toString" ;
583- } else if (param .isDate ) {
584- mapFn = "DateOnly.toString" ;
585- } else if (param .isUuid ) {
586- mapFn = "Uuid.toString" ;
587- } else if (ElmVersion .ELM_018 .equals (elmVersion )) {
588- mapFn = "toString" ;
589- } else if (param .isInteger || param .isLong ) {
590- mapFn = "String.fromInt" ;
591- } else if (param .isFloat || param .isDouble ) {
592- mapFn = "String.fromFloat" ;
593- } else if (param .isListContainer ) {
594- // TODO duplicate ALL types from parameter to property...
595- if (param .items .isString || param .items .isUuid || param .items .isBinary || param .items .isByteArray ) {
596- mapFn = "String.join \" ,\" " ;
597- }
598- }
599- if (mapFn == null ) {
600- throw new RuntimeException ("Parameter '" + param .paramName + "' cannot be converted to a string. Please report the issue." );
601- }
616+ final String mapFn = param .isListContainer
617+ ? "(String.join \" ,\" " + paramToStringMapper (param .paramName , param .items ).map (mapper -> " << List.map " + mapper ).orElse ("" ) + ")"
618+ : paramToStringMapper (param .paramName , paramToProperty (param )).orElse ("" );
602619
603- if (param .isListContainer ) {
604- if (!param .required ) {
605- mapFn = "(" + mapFn + ")" ;
606- }
607- }
608620 String mapResult = "" ;
609621 if (maybeMapResult != null ) {
610622 if ("" .equals (mapFn )) {
0 commit comments