public override async Task <IEnumerable <TObjectType> > ReadArrayAsync(TextReader reader, CancellationToken cancellationToken = default) { if (reader == null) { return(await Task.FromResult(default(IEnumerable <TObjectType>)).ConfigureAwait(false)); } IObjectStringReader <TObjectType> objectReader = StringFactoryContainer.CreateObjectReader <TObjectType>(); var results = new List <TObjectType>(); var characters = new List <char>(); while (reader.Peek() >= 0) { var c = (char)reader.Read(); if (c == Delimiter) { await ReadAndAddObjectAsync(objectReader, results, new string(characters.ToArray()), cancellationToken).ConfigureAwait(false); characters.Clear(); continue; } characters.Add(c); } if (characters.Count > 0) { await ReadAndAddObjectAsync(objectReader, results, new string(characters.ToArray()), cancellationToken).ConfigureAwait(false); } return(await Task.FromResult(results).ConfigureAwait(false)); }
internal async Task <PVOutputResponse <TResponseContentType> > ExecuteSingleItemRequestAsync <TResponseContentType>(IRequest request, Dictionary <string, object> loggingScope, CancellationToken cancellationToken) { HttpResponseMessage responseMessage = null; try { using (Logger.BeginScope(loggingScope)) { using (HttpRequestMessage requestMessage = CreateRequestMessage(request)) { responseMessage = await ExecuteRequestAsync(requestMessage, cancellationToken).ConfigureAwait(false); } Stream responseStream = await GetResponseContentStreamAsync(responseMessage).ConfigureAwait(false); var result = new PVOutputResponse <TResponseContentType>(); result.ApiRateInformation = GetApiRateInformationfromResponse(responseMessage); if (ResponseIsErrorResponse(responseMessage, responseStream, result)) { return(result); } IObjectStringReader <TResponseContentType> reader = StringFactoryContainer.CreateObjectReader <TResponseContentType>(); TResponseContentType content = await reader.ReadObjectAsync(responseStream, cancellationToken).ConfigureAwait(false); result.IsSuccess = true; result.Value = content; return(result); } } finally { responseMessage.Dispose(); } }
private static async Task ReadAndAddObjectAsync(IObjectStringReader <TObjectType> objectReader, List <TObjectType> objectList, string objectContent, CancellationToken cancellationToken) { using (var reader = new StringReader(objectContent)) { TObjectType output = await objectReader.ReadObjectAsync(reader, cancellationToken).ConfigureAwait(false); objectList.Add(output); } }
public override async Task <IEnumerable <TObjectType> > ReadArrayAsync(TextReader reader, CancellationToken cancellationToken = default) { if (reader == null) { return(await Task.FromResult(default(IEnumerable <TObjectType>)).ConfigureAwait(false)); } IObjectStringReader <TObjectType> objectReader = StringFactoryContainer.CreateObjectReader <TObjectType>(); var results = new List <TObjectType>(); while (reader.Peek() >= 0) { var line = reader.ReadLine(); await ReadAndAddObjectAsync(objectReader, results, line, cancellationToken).ConfigureAwait(false); } return(await Task.FromResult(results).ConfigureAwait(false)); }
public void StringFactoryContainer_ForType_CreatesObjectReader() { IObjectStringReader <IStatus> reader = StringFactoryContainer.CreateObjectReader <IStatus>(); Assert.That(reader, Is.TypeOf <StatusObjectStringReader>()); }
public async Task BaseObjectReader_WithNullStream_ReturnsDefaultForType() { IObjectStringReader <IStatus> reader = StringFactoryContainer.CreateObjectReader <IStatus>(); IStatus content = await reader.ReadObjectAsync(stream : null, cancellationToken : default).ConfigureAwait(false);