Introduce ParsedQuicVersion static constructors

These will simplify accessing individual ParsedQuicVersions, and is a step towards making ParsedQuicVersion a class.

Refactor, no behavior change, not flag protected

PiperOrigin-RevId: 313844489
Change-Id: I0406f8d149ca396dff9b444960c826aaff833822
diff --git a/quic/core/quic_versions.cc b/quic/core/quic_versions.cc
index 7e09d2f..a952368 100644
--- a/quic/core/quic_versions.cc
+++ b/quic/core/quic_versions.cc
@@ -638,12 +638,11 @@
 }
 
 ParsedQuicVersion UnsupportedQuicVersion() {
-  return ParsedQuicVersion(PROTOCOL_UNSUPPORTED, QUIC_VERSION_UNSUPPORTED);
+  return ParsedQuicVersion::Unsupported();
 }
 
 ParsedQuicVersion QuicVersionReservedForNegotiation() {
-  return ParsedQuicVersion(PROTOCOL_QUIC_CRYPTO,
-                           QUIC_VERSION_RESERVED_FOR_NEGOTIATION);
+  return ParsedQuicVersion::ReservedForNegotiation();
 }
 
 std::string AlpnForVersion(ParsedQuicVersion parsed_version) {
diff --git a/quic/core/quic_versions.h b/quic/core/quic_versions.h
index 9e6a184..7a1d73f 100644
--- a/quic/core/quic_versions.h
+++ b/quic/core/quic_versions.h
@@ -250,6 +250,51 @@
            transport_version != other.transport_version;
   }
 
+  static constexpr ParsedQuicVersion Draft28() {
+    return ParsedQuicVersion(PROTOCOL_TLS1_3, QUIC_VERSION_IETF_DRAFT_28);
+  }
+
+  static constexpr ParsedQuicVersion Draft27() {
+    return ParsedQuicVersion(PROTOCOL_TLS1_3, QUIC_VERSION_IETF_DRAFT_27);
+  }
+
+  static constexpr ParsedQuicVersion Draft25() {
+    return ParsedQuicVersion(PROTOCOL_TLS1_3, QUIC_VERSION_IETF_DRAFT_25);
+  }
+
+  static constexpr ParsedQuicVersion T050() {
+    return ParsedQuicVersion(PROTOCOL_TLS1_3, QUIC_VERSION_50);
+  }
+
+  static constexpr ParsedQuicVersion Q050() {
+    return ParsedQuicVersion(PROTOCOL_QUIC_CRYPTO, QUIC_VERSION_50);
+  }
+
+  static constexpr ParsedQuicVersion Q049() {
+    return ParsedQuicVersion(PROTOCOL_QUIC_CRYPTO, QUIC_VERSION_49);
+  }
+
+  static constexpr ParsedQuicVersion Q048() {
+    return ParsedQuicVersion(PROTOCOL_QUIC_CRYPTO, QUIC_VERSION_48);
+  }
+
+  static constexpr ParsedQuicVersion Q046() {
+    return ParsedQuicVersion(PROTOCOL_QUIC_CRYPTO, QUIC_VERSION_46);
+  }
+
+  static constexpr ParsedQuicVersion Q043() {
+    return ParsedQuicVersion(PROTOCOL_QUIC_CRYPTO, QUIC_VERSION_43);
+  }
+
+  static constexpr ParsedQuicVersion Unsupported() {
+    return ParsedQuicVersion(PROTOCOL_UNSUPPORTED, QUIC_VERSION_UNSUPPORTED);
+  }
+
+  static constexpr ParsedQuicVersion ReservedForNegotiation() {
+    return ParsedQuicVersion(PROTOCOL_QUIC_CRYPTO,
+                             QUIC_VERSION_RESERVED_FOR_NEGOTIATION);
+  }
+
   // Returns whether our codebase understands this version. This should only be
   // called on valid versions, see ParsedQuicVersionIsValid. Assuming the
   // version is valid, IsKnown returns whether the version is not
@@ -379,15 +424,11 @@
 
 constexpr std::array<ParsedQuicVersion, 9> SupportedVersions() {
   return {
-      ParsedQuicVersion(PROTOCOL_TLS1_3, QUIC_VERSION_IETF_DRAFT_28),
-      ParsedQuicVersion(PROTOCOL_TLS1_3, QUIC_VERSION_IETF_DRAFT_27),
-      ParsedQuicVersion(PROTOCOL_TLS1_3, QUIC_VERSION_IETF_DRAFT_25),
-      ParsedQuicVersion(PROTOCOL_TLS1_3, QUIC_VERSION_50),
-      ParsedQuicVersion(PROTOCOL_QUIC_CRYPTO, QUIC_VERSION_50),
-      ParsedQuicVersion(PROTOCOL_QUIC_CRYPTO, QUIC_VERSION_49),
-      ParsedQuicVersion(PROTOCOL_QUIC_CRYPTO, QUIC_VERSION_48),
-      ParsedQuicVersion(PROTOCOL_QUIC_CRYPTO, QUIC_VERSION_46),
-      ParsedQuicVersion(PROTOCOL_QUIC_CRYPTO, QUIC_VERSION_43),
+      ParsedQuicVersion::Draft28(), ParsedQuicVersion::Draft27(),
+      ParsedQuicVersion::Draft25(), ParsedQuicVersion::T050(),
+      ParsedQuicVersion::Q050(),    ParsedQuicVersion::Q049(),
+      ParsedQuicVersion::Q048(),    ParsedQuicVersion::Q046(),
+      ParsedQuicVersion::Q043(),
   };
 }
 
diff --git a/quic/core/quic_versions_test.cc b/quic/core/quic_versions_test.cc
index 1ca9fae..ad2d334 100644
--- a/quic/core/quic_versions_test.cc
+++ b/quic/core/quic_versions_test.cc
@@ -84,10 +84,8 @@
 }
 
 TEST_F(QuicVersionsTest, Features) {
-  ParsedQuicVersion parsed_version_q043 =
-      ParsedQuicVersion(PROTOCOL_QUIC_CRYPTO, QUIC_VERSION_43);
-  ParsedQuicVersion parsed_version_draft_27 =
-      ParsedQuicVersion(PROTOCOL_TLS1_3, QUIC_VERSION_IETF_DRAFT_27);
+  ParsedQuicVersion parsed_version_q043 = ParsedQuicVersion::Q043();
+  ParsedQuicVersion parsed_version_draft_27 = ParsedQuicVersion::Draft27();
 
   EXPECT_TRUE(parsed_version_q043.IsKnown());
   EXPECT_FALSE(parsed_version_q043.KnowsWhichDecrypterToUse());