Add convenience constructors for items and members with empty parameters

Many callers do not provide parameters.

PiperOrigin-RevId: 974525383
diff --git a/quiche/common/structured_headers.cc b/quiche/common/structured_headers.cc
index 1bfdbd6..b0ca288 100644
--- a/quiche/common/structured_headers.cc
+++ b/quiche/common/structured_headers.cc
@@ -894,8 +894,9 @@
     default;
 ParameterizedItem::ParameterizedItem(ParameterizedItem&&) = default;
 ParameterizedItem& ParameterizedItem::operator=(ParameterizedItem&&) = default;
-ParameterizedItem::ParameterizedItem(Item id, Parameters ps)
-    : item(std::move(id)), params(std::move(ps)) {}
+ParameterizedItem::ParameterizedItem(Item item, Parameters params)
+    : item(std::move(item)), params(std::move(params)) {}
+ParameterizedItem::ParameterizedItem(Item item) : item(std::move(item)) {}
 ParameterizedItem::~ParameterizedItem() = default;
 
 ParameterizedMember::ParameterizedMember() = default;
@@ -905,21 +906,25 @@
 ParameterizedMember::ParameterizedMember(ParameterizedMember&&) = default;
 ParameterizedMember& ParameterizedMember::operator=(ParameterizedMember&&) =
     default;
-ParameterizedMember::ParameterizedMember(std::vector<ParameterizedItem> id,
+ParameterizedMember::ParameterizedMember(std::vector<ParameterizedItem> items,
                                          bool member_is_inner_list,
-                                         Parameters ps)
-    : member(std::move(id)),
+                                         Parameters params)
+    : member(std::move(items)),
       member_is_inner_list(member_is_inner_list),
-      params(std::move(ps)) {}
-ParameterizedMember::ParameterizedMember(std::vector<ParameterizedItem> id,
-                                         Parameters ps)
-    : member(std::move(id)),
+      params(std::move(params)) {}
+ParameterizedMember::ParameterizedMember(std::vector<ParameterizedItem> items,
+                                         Parameters params)
+    : member(std::move(items)),
       member_is_inner_list(true),
-      params(std::move(ps)) {}
-ParameterizedMember::ParameterizedMember(Item id, Parameters ps)
-    : member({{std::move(id), {}}}),
+      params(std::move(params)) {}
+ParameterizedMember::ParameterizedMember(std::vector<ParameterizedItem> items)
+    : member(std::move(items)), member_is_inner_list(true) {}
+ParameterizedMember::ParameterizedMember(Item item, Parameters params)
+    : member({{std::move(item), {}}}),
       member_is_inner_list(false),
-      params(std::move(ps)) {}
+      params(std::move(params)) {}
+ParameterizedMember::ParameterizedMember(Item item)
+    : member({{std::move(item), {}}}), member_is_inner_list(false) {}
 ParameterizedMember::~ParameterizedMember() = default;
 
 std::optional<std::pair<const Item&, const Parameters&>>
diff --git a/quiche/common/structured_headers.h b/quiche/common/structured_headers.h
index 4c8b6b2..0ee810a 100644
--- a/quiche/common/structured_headers.h
+++ b/quiche/common/structured_headers.h
@@ -203,11 +203,18 @@
   Parameters params;
 
   ParameterizedItem();
+
+  // Convenience constructor for empty parameters.
+  explicit ParameterizedItem(Item);
+
+  ParameterizedItem(Item, Parameters);
+
   ParameterizedItem(const ParameterizedItem&);
   ParameterizedItem& operator=(const ParameterizedItem&);
+
   ParameterizedItem(ParameterizedItem&&);
   ParameterizedItem& operator=(ParameterizedItem&&);
-  ParameterizedItem(Item, Parameters);
+
   ~ParameterizedItem();
 
   friend bool operator==(const ParameterizedItem&,
@@ -224,9 +231,17 @@
   // Constructor for a member that is an inner list.
   ParameterizedMember(std::vector<ParameterizedItem>, Parameters);
 
+  // Convenience constructor for a member that is an inner list with empty
+  // parameters.
+  explicit ParameterizedMember(std::vector<ParameterizedItem>);
+
   // Constructor for a member that is a single Item.
   ParameterizedMember(Item, Parameters);
 
+  // Convenience constructor for a member that is a single Item with empty
+  // parameters.
+  explicit ParameterizedMember(Item);
+
   ParameterizedMember(const ParameterizedMember&);
   ParameterizedMember& operator=(const ParameterizedMember&);
 
diff --git a/quiche/common/structured_headers_test.cc b/quiche/common/structured_headers_test.cc
index e99e1a5..a139ac6 100644
--- a/quiche/common/structured_headers_test.cc
+++ b/quiche/common/structured_headers_test.cc
@@ -687,8 +687,8 @@
 TEST(StructuredHeaderTest, DictionaryConstructors) {
   const std::string key0 = "key0";
   const std::string key1 = "key1";
-  const ParameterizedMember member0{Item("Applepie"), {}};
-  const ParameterizedMember member1{Item("hello", Item::kByteSequenceType), {}};
+  const ParameterizedMember member0(Item("Applepie"));
+  const ParameterizedMember member1(Item("hello", Item::kByteSequenceType));
 
   Dictionary dict;
   EXPECT_TRUE(dict.empty());
@@ -711,7 +711,7 @@
 
 TEST(StructuredHeaderTest, DictionaryClear) {
   const std::string key0 = "key0";
-  const ParameterizedMember member0{Item("Applepie"), {}};
+  const ParameterizedMember member0(Item("Applepie"));
 
   Dictionary dict({{key0, member0}});
   EXPECT_EQ(1U, dict.size());
@@ -728,9 +728,9 @@
   const std::string key0 = "key0";
   const std::string key1 = "key1";
 
-  const ParameterizedMember nonempty_member0{Item("Applepie"), {}};
-  const ParameterizedMember nonempty_member1{
-      Item("hello", Item::kByteSequenceType), {}};
+  const ParameterizedMember nonempty_member0(Item("Applepie"));
+  const ParameterizedMember nonempty_member1(
+      Item("hello", Item::kByteSequenceType));
   const ParameterizedMember empty_member;
 
   Dictionary dict{{{key0, nonempty_member0}}};
diff --git a/quiche/web_transport/web_transport_headers.cc b/quiche/web_transport/web_transport_headers.cc
index cb98de5..93c00d7 100644
--- a/quiche/web_transport/web_transport_headers.cc
+++ b/quiche/web_transport/web_transport_headers.cc
@@ -100,7 +100,7 @@
   quiche::structured_headers::List list;
   list.reserve(subprotocols.size());
   for (const std::string& subprotocol : subprotocols) {
-    list.push_back(ParameterizedMember(Item(subprotocol), {}));
+    list.emplace_back(Item(subprotocol));
   }
 
   std::optional<std::string> serialized =
@@ -189,9 +189,8 @@
   std::vector<DictionaryMember> members;
   members.reserve(kInitHeaderFields.size());
   for (const auto& [field_name, field_accessor] : kInitHeaderFields) {
-    Item item(static_cast<int64_t>(header.*field_accessor));
-    members.push_back(std::make_pair(
-        field_name, ParameterizedMember(item, /*parameters=*/{})));
+    members.emplace_back(field_name,
+                         Item(static_cast<int64_t>(header.*field_accessor)));
   }
   std::optional<std::string> result =
       quiche::structured_headers::SerializeDictionary(