/// <summary> /// Extract the payload using the provided extractors. /// </summary> /// <param name="request">The request.</param> /// <returns>A serializable representation of the payload.</returns> public IMessage?ExtractPayload <TRequest>(IProtobufRequest <TRequest> request) where TRequest : class, IMessage { // Not to throw on code that ignores nullability warnings. // ReSharper disable once ConditionIsAlwaysTrueOrFalse if (request is null) { return(null); } var size = _sizeSwitch(); switch (size) { case RequestSize.Small when request.ContentLength < 1_000: case RequestSize.Medium when request.ContentLength < 10_000: case RequestSize.Always: _options.DiagnosticLogger?.Log(SentryLevel.Debug, "Attempting to read request body of size: {0}, configured max: {1}.", null, request.ContentLength, size); foreach (var extractor in Extractors) { var data = extractor.ExtractPayload(request); if (data == null) { continue; } return(data); } break; // Request body extraction is opt-in case RequestSize.None: _options.DiagnosticLogger?.Log(SentryLevel.Debug, "Skipping request body extraction."); return(null); } _options.DiagnosticLogger?.Log(SentryLevel.Warning, "Ignoring request with Size {0} and configuration RequestSize {1}", null, request.ContentLength, size); return(null); }
/// <summary> /// Extracts the request body of the <see cref="IProtobufRequest{TRequest}"/> as an <see cref="IMessage"/>. /// </summary> public IMessage ExtractPayload <TRequest>(IProtobufRequest <TRequest> request) where TRequest : class, IMessage { return(request.Request); }