using System;
using Amazon.Runtime;
using Amazon.Util;
using ThirdParty.Json.LitJson;
using System.IO;
using Amazon.MobileAnalytics.Model.Internal.MarshallTransformations;
using Amazon.Runtime.Internal.Transform;
using System.Net;
using System.Globalization;
namespace Amazon.MobileAnalytics.Model
{
public static class EventExtensions
{
private class DummyResponse : IWebResponseData
{
long IWebResponseData.ContentLength { get { return 0; } }
string IWebResponseData.ContentType { get { return ""; } }
HttpStatusCode IWebResponseData.StatusCode { get { return HttpStatusCode.OK; } }
bool IWebResponseData.IsSuccessStatusCode { get { return false; } }
IHttpResponseBody IWebResponseData.ResponseBody { get { return null; } }
bool IWebResponseData.IsHeaderPresent(string headerName)
{
return false;
}
string IWebResponseData.GetHeaderValue(string headerName)
{
return null;
}
string[] IWebResponseData.GetHeaderNames()
{
return new string[0];
}
}
///
/// Creates a Json string from the Event. Expects Event and Session Timestamps to be in UTC.
///
public static string MarshallToJson(this Event ev)
{
using (StringWriter stringWriter = new StringWriter(CultureInfo.InvariantCulture))
{
JsonWriter writer = new JsonWriter(stringWriter);
writer.WriteObjectStart();
EventMarshaller.Instance.Marshall(ev, new Runtime.Internal.Transform.JsonMarshallerContext(null, writer));
writer.WriteObjectEnd();
return stringWriter.ToString();
}
}
///
/// Creates an Event object from Json.
///
///
/// The Json string representing the Event.
///
public static Event UnmarshallFromJson(this Event ev, String eventValue)
{
using (MemoryStream responseStream = new MemoryStream())
{
using (StreamWriter writer = new StreamWriter(responseStream))
{
writer.Write(eventValue);
writer.Flush();
responseStream.Position = 0;
return EventUnmarshaller.Instance.Unmarshall(new Runtime.Internal.Transform.JsonUnmarshallerContext(responseStream, false, new DummyResponse()));
}
}
}
}
}