@@ -261,6 +261,7 @@ private static CodeBlock generateMissionModelInstantiation(final MissionModelRec
261261 /** Generate `GeneratedSchedulerModel` class. */
262262 public JavaFile generateSchedulerModel (final MissionModelRecord missionModel ) {
263263 final var typeName = missionModel .getSchedulerModelName ();
264+ final var durationValueMapperCodeBlock = generateDurationMapperBlock (missionModel );
264265
265266 final var typeSpec =
266267 TypeSpec
@@ -303,6 +304,32 @@ public JavaFile generateSchedulerModel(final MissionModelRecord missionModel) {
303304 .orElse (CodeBlock .builder ()).build ())
304305 .addStatement ("return result" )
305306 .build ())
307+ .addMethod (MethodSpec
308+ .methodBuilder ("serializeDuration" )
309+ .addModifiers (Modifier .PUBLIC )
310+ .addAnnotation (Override .class )
311+ .returns (SerializedValue .class )
312+ .addParameter (
313+ TypeName .get (Duration .class ),
314+ "duration" ,
315+ Modifier .FINAL )
316+ .addStatement (
317+ "return $L.serializeValue(duration)" , durationValueMapperCodeBlock .get ()
318+ )
319+ .build ())
320+ .addMethod (MethodSpec
321+ .methodBuilder ("deserializeDuration" )
322+ .addModifiers (Modifier .PUBLIC )
323+ .addAnnotation (Override .class )
324+ .addParameter (
325+ TypeName .get (SerializedValue .class ),
326+ "serializedDuration" ,
327+ Modifier .FINAL )
328+ .addStatement (
329+ "return $L.deserializeValue(serializedDuration).getSuccessOrThrow()" , durationValueMapperCodeBlock .get ()
330+ )
331+ .returns (Duration .class )
332+ .build ())
306333 .build ();
307334
308335 return JavaFile
@@ -886,7 +913,19 @@ private static MethodSpec makeSerializeReturnValueMethod(final ActivityTypeRecor
886913 "return this." + COMPUTED_ATTRIBUTES_VALUE_MAPPER_FIELD_NAME + ".serializeValue(returnValue)" )
887914 .build ();
888915 }
889-
916+ private Optional <CodeBlock > generateDurationMapperBlock (final MissionModelRecord missionModel ){
917+ final var resolver = new Resolver (this .typeUtils , this .elementUtils , missionModel .typeRules ());
918+ final var mapperBlock = resolver .instantiateNullableMapperFor (
919+ elementUtils .getTypeElement (Duration .class .getName ()).asType ());
920+ if (mapperBlock .isPresent ()) {
921+ return mapperBlock ;
922+ } else {
923+ messager .printMessage (
924+ Diagnostic .Kind .ERROR ,
925+ "Failed to generate value mapper for Duration" );
926+ return Optional .empty ();
927+ }
928+ }
890929 private Optional <Map <String , CodeBlock >> generateParameterMapperBlocks (final MissionModelRecord missionModel , final InputTypeRecord inputType )
891930 {
892931 final var resolver = new Resolver (this .typeUtils , this .elementUtils , missionModel .typeRules ());
0 commit comments