diff --git a/extensions/src/AWSSDK.Extensions.CborProtocol/Internal/EventStreams/CborEventStreamPublisher.cs b/extensions/src/AWSSDK.Extensions.CborProtocol/Internal/EventStreams/CborEventStreamPublisher.cs new file mode 100644 index 000000000000..677e72fbf271 --- /dev/null +++ b/extensions/src/AWSSDK.Extensions.CborProtocol/Internal/EventStreams/CborEventStreamPublisher.cs @@ -0,0 +1,41 @@ +/* + * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"). + * You may not use this file except in compliance with the License. + * A copy of the License is located at + * + * http://aws.amazon.com/apache2.0 + * + * or in the "license" file accompanying this file. This file is distributed + * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either + * express or implied. See the License for the specific language governing + * permissions and limitations under the License. + */ + +using System.Formats.Cbor; +using Amazon.Extensions.CborProtocol.Internal.Transform; +using Amazon.Runtime.EventStreams; +using Amazon.Runtime.Internal; + +namespace Amazon.Extensions.CborProtocol.Internal.EventStreams +{ + /// + /// Base class for cbor event stream publishers. + /// + public abstract class CborEventStreamPublisher : EventStreamPublisher + { + /// + /// Construct a CborMarshallerContext that subclasses can use to run the marshaller for the event type + /// that should be sent. + /// + /// The writer that the marshaller will use to write as it is marshalling the user's object into it's CBOR representation. + /// + protected static CborMarshallerContext CreateCborMarshallerContext(CborWriter writer) + { + // The original request and service are not needed for event serialization so placeholder values are used. + IRequest request = new DefaultRequest(new EventStreamRequest(), "eventstream"); + return new CborMarshallerContext(request, writer); + } + } +} diff --git a/extensions/src/AWSSDK.Extensions.CborProtocol/Internal/Transform/CborSimpleTypeUnmarshaller.cs b/extensions/src/AWSSDK.Extensions.CborProtocol/Internal/Transform/CborSimpleTypeUnmarshaller.cs index c9dcfb92f88f..72e9e2f80759 100644 --- a/extensions/src/AWSSDK.Extensions.CborProtocol/Internal/Transform/CborSimpleTypeUnmarshaller.cs +++ b/extensions/src/AWSSDK.Extensions.CborProtocol/Internal/Transform/CborSimpleTypeUnmarshaller.cs @@ -16,6 +16,7 @@ using System; using System.Collections.Generic; using System.Formats.Cbor; +using System.Globalization; using System.IO; using Amazon; using Amazon.Runtime; @@ -378,6 +379,33 @@ public static CborNullableDateTimeUnmarshaller Instance } } + public class CborNullableDateTimeEpochLongMillisecondsUnmarshaller + : ICborUnmarshaller + { + + private CborNullableDateTimeEpochLongMillisecondsUnmarshaller() { } + + private static CborNullableDateTimeEpochLongMillisecondsUnmarshaller _instance = + new CborNullableDateTimeEpochLongMillisecondsUnmarshaller(); + + public static CborNullableDateTimeEpochLongMillisecondsUnmarshaller Instance + { + get { return _instance; } + } + + public DateTime? Unmarshall(CborUnmarshallerContext context) + { + if (context.Reader.PeekState() == CborReaderState.Null) + { + context.Reader.ReadNull(); + return null; + } + var millseconds = CborLongUnmarshaller.Instance.Unmarshall(context); + var ret = Amazon.Util.AWSSDKUtils.EPOCH_START.AddMilliseconds(millseconds); + return ret; + } + } + public class CborMemoryStreamUnmarshaller : ICborUnmarshaller { diff --git a/generator/ServiceClientGeneratorLib/Generators/Marshallers/CborStructureUnmarshaller.cs b/generator/ServiceClientGeneratorLib/Generators/Marshallers/CborStructureUnmarshaller.cs index e7be2c0b410d..5eaa76e1636b 100644 --- a/generator/ServiceClientGeneratorLib/Generators/Marshallers/CborStructureUnmarshaller.cs +++ b/generator/ServiceClientGeneratorLib/Generators/Marshallers/CborStructureUnmarshaller.cs @@ -101,10 +101,10 @@ public override string TransformText() #line 32 "C:\repos\aws-sdk-net-v4\generator\ServiceClientGeneratorLib\Generators\Marshallers\CborStructureUnmarshaller.tt" + Member eventPayloadMember = this.Structure.GetExplicitEventPayloadMember(); //HasImplicitEventPayloadMembers means that the structure does not have a member with the EventPayload trait - if(this.Structure != null && this.Structure.IsEvent && !this.Structure.HasImplicitEventPayloadMembers()) + if(this.Structure != null && this.Structure.IsEvent && !this.Structure.HasImplicitEventPayloadMembers() && eventPayloadMember != null) { - Member eventPayloadMember = this.Structure.GetExplicitEventPayloadMember(); if(eventPayloadMember.ModelShape.IsString) { @@ -185,16 +185,6 @@ public override string TransformText() #line 71 "C:\repos\aws-sdk-net-v4\generator\ServiceClientGeneratorLib\Generators\Marshallers\CborStructureUnmarshaller.tt" - } - - - #line default - #line hidden - - #line 74 "C:\repos\aws-sdk-net-v4\generator\ServiceClientGeneratorLib\Generators\Marshallers\CborStructureUnmarshaller.tt" - - if(this.Structure != null && (!this.Structure.IsEvent || this.Structure.HasImplicitEventPayloadMembers())) - { foreach (var member in this.Structure.Members) { @@ -203,7 +193,7 @@ public override string TransformText() #line hidden this.Write(" case \""); - #line 80 "C:\repos\aws-sdk-net-v4\generator\ServiceClientGeneratorLib\Generators\Marshallers\CborStructureUnmarshaller.tt" + #line 75 "C:\repos\aws-sdk-net-v4\generator\ServiceClientGeneratorLib\Generators\Marshallers\CborStructureUnmarshaller.tt" this.Write(this.ToStringHelper.ToStringWithCulture(member.MarshallName)); #line default @@ -211,21 +201,21 @@ public override string TransformText() this.Write("\":\r\n {\r\n context.AddPathSegment" + "(\""); - #line 82 "C:\repos\aws-sdk-net-v4\generator\ServiceClientGeneratorLib\Generators\Marshallers\CborStructureUnmarshaller.tt" + #line 77 "C:\repos\aws-sdk-net-v4\generator\ServiceClientGeneratorLib\Generators\Marshallers\CborStructureUnmarshaller.tt" this.Write(this.ToStringHelper.ToStringWithCulture(member.PropertyName)); #line default #line hidden this.Write("\");\r\n var unmarshaller = "); - #line 83 "C:\repos\aws-sdk-net-v4\generator\ServiceClientGeneratorLib\Generators\Marshallers\CborStructureUnmarshaller.tt" + #line 78 "C:\repos\aws-sdk-net-v4\generator\ServiceClientGeneratorLib\Generators\Marshallers\CborStructureUnmarshaller.tt" this.Write(this.ToStringHelper.ToStringWithCulture(member.DetermineTypeUnmarshallerInstantiate())); #line default #line hidden this.Write(";\r\n unmarshalledObject."); - #line 84 "C:\repos\aws-sdk-net-v4\generator\ServiceClientGeneratorLib\Generators\Marshallers\CborStructureUnmarshaller.tt" + #line 79 "C:\repos\aws-sdk-net-v4\generator\ServiceClientGeneratorLib\Generators\Marshallers\CborStructureUnmarshaller.tt" this.Write(this.ToStringHelper.ToStringWithCulture(member.PropertyName)); #line default @@ -233,38 +223,27 @@ public override string TransformText() this.Write(" = unmarshaller.Unmarshall(context);\r\n context.PopPath" + "Segment();\r\n break;\r\n }\r\n"); - #line 88 "C:\repos\aws-sdk-net-v4\generator\ServiceClientGeneratorLib\Generators\Marshallers\CborStructureUnmarshaller.tt" + #line 83 "C:\repos\aws-sdk-net-v4\generator\ServiceClientGeneratorLib\Generators\Marshallers\CborStructureUnmarshaller.tt" } - } #line default #line hidden this.Write(" default:\r\n reader.SkipValue();\r\n " + - " break;\r\n }\r\n"); - - #line 96 "C:\repos\aws-sdk-net-v4\generator\ServiceClientGeneratorLib\Generators\Marshallers\CborStructureUnmarshaller.tt" - - if(this.Structure != null && (!this.Structure.IsEvent || this.Structure.HasImplicitEventPayloadMembers())) - { - - - #line default - #line hidden - this.Write(" }\r\n"); + " break;\r\n }\r\n }\r\n reader.R" + + "eadEndMap();\r\n"); - #line 101 "C:\repos\aws-sdk-net-v4\generator\ServiceClientGeneratorLib\Generators\Marshallers\CborStructureUnmarshaller.tt" + #line 92 "C:\repos\aws-sdk-net-v4\generator\ServiceClientGeneratorLib\Generators\Marshallers\CborStructureUnmarshaller.tt" } #line default #line hidden - this.Write(" reader.ReadEndMap();\r\n return unmarshalledObject;\r\n " + - " }\r\n\r\n\r\n"); + this.Write(" return unmarshalledObject;\r\n }\r\n\r\n\r\n"); - #line 109 "C:\repos\aws-sdk-net-v4\generator\ServiceClientGeneratorLib\Generators\Marshallers\CborStructureUnmarshaller.tt" + #line 99 "C:\repos\aws-sdk-net-v4\generator\ServiceClientGeneratorLib\Generators\Marshallers\CborStructureUnmarshaller.tt" this.AddStructureSingletonMethod(); diff --git a/generator/ServiceClientGeneratorLib/Generators/Marshallers/CborStructureUnmarshaller.tt b/generator/ServiceClientGeneratorLib/Generators/Marshallers/CborStructureUnmarshaller.tt index caa62a4ed804..fa9b2ce230b3 100644 --- a/generator/ServiceClientGeneratorLib/Generators/Marshallers/CborStructureUnmarshaller.tt +++ b/generator/ServiceClientGeneratorLib/Generators/Marshallers/CborStructureUnmarshaller.tt @@ -30,10 +30,10 @@ namespace <#=this.Config.Namespace #>.Model.Internal.MarshallTransformations return null; var reader = context.Reader; <# + Member eventPayloadMember = this.Structure.GetExplicitEventPayloadMember(); //HasImplicitEventPayloadMembers means that the structure does not have a member with the EventPayload trait - if(this.Structure != null && this.Structure.IsEvent && !this.Structure.HasImplicitEventPayloadMembers()) + if(this.Structure != null && this.Structure.IsEvent && !this.Structure.HasImplicitEventPayloadMembers() && eventPayloadMember != null) { - Member eventPayloadMember = this.Structure.GetExplicitEventPayloadMember(); if(eventPayloadMember.ModelShape.IsString) { #> @@ -69,11 +69,6 @@ namespace <#=this.Config.Namespace #>.Model.Internal.MarshallTransformations switch (propertyName) { <# - } -#> -<# - if(this.Structure != null && (!this.Structure.IsEvent || this.Structure.HasImplicitEventPayloadMembers())) - { foreach (var member in this.Structure.Members) { #> @@ -87,21 +82,16 @@ namespace <#=this.Config.Namespace #>.Model.Internal.MarshallTransformations } <# } - } #> default: reader.SkipValue(); break; } -<# - if(this.Structure != null && (!this.Structure.IsEvent || this.Structure.HasImplicitEventPayloadMembers())) - { -#> } + reader.ReadEndMap(); <# } #> - reader.ReadEndMap(); return unmarshalledObject; } diff --git a/generator/ServiceClientGeneratorLib/Generators/Marshallers/EventStreamPublisherMarshaller.cs b/generator/ServiceClientGeneratorLib/Generators/Marshallers/EventStreamPublisherMarshaller.cs index 5d2f03d8f4e3..bdd53827239c 100644 --- a/generator/ServiceClientGeneratorLib/Generators/Marshallers/EventStreamPublisherMarshaller.cs +++ b/generator/ServiceClientGeneratorLib/Generators/Marshallers/EventStreamPublisherMarshaller.cs @@ -18,7 +18,7 @@ namespace ServiceClientGenerator.Generators.Marshallers /// Class to produce the template output /// - #line 1 "C:\codebase\v4\aws-sdk-net-v4\generator\ServiceClientGeneratorLib\Generators\Marshallers\EventStreamPublisherMarshaller.tt" + #line 1 "C:\repos\aws-sdk-net-v4\generator\ServiceClientGeneratorLib\Generators\Marshallers\EventStreamPublisherMarshaller.tt" [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.TextTemplating", "17.0.0.0")] public partial class EventStreamPublisherMarshaller : BaseMarshaller { @@ -29,7 +29,7 @@ public partial class EventStreamPublisherMarshaller : BaseMarshaller public override string TransformText() { - #line 6 "C:\codebase\v4\aws-sdk-net-v4\generator\ServiceClientGeneratorLib\Generators\Marshallers\EventStreamPublisherMarshaller.tt" + #line 6 "C:\repos\aws-sdk-net-v4\generator\ServiceClientGeneratorLib\Generators\Marshallers\EventStreamPublisherMarshaller.tt" AddLicenseHeader(); @@ -37,9 +37,29 @@ public override string TransformText() #line default #line hidden this.Write("using System;\r\nusing System.IO;\r\nusing System.Threading.Tasks;\r\nusing Amazon.Runt" + - "ime.EventStreams;\r\n#pragma warning disable CS0612,CS0618\r\nnamespace "); + "ime.EventStreams;\r\n"); - #line 14 "C:\codebase\v4\aws-sdk-net-v4\generator\ServiceClientGeneratorLib\Generators\Marshallers\EventStreamPublisherMarshaller.tt" + #line 13 "C:\repos\aws-sdk-net-v4\generator\ServiceClientGeneratorLib\Generators\Marshallers\EventStreamPublisherMarshaller.tt" + + if (this.Config.ServiceModel.Type == ServiceType.Cbor) + { + + + #line default + #line hidden + this.Write("using Amazon.Extensions.CborProtocol.Internal;\r\nusing Amazon.Extensions.CborProto" + + "col.Internal.EventStreams;\r\n"); + + #line 19 "C:\repos\aws-sdk-net-v4\generator\ServiceClientGeneratorLib\Generators\Marshallers\EventStreamPublisherMarshaller.tt" + + } + + + #line default + #line hidden + this.Write("#pragma warning disable CS0612,CS0618\r\nnamespace "); + + #line 23 "C:\repos\aws-sdk-net-v4\generator\ServiceClientGeneratorLib\Generators\Marshallers\EventStreamPublisherMarshaller.tt" this.Write(this.ToStringHelper.ToStringWithCulture(this.Config.Namespace)); #line default @@ -48,21 +68,28 @@ public override string TransformText() " the service events for the event stream to the low level IEventStreamMessage.\r\n" + " /// \r\n public partial class "); - #line 19 "C:\codebase\v4\aws-sdk-net-v4\generator\ServiceClientGeneratorLib\Generators\Marshallers\EventStreamPublisherMarshaller.tt" + #line 28 "C:\repos\aws-sdk-net-v4\generator\ServiceClientGeneratorLib\Generators\Marshallers\EventStreamPublisherMarshaller.tt" this.Write(this.ToStringHelper.ToStringWithCulture(this.Structure.Name)); #line default #line hidden - this.Write("PublisherMarshaller : EventStreamPublisher\r\n {\r\n Func< Task