// Copyright Epic Games, Inc. All Rights Reserved. using System; using EpicGames.Core; using EpicGames.Serialization; using Microsoft.AspNetCore.Mvc; namespace EpicGames.AspNet { /// /// /// public static class CbConvertersAspNet { /// /// /// public static void AddAspnetConverters() { CbConverter.TypeToConverter[typeof(ProblemDetails)] = new CbProblemDetailsConverter(); } } /// /// Converter for asp.net problem details type /// class CbProblemDetailsConverter : CbConverter { /// public override ProblemDetails Read(CbField field) { if (!field.IsObject()) { throw new CbException($"Error converting field \"{field.Name}\" to ProblemDetails. Expected CbObject."); } ProblemDetails result = new ProblemDetails { Title = field[new Utf8String("title")].AsString(), Detail = field[new Utf8String("detail")].AsString(), Type = field[new Utf8String("type")].AsString(), Instance = field[new Utf8String("instance")].AsString(), Status = field[new Utf8String("status")].AsInt32() }; return result; } /// public override void Write(CbWriter writer, ProblemDetails problemDetails) { writer.WriteObject(ToCbObject(problemDetails)); } /// public override void WriteNamed(CbWriter writer, CbFieldName name, ProblemDetails problemDetails) { writer.WriteField(name, ToCbObject(problemDetails).AsField()); } private static CbObject ToCbObject(ProblemDetails problemDetails) { CbWriter objectWriter = new CbWriter(); objectWriter.BeginObject(); objectWriter.WriteString(new Utf8String("title"), problemDetails.Title); if (!String.IsNullOrEmpty(problemDetails.Detail)) { objectWriter.WriteString(new Utf8String("detail"), problemDetails.Detail); } if (!String.IsNullOrEmpty(problemDetails.Type)) { objectWriter.WriteString(new Utf8String("type"), problemDetails.Type); } if (!String.IsNullOrEmpty(problemDetails.Instance)) { objectWriter.WriteString(new Utf8String("instance"), problemDetails.Instance); } if (problemDetails.Status.HasValue) { objectWriter.WriteInteger(new Utf8String("status"), problemDetails.Status.Value); } objectWriter.EndObject(); return objectWriter.ToObject(); } } }