Skip to content

Commit 83563c4

Browse files
committed
fix(Sdk): Removed the DataModelDefinition
fix(Sdk): Updated both InputDataModelDefinition and OutputDataModelDefinition to reflect serverlessworkflow/specification#892 fix(Sdk): Added the ExportDataModelDefinition, and updated TaskDefinition accordingly, to reflect serverlessworkflow/specification#892 Signed-off-by: Charles d'Avernas <charles.davernas@neuroglia.io>
1 parent 5000ea3 commit 83563c4

File tree

8 files changed

+54
-86
lines changed

8 files changed

+54
-86
lines changed

src/ServerlessWorkflow.Sdk.IO/Extensions/IServiceCollectionExtensions.cs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,9 @@ public static IServiceCollection AddServerlessWorkflowIO(this IServiceCollection
3939
options.Deserializer.WithNodeDeserializer(
4040
inner => new TaskDefinitionYamlDeserializer(inner),
4141
syntax => syntax.InsteadOf<JsonSchemaDeserializer>());
42-
options.Serializer.WithTypeConverter(new MapEntryYamlConverter(() => options.Serializer.Build()));
42+
var mapEntryConverter = new MapEntryYamlConverter(() => options.Serializer.Build(), () => options.Deserializer.Build());
43+
options.Deserializer.WithTypeConverter(mapEntryConverter);
44+
options.Serializer.WithTypeConverter(mapEntryConverter);
4345
});
4446
services.AddSingleton<IWorkflowDefinitionReader, WorkflowDefinitionReader>();
4547
services.AddSingleton<IWorkflowDefinitionReader, WorkflowDefinitionReader>();

src/ServerlessWorkflow.Sdk/Models/DataModelDefinition.cs renamed to src/ServerlessWorkflow.Sdk/Models/ContextDataModelDefinition.cs

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -14,22 +14,22 @@
1414
namespace ServerlessWorkflow.Sdk.Models;
1515

1616
/// <summary>
17-
/// Represents the definition of a data model
17+
/// Represents the definition of a data context
1818
/// </summary>
1919
[DataContract]
20-
public abstract record DataModelDefinition
20+
public record ContextDataModelDefinition
2121
{
2222

2323
/// <summary>
24-
/// Gets/sets the schema, if any, that defines and describes the defined data model
24+
/// Gets/sets the schema, if any, that defines and describes the context data
2525
/// </summary>
2626
[DataMember(Name = "schema", Order = 1), JsonPropertyName("schema"), JsonPropertyOrder(1), YamlMember(Alias = "schema", Order = 1)]
2727
public virtual SchemaDefinition? Schema { get; set; }
2828

2929
/// <summary>
30-
/// Gets/sets a runtime expression, if any, used to build the defined model using both input and scope data
30+
/// Gets/sets a runtime expression, if any, used to export specific data to the context data
3131
/// </summary>
32-
[DataMember(Name = "from", Order = 2), JsonPropertyName("from"), JsonPropertyOrder(2), JsonInclude, YamlMember(Alias = "from", Order = 2)]
33-
public virtual object? From { get; set; }
32+
[DataMember(Name = "as", Order = 3), JsonPropertyName("as"), JsonPropertyOrder(3), YamlMember(Alias = "as", Order = 3)]
33+
public virtual object? As { get; set; }
3434

35-
}
35+
}

src/ServerlessWorkflow.Sdk/Models/InputDataModelDefinition.cs

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,13 +14,22 @@
1414
namespace ServerlessWorkflow.Sdk.Models;
1515

1616
/// <summary>
17-
/// Represents the definition of an output data model
17+
/// Represents the definition of an input data model
1818
/// </summary>
1919
[DataContract]
2020
public record InputDataModelDefinition
21-
: DataModelDefinition
2221
{
2322

23+
/// <summary>
24+
/// Gets/sets the schema, if any, that defines and describes the input data of a workflow or task
25+
/// </summary>
26+
[DataMember(Name = "schema", Order = 1), JsonPropertyName("schema"), JsonPropertyOrder(1), YamlMember(Alias = "schema", Order = 1)]
27+
public virtual SchemaDefinition? Schema { get; set; }
2428

29+
/// <summary>
30+
/// Gets/sets a runtime expression, if any, used to build the workflow or task input data based on both input and scope data
31+
/// </summary>
32+
[DataMember(Name = "from", Order = 2), JsonPropertyName("from"), JsonPropertyOrder(2), JsonInclude, YamlMember(Alias = "from", Order = 2)]
33+
public virtual object? From { get; set; }
2534

2635
}

src/ServerlessWorkflow.Sdk/Models/OutputDataModelDefinition.cs

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,13 +18,18 @@ namespace ServerlessWorkflow.Sdk.Models;
1818
/// </summary>
1919
[DataContract]
2020
public record OutputDataModelDefinition
21-
: DataModelDefinition
2221
{
2322

23+
/// <summary>
24+
/// Gets/sets the schema, if any, that defines and describes the output data of a workflow or task
25+
/// </summary>
26+
[DataMember(Name = "schema", Order = 1), JsonPropertyName("schema"), JsonPropertyOrder(1), YamlMember(Alias = "schema", Order = 1)]
27+
public virtual SchemaDefinition? Schema { get; set; }
28+
2429
/// <summary>
2530
/// Gets/sets a runtime expression, if any, used to output specific data to the scope data
2631
/// </summary>
27-
[DataMember(Name = "to", Order = 3), JsonPropertyName("to"), JsonPropertyOrder(3), YamlMember(Alias = "to", Order = 3)]
28-
public virtual object? To { get; set; }
32+
[DataMember(Name = "as", Order = 3), JsonPropertyName("as"), JsonPropertyOrder(3), YamlMember(Alias = "as", Order = 3)]
33+
public virtual object? As { get; set; }
2934

30-
}
35+
}

src/ServerlessWorkflow.Sdk/Models/TaskDefinition.cs

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@
1212
// limitations under the License.
1313

1414
using ServerlessWorkflow.Sdk.Serialization.Json;
15-
using System.ComponentModel;
1615

1716
namespace ServerlessWorkflow.Sdk.Models;
1817

@@ -42,16 +41,22 @@ public abstract record TaskDefinition
4241
[DataMember(Name = "output", Order = 11), JsonPropertyName("output"), JsonPropertyOrder(11), YamlMember(Alias = "output", Order = 11)]
4342
public virtual OutputDataModelDefinition? Output { get; set; }
4443

44+
/// <summary>
45+
/// Gets/sets the optional configuration for exporting data within the task's context
46+
/// </summary>
47+
[DataMember(Name = "export", Order = 12), JsonPropertyName("export"), JsonPropertyOrder(12), YamlMember(Alias = "export", Order = 12)]
48+
public virtual OutputDataModelDefinition? Export { get; set; }
49+
4550
/// <summary>
4651
/// Gets/sets a boolean indicating whether or not to return the result, if any, of the defined task
4752
/// </summary>
48-
[DataMember(Name = "timeout", Order = 12), JsonPropertyName("timeout"), JsonPropertyOrder(12), YamlMember(Alias = "timeout", Order = 12)]
53+
[DataMember(Name = "timeout", Order = 13), JsonPropertyName("timeout"), JsonPropertyOrder(13), YamlMember(Alias = "timeout", Order = 13)]
4954
public virtual TimeoutDefinition? Timeout { get; set; }
5055

5156
/// <summary>
5257
/// Gets/sets the flow directive to be performed upon completion of the task
5358
/// </summary>
54-
[DataMember(Name = "then", Order = 13), JsonPropertyName("then"), JsonPropertyOrder(13), YamlMember(Alias = "then", Order = 13)]
59+
[DataMember(Name = "then", Order = 14), JsonPropertyName("then"), JsonPropertyOrder(14), YamlMember(Alias = "then", Order = 14)]
5560
public virtual string? Then { get; set; }
5661

5762
}

src/ServerlessWorkflow.Sdk/Serialization/Yaml/MapEntryYamlConverter.cs

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,8 @@ namespace ServerlessWorkflow.Sdk.Serialization.Yaml;
2121
/// Represents the service used to serialize/deserialize <see cref="MapEntry{TKey, TValue}"/> values to/from YAML
2222
/// </summary>
2323
/// <param name="serializerFactory">A function used to create a new <see cref="ISerializer"/></param>
24-
public class MapEntryYamlConverter(Func<ISerializer> serializerFactory)
24+
/// <param name="deserializerFactory">A function used to create a new <see cref="IDeserializer"/></param>
25+
public class MapEntryYamlConverter(Func<ISerializer> serializerFactory, Func<IDeserializer> deserializerFactory)
2526
: IYamlTypeConverter
2627
{
2728

@@ -43,10 +44,10 @@ protected virtual IYamlTypeConverter CreateGenericConverter(Type type)
4344
{
4445
var typeArguments = type.GetGenericArguments();
4546
var converterType = typeof(MapEntryConverter<,>).MakeGenericType(typeArguments);
46-
return (IYamlTypeConverter)Activator.CreateInstance(converterType, serializerFactory())!;
47+
return (IYamlTypeConverter)Activator.CreateInstance(converterType, serializerFactory(), deserializerFactory())!;
4748
}
4849

49-
class MapEntryConverter<TKey, TValue> (ISerializer serializer)
50+
class MapEntryConverter<TKey, TValue> (ISerializer serializer, IDeserializer deserializer)
5051
: IYamlTypeConverter
5152
where TKey : notnull
5253
{
@@ -55,7 +56,14 @@ class MapEntryConverter<TKey, TValue> (ISerializer serializer)
5556
public bool Accepts(Type type) => type == typeof(MapEntry<TKey, TValue>);
5657

5758
/// <inheritdoc/>
58-
public virtual object ReadYaml(IParser parser, Type type) => throw new NotImplementedException();
59+
public virtual object ReadYaml(IParser parser, Type type)
60+
{
61+
parser.Consume<MappingStart>();
62+
var key = deserializer.Deserialize<TKey>(parser);
63+
var value = deserializer.Deserialize<TValue>(parser);
64+
parser.Consume<MappingEnd>();
65+
return new MapEntry<TKey, TValue>(key, value);
66+
}
5967

6068
/// <inheritdoc/>
6169
public virtual void WriteYaml(IEmitter emitter, object? value, Type type)

tests/ServerlessWorkflow.Sdk.UnitTests/Cases/IO/WorkflowDefinitionWriterTests.cs renamed to tests/ServerlessWorkflow.Sdk.UnitTests/Cases/IO/WorkflowDefinitionIOTests.cs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,11 +15,11 @@
1515

1616
namespace ServerlessWorkflow.Sdk.UnitTests.Cases.IO;
1717

18-
public class WorkflowDefinitionWriterTests
18+
public class WorkflowDefinitionIOTests
1919
{
2020

2121
[Fact]
22-
public async Task Write_Workflow_Definition_To_Yaml_Should_Work()
22+
public async Task WriteThenRead_Workflow_Definition_ToFrom_Yaml_Should_Work()
2323
{
2424
//arrange
2525
var toSerialize = WorkflowDefinitionFactory.Create();
@@ -32,6 +32,7 @@ public async Task Write_Workflow_Definition_To_Yaml_Should_Work()
3232
await stream.FlushAsync();
3333
stream.Position = 0;
3434
var yaml = new StreamReader(stream).ReadToEnd();
35+
stream.Position = 0;
3536
var deserialized = await reader.ReadAsync(stream);
3637

3738
//assert
@@ -40,7 +41,7 @@ public async Task Write_Workflow_Definition_To_Yaml_Should_Work()
4041
}
4142

4243
[Fact]
43-
public async Task Write_Workflow_Definition_To_Json_Should_Work()
44+
public async Task WriteThenRead_Workflow_Definition_ToFrom_Json_Should_Work()
4445
{
4546
//arrange
4647
var toSerialize = WorkflowDefinitionFactory.Create();

tests/ServerlessWorkflow.Sdk.UnitTests/Cases/IO/WorkflowDefinitionReaderTests.cs

Lines changed: 0 additions & 62 deletions
This file was deleted.

0 commit comments

Comments
 (0)