diff --git a/quiche/quic/core/http/quic_receive_control_stream.cc b/quiche/quic/core/http/quic_receive_control_stream.cc
index 87e9bd7..b23fc57 100644
--- a/quiche/quic/core/http/quic_receive_control_stream.cc
+++ b/quiche/quic/core/http/quic_receive_control_stream.cc
@@ -9,6 +9,7 @@
 #include "absl/strings/numbers.h"
 #include "absl/strings/str_split.h"
 #include "absl/strings/string_view.h"
+#include "absl/types/optional.h"
 #include "quiche/quic/core/http/http_constants.h"
 #include "quiche/quic/core/http/http_decoder.h"
 #include "quiche/quic/core/http/quic_spdy_session.h"
@@ -138,10 +139,10 @@
 
   if (GetQuicReloadableFlag(quic_priority_update_structured_headers_parser)) {
     QUIC_RELOADABLE_FLAG_COUNT(quic_priority_update_structured_headers_parser);
-    const ParsePriorityFieldValueResult result =
+    absl::optional<QuicStreamPriority> priority =
         ParsePriorityFieldValue(frame.priority_field_value);
 
-    if (!result.success) {
+    if (!priority.has_value()) {
       stream_delegate()->OnStreamError(
           QUIC_INVALID_PRIORITY_UPDATE,
           "Invalid PRIORITY_UPDATE frame payload.");
@@ -150,7 +151,7 @@
 
     const QuicStreamId stream_id = frame.prioritized_element_id;
     return spdy_session_->OnPriorityUpdateForRequestStream(stream_id,
-                                                           result.priority);
+                                                           *priority);
   }
 
   for (absl::string_view key_value :
diff --git a/quiche/quic/core/quic_stream_priority.cc b/quiche/quic/core/quic_stream_priority.cc
index 9729706..1209258 100644
--- a/quiche/quic/core/quic_stream_priority.cc
+++ b/quiche/quic/core/quic_stream_priority.cc
@@ -38,12 +38,12 @@
   return *priority_field_value;
 }
 
-ParsePriorityFieldValueResult ParsePriorityFieldValue(
+absl::optional<QuicStreamPriority> ParsePriorityFieldValue(
     absl::string_view priority_field_value) {
   absl::optional<quiche::structured_headers::Dictionary> parsed_dictionary =
       quiche::structured_headers::ParseDictionary(priority_field_value);
   if (!parsed_dictionary.has_value()) {
-    return {false, {}};
+    return std::nullopt;
   }
 
   uint8_t urgency = QuicStreamPriority::kDefaultUrgency;
@@ -77,7 +77,7 @@
     }
   }
 
-  return {true, {urgency, incremental}};
+  return QuicStreamPriority{urgency, incremental};
 }
 
 }  // namespace quic
diff --git a/quiche/quic/core/quic_stream_priority.h b/quiche/quic/core/quic_stream_priority.h
index 33f1183..04db767 100644
--- a/quiche/quic/core/quic_stream_priority.h
+++ b/quiche/quic/core/quic_stream_priority.h
@@ -10,6 +10,7 @@
 #include <tuple>
 
 #include "absl/strings/string_view.h"
+#include "absl/types/optional.h"
 #include "quiche/quic/platform/api/quic_export.h"
 
 namespace quic {
@@ -43,15 +44,10 @@
 QUICHE_EXPORT std::string SerializePriorityFieldValue(
     QuicStreamPriority priority);
 
-// Return type of ParsePriorityFieldValue().
-struct QUICHE_EXPORT ParsePriorityFieldValueResult {
-  bool success;
-  QuicStreamPriority priority;
-};
-
 // Parses the Priority Field Value field of a PRIORITY_UPDATE frame.
-QUICHE_EXPORT ParsePriorityFieldValueResult
-ParsePriorityFieldValue(absl::string_view priority_field_value);
+// Returns nullopt on failure.
+QUICHE_EXPORT absl::optional<QuicStreamPriority> ParsePriorityFieldValue(
+    absl::string_view priority_field_value);
 
 }  // namespace quic
 
diff --git a/quiche/quic/core/quic_stream_priority_test.cc b/quiche/quic/core/quic_stream_priority_test.cc
index 1ebbabb..f379a2a 100644
--- a/quiche/quic/core/quic_stream_priority_test.cc
+++ b/quiche/quic/core/quic_stream_priority_test.cc
@@ -47,70 +47,70 @@
 
 TEST(ParsePriorityFieldValueTest, ParsePriorityFieldValue) {
   // Default values
-  ParsePriorityFieldValueResult result = ParsePriorityFieldValue("");
-  EXPECT_TRUE(result.success);
-  EXPECT_EQ(3, result.priority.urgency);
-  EXPECT_FALSE(result.priority.incremental);
+  absl::optional<QuicStreamPriority> result = ParsePriorityFieldValue("");
+  ASSERT_TRUE(result.has_value());
+  EXPECT_EQ(3, result->urgency);
+  EXPECT_FALSE(result->incremental);
 
   result = ParsePriorityFieldValue("i=?1");
-  EXPECT_TRUE(result.success);
-  EXPECT_EQ(3, result.priority.urgency);
-  EXPECT_TRUE(result.priority.incremental);
+  ASSERT_TRUE(result.has_value());
+  EXPECT_EQ(3, result->urgency);
+  EXPECT_TRUE(result->incremental);
 
   result = ParsePriorityFieldValue("u=5");
-  EXPECT_TRUE(result.success);
-  EXPECT_EQ(5, result.priority.urgency);
-  EXPECT_FALSE(result.priority.incremental);
+  ASSERT_TRUE(result.has_value());
+  EXPECT_EQ(5, result->urgency);
+  EXPECT_FALSE(result->incremental);
 
   result = ParsePriorityFieldValue("u=5, i");
-  EXPECT_TRUE(result.success);
-  EXPECT_EQ(5, result.priority.urgency);
-  EXPECT_TRUE(result.priority.incremental);
+  ASSERT_TRUE(result.has_value());
+  EXPECT_EQ(5, result->urgency);
+  EXPECT_TRUE(result->incremental);
 
   result = ParsePriorityFieldValue("i, u=1");
-  EXPECT_TRUE(result.success);
-  EXPECT_EQ(1, result.priority.urgency);
-  EXPECT_TRUE(result.priority.incremental);
+  ASSERT_TRUE(result.has_value());
+  EXPECT_EQ(1, result->urgency);
+  EXPECT_TRUE(result->incremental);
 
   // Duplicate values are allowed.
   result = ParsePriorityFieldValue("u=5, i=?1, i=?0, u=2");
-  EXPECT_TRUE(result.success);
-  EXPECT_EQ(2, result.priority.urgency);
-  EXPECT_FALSE(result.priority.incremental);
+  ASSERT_TRUE(result.has_value());
+  EXPECT_EQ(2, result->urgency);
+  EXPECT_FALSE(result->incremental);
 
   // Unknown parameters MUST be ignored.
   result = ParsePriorityFieldValue("a=42, u=4, i=?0");
-  EXPECT_TRUE(result.success);
-  EXPECT_EQ(4, result.priority.urgency);
-  EXPECT_FALSE(result.priority.incremental);
+  ASSERT_TRUE(result.has_value());
+  EXPECT_EQ(4, result->urgency);
+  EXPECT_FALSE(result->incremental);
 
   // Out-of-range values MUST be ignored.
   result = ParsePriorityFieldValue("u=-2, i");
-  EXPECT_TRUE(result.success);
-  EXPECT_EQ(3, result.priority.urgency);
-  EXPECT_TRUE(result.priority.incremental);
+  ASSERT_TRUE(result.has_value());
+  EXPECT_EQ(3, result->urgency);
+  EXPECT_TRUE(result->incremental);
 
   // Values of unexpected types MUST be ignored.
   result = ParsePriorityFieldValue("u=4.2, i=\"foo\"");
-  EXPECT_TRUE(result.success);
-  EXPECT_EQ(3, result.priority.urgency);
-  EXPECT_FALSE(result.priority.incremental);
+  ASSERT_TRUE(result.has_value());
+  EXPECT_EQ(3, result->urgency);
+  EXPECT_FALSE(result->incremental);
 
   // Values of the right type but different names are ignored.
   result = ParsePriorityFieldValue("a=4, b=?1");
-  EXPECT_TRUE(result.success);
-  EXPECT_EQ(3, result.priority.urgency);
-  EXPECT_FALSE(result.priority.incremental);
+  ASSERT_TRUE(result.has_value());
+  EXPECT_EQ(3, result->urgency);
+  EXPECT_FALSE(result->incremental);
 
   // Cannot be parsed as structured headers.
   result = ParsePriorityFieldValue("000");
-  EXPECT_FALSE(result.success);
+  EXPECT_FALSE(result.has_value());
 
   // Inner list dictionary values are ignored.
   result = ParsePriorityFieldValue("a=(1 2), u=1");
-  EXPECT_TRUE(result.success);
-  EXPECT_EQ(1, result.priority.urgency);
-  EXPECT_FALSE(result.priority.incremental);
+  ASSERT_TRUE(result.has_value());
+  EXPECT_EQ(1, result->urgency);
+  EXPECT_FALSE(result->incremental);
 }
 
 }  // namespace quic::test
