// Generated by scripts/import_httpwg_tests.py (version 1.0.0).
// Do not edit by hand.
// Source: httpwg/structured-field-tests @ 1e280c3ed9ffe0ca5fdb1d97219dddc389007677

///| Marks the start of a fresh text segment.

///|
/// Begins a new text segment.
pub let httpwg_cases_part_0 : Array[HttpwgCase] = [
  {
    name: "basic binary",
    header_type: "item",
    raw: [":aGVsbG8=:"],
    must_fail: false,
    can_fail: false,
    canonical: None,
    expected: Some(ExpItemField({ bare: ExpBinary("68656c6c6f"), params: [] })),
  },
  {
    name: "empty binary",
    header_type: "item",
    raw: ["::"],
    must_fail: false,
    can_fail: false,
    canonical: None,
    expected: Some(ExpItemField({ bare: ExpBinary(""), params: [] })),
  },
  {
    name: "padding at beginning",
    header_type: "item",
    raw: [":=aGVsbG8=:"],
    must_fail: true,
    can_fail: false,
    canonical: None,
    expected: None,
  },
  {
    name: "padding in middle",
    header_type: "item",
    raw: [":a=GVsbG8=:"],
    must_fail: true,
    can_fail: false,
    canonical: None,
    expected: None,
  },
  {
    name: "bad padding",
    header_type: "item",
    raw: [":aGVsbG8:"],
    must_fail: false,
    can_fail: true,
    canonical: Some([":aGVsbG8=:"]),
    expected: Some(ExpItemField({ bare: ExpBinary("68656c6c6f"), params: [] })),
  },
  {
    name: "bad padding dot",
    header_type: "item",
    raw: [":aGVsbG8.:"],
    must_fail: true,
    can_fail: false,
    canonical: None,
    expected: None,
  },
  {
    name: "bad end delimiter",
    header_type: "item",
    raw: [":aGVsbG8="],
    must_fail: true,
    can_fail: false,
    canonical: None,
    expected: None,
  },
  {
    name: "extra whitespace",
    header_type: "item",
    raw: [":aGVsb G8=:"],
    must_fail: true,
    can_fail: false,
    canonical: None,
    expected: None,
  },
  {
    name: "all whitespace",
    header_type: "item",
    raw: [":    :"],
    must_fail: true,
    can_fail: false,
    canonical: None,
    expected: None,
  },
  {
    name: "extra chars",
    header_type: "item",
    raw: [":aGVsbG!8=:"],
    must_fail: true,
    can_fail: false,
    canonical: None,
    expected: None,
  },
  {
    name: "suffix chars",
    header_type: "item",
    raw: [":aGVsbG8=!:"],
    must_fail: true,
    can_fail: false,
    canonical: None,
    expected: None,
  },
  {
    name: "non-zero pad bits",
    header_type: "item",
    raw: [":iZ==:"],
    must_fail: false,
    can_fail: true,
    canonical: Some([":iQ==:"]),
    expected: Some(ExpItemField({ bare: ExpBinary("89"), params: [] })),
  },
  {
    name: "non-ASCII binary",
    header_type: "item",
    raw: [":/+Ah:"],
    must_fail: false,
    can_fail: false,
    canonical: None,
    expected: Some(ExpItemField({ bare: ExpBinary("ffe021"), params: [] })),
  },
  {
    name: "base64url binary",
    header_type: "item",
    raw: [":_-Ah:"],
    must_fail: true,
    can_fail: false,
    canonical: None,
    expected: None,
  },
  {
    name: "binary prefix only",
    header_type: "item",
    raw: [":"],
    must_fail: true,
    can_fail: false,
    canonical: None,
    expected: None,
  },
  {
    name: "basic true boolean",
    header_type: "item",
    raw: ["?1"],
    must_fail: false,
    can_fail: false,
    canonical: None,
    expected: Some(ExpItemField({ bare: ExpBoolean(true), params: [] })),
  },
  {
    name: "basic false boolean",
    header_type: "item",
    raw: ["?0"],
    must_fail: false,
    can_fail: false,
    canonical: None,
    expected: Some(ExpItemField({ bare: ExpBoolean(false), params: [] })),
  },
  {
    name: "unknown boolean",
    header_type: "item",
    raw: ["?Q"],
    must_fail: true,
    can_fail: false,
    canonical: None,
    expected: None,
  },
  {
    name: "whitespace boolean",
    header_type: "item",
    raw: ["? 1"],
    must_fail: true,
    can_fail: false,
    canonical: None,
    expected: None,
  },
  {
    name: "negative zero boolean",
    header_type: "item",
    raw: ["?-0"],
    must_fail: true,
    can_fail: false,
    canonical: None,
    expected: None,
  },
]

///|
/// Begins a new text segment.
pub let httpwg_cases_part_1 : Array[HttpwgCase] = [
  {
    name: "T boolean",
    header_type: "item",
    raw: ["?T"],
    must_fail: true,
    can_fail: false,
    canonical: None,
    expected: None,
  },
  {
    name: "F boolean",
    header_type: "item",
    raw: ["?F"],
    must_fail: true,
    can_fail: false,
    canonical: None,
    expected: None,
  },
  {
    name: "t boolean",
    header_type: "item",
    raw: ["?t"],
    must_fail: true,
    can_fail: false,
    canonical: None,
    expected: None,
  },
  {
    name: "f boolean",
    header_type: "item",
    raw: ["?f"],
    must_fail: true,
    can_fail: false,
    canonical: None,
    expected: None,
  },
  {
    name: "spelled-out True boolean",
    header_type: "item",
    raw: ["?True"],
    must_fail: true,
    can_fail: false,
    canonical: None,
    expected: None,
  },
  {
    name: "spelled-out False boolean",
    header_type: "item",
    raw: ["?False"],
    must_fail: true,
    can_fail: false,
    canonical: None,
    expected: None,
  },
  {
    name: "boolean prefix only",
    header_type: "item",
    raw: ["?"],
    must_fail: true,
    can_fail: false,
    canonical: None,
    expected: None,
  },
  {
    name: "date - 1970-01-01 00:00:00",
    header_type: "item",
    raw: ["@0"],
    must_fail: false,
    can_fail: false,
    canonical: None,
    expected: Some(ExpItemField({ bare: ExpDate(0L), params: [] })),
  },
  {
    name: "date - 2022-08-04 01:57:13",
    header_type: "item",
    raw: ["@1659578233"],
    must_fail: false,
    can_fail: false,
    canonical: None,
    expected: Some(ExpItemField({ bare: ExpDate(1659578233L), params: [] })),
  },
  {
    name: "date - 1917-05-30 22:02:47",
    header_type: "item",
    raw: ["@-1659578233"],
    must_fail: false,
    can_fail: false,
    canonical: None,
    expected: Some(ExpItemField({ bare: ExpDate(-1659578233L), params: [] })),
  },
  {
    name: "date - 2^31",
    header_type: "item",
    raw: ["@2147483648"],
    must_fail: false,
    can_fail: false,
    canonical: None,
    expected: Some(ExpItemField({ bare: ExpDate(2147483648L), params: [] })),
  },
  {
    name: "date - 2^32",
    header_type: "item",
    raw: ["@4294967296"],
    must_fail: false,
    can_fail: false,
    canonical: None,
    expected: Some(ExpItemField({ bare: ExpDate(4294967296L), params: [] })),
  },
  {
    name: "interoperability max date - 9999" + "-12-31 00:00:00",
    header_type: "item",
    raw: ["@253402214400"],
    must_fail: false,
    can_fail: false,
    canonical: None,
    expected: Some(ExpItemField({ bare: ExpDate(253402214400L), params: [] })),
  },
  {
    name: "interoperability min date - 0001" + "-01-01 00:00:00",
    header_type: "item",
    raw: ["@-62135596800"],
    must_fail: false,
    can_fail: false,
    canonical: None,
    expected: Some(ExpItemField({ bare: ExpDate(-62135596800L), params: [] })),
  },
  {
    name: "date - decimal",
    header_type: "item",
    raw: ["@1659578233.12"],
    must_fail: true,
    can_fail: false,
    canonical: None,
    expected: None,
  },
  {
    name: "syntactic max date - 999,999,999" + ",999,999",
    header_type: "item",
    raw: ["@999999999999999"],
    must_fail: false,
    can_fail: true,
    canonical: None,
    expected: Some(
      ExpItemField({ bare: ExpDate(999999999999999L), params: [] }),
    ),
  },
  {
    name: "syntactic min date - -999,999,99" + "9,999,999",
    header_type: "item",
    raw: ["@-999999999999999"],
    must_fail: false,
    can_fail: true,
    canonical: None,
    expected: Some(
      ExpItemField({ bare: ExpDate(-999999999999999L), params: [] }),
    ),
  },
  {
    name: "too large syntactic date - 1,000" + ",000,000,000,000",
    header_type: "item",
    raw: ["@1000000000000000"],
    must_fail: true,
    can_fail: false,
    canonical: None,
    expected: None,
  },
  {
    name: "too small syntactic date - -1,00" + "0,000,000,000,000",
    header_type: "item",
    raw: ["@-1000000000000000"],
    must_fail: true,
    can_fail: false,
    canonical: None,
    expected: None,
  },
  {
    name: "date with negative zero",
    header_type: "item",
    raw: ["@-0"],
    must_fail: false,
    can_fail: false,
    canonical: Some(["@0"]),
    expected: Some(ExpItemField({ bare: ExpDate(0L), params: [] })),
  },
]

///|
/// Begins a new text segment.
pub let httpwg_cases_part_2 : Array[HttpwgCase] = [
  {
    name: "date - empty",
    header_type: "item",
    raw: ["@"],
    must_fail: true,
    can_fail: false,
    canonical: None,
    expected: None,
  },
  {
    name: "date - sign only",
    header_type: "item",
    raw: ["@-"],
    must_fail: true,
    can_fail: false,
    canonical: None,
    expected: None,
  },
  {
    name: "date - space",
    header_type: "item",
    raw: ["@ 12345678"],
    must_fail: true,
    can_fail: false,
    canonical: None,
    expected: None,
  },
  {
    name: "date - non-digit",
    header_type: "item",
    raw: ["@abc"],
    must_fail: true,
    can_fail: false,
    canonical: None,
    expected: None,
  },
  {
    name: "basic dictionary",
    header_type: "dictionary",
    raw: ["en=\"Applepie\", da=:w4ZibGV0w6Zyd" + "GUK:"],
    must_fail: false,
    can_fail: false,
    canonical: None,
    expected: Some(
      ExpDictField([
        ("en", ExpItemMember({ bare: ExpString("Applepie"), params: [] })),
        (
          "da",
          ExpItemMember({
            bare: ExpBinary("c386626c6574c3a67274650a"),
            params: [],
          }),
        ),
      ]),
    ),
  },
  {
    name: "empty dictionary",
    header_type: "dictionary",
    raw: [""],
    must_fail: false,
    can_fail: false,
    canonical: Some([]),
    expected: Some(ExpDictField([])),
  },
  {
    name: "single item dictionary",
    header_type: "dictionary",
    raw: ["a=1"],
    must_fail: false,
    can_fail: false,
    canonical: None,
    expected: Some(
      ExpDictField([("a", ExpItemMember({ bare: ExpInteger(1L), params: [] }))]),
    ),
  },
  {
    name: "list item dictionary",
    header_type: "dictionary",
    raw: ["a=(1 2)"],
    must_fail: false,
    can_fail: false,
    canonical: None,
    expected: Some(
      ExpDictField([
        (
          "a",
          ExpInnerList(
            [
              { bare: ExpInteger(1L), params: [] },
              { bare: ExpInteger(2L), params: [] },
            ],
            [],
          ),
        ),
      ]),
    ),
  },
  {
    name: "single list item dictionary",
    header_type: "dictionary",
    raw: ["a=(1)"],
    must_fail: false,
    can_fail: false,
    canonical: None,
    expected: Some(
      ExpDictField([
        ("a", ExpInnerList([{ bare: ExpInteger(1L), params: [] }], [])),
      ]),
    ),
  },
  {
    name: "empty list item dictionary",
    header_type: "dictionary",
    raw: ["a=()"],
    must_fail: false,
    can_fail: false,
    canonical: None,
    expected: Some(ExpDictField([("a", ExpInnerList([], []))])),
  },
  {
    name: "no whitespace dictionary",
    header_type: "dictionary",
    raw: ["a=1,b=2"],
    must_fail: false,
    can_fail: false,
    canonical: Some(["a=1, b=2"]),
    expected: Some(
      ExpDictField([
        ("a", ExpItemMember({ bare: ExpInteger(1L), params: [] })),
        ("b", ExpItemMember({ bare: ExpInteger(2L), params: [] })),
      ]),
    ),
  },
  {
    name: "extra whitespace dictionary",
    header_type: "dictionary",
    raw: ["a=1 ,  b=2"],
    must_fail: false,
    can_fail: false,
    canonical: Some(["a=1, b=2"]),
    expected: Some(
      ExpDictField([
        ("a", ExpItemMember({ bare: ExpInteger(1L), params: [] })),
        ("b", ExpItemMember({ bare: ExpInteger(2L), params: [] })),
      ]),
    ),
  },
  {
    name: "tab separated dictionary",
    header_type: "dictionary",
    raw: ["a=1\t,\tb=2"],
    must_fail: false,
    can_fail: false,
    canonical: Some(["a=1, b=2"]),
    expected: Some(
      ExpDictField([
        ("a", ExpItemMember({ bare: ExpInteger(1L), params: [] })),
        ("b", ExpItemMember({ bare: ExpInteger(2L), params: [] })),
      ]),
    ),
  },
  {
    name: "leading whitespace dictionary",
    header_type: "dictionary",
    raw: ["     a=1 ,  b=2"],
    must_fail: false,
    can_fail: false,
    canonical: Some(["a=1, b=2"]),
    expected: Some(
      ExpDictField([
        ("a", ExpItemMember({ bare: ExpInteger(1L), params: [] })),
        ("b", ExpItemMember({ bare: ExpInteger(2L), params: [] })),
      ]),
    ),
  },
  {
    name: "whitespace before = dictionary",
    header_type: "dictionary",
    raw: ["a =1, b=2"],
    must_fail: true,
    can_fail: false,
    canonical: None,
    expected: None,
  },
  {
    name: "whitespace after = dictionary",
    header_type: "dictionary",
    raw: ["a=1, b= 2"],
    must_fail: true,
    can_fail: false,
    canonical: None,
    expected: None,
  },
  {
    name: "two lines dictionary",
    header_type: "dictionary",
    raw: ["a=1", "b=2"],
    must_fail: false,
    can_fail: false,
    canonical: Some(["a=1, b=2"]),
    expected: Some(
      ExpDictField([
        ("a", ExpItemMember({ bare: ExpInteger(1L), params: [] })),
        ("b", ExpItemMember({ bare: ExpInteger(2L), params: [] })),
      ]),
    ),
  },
  {
    name: "missing value dictionary",
    header_type: "dictionary",
    raw: ["a=1, b, c=3"],
    must_fail: false,
    can_fail: false,
    canonical: None,
    expected: Some(
      ExpDictField([
        ("a", ExpItemMember({ bare: ExpInteger(1L), params: [] })),
        ("b", ExpItemMember({ bare: ExpBoolean(true), params: [] })),
        ("c", ExpItemMember({ bare: ExpInteger(3L), params: [] })),
      ]),
    ),
  },
  {
    name: "all missing value dictionary",
    header_type: "dictionary",
    raw: ["a, b, c"],
    must_fail: false,
    can_fail: false,
    canonical: None,
    expected: Some(
      ExpDictField([
        ("a", ExpItemMember({ bare: ExpBoolean(true), params: [] })),
        ("b", ExpItemMember({ bare: ExpBoolean(true), params: [] })),
        ("c", ExpItemMember({ bare: ExpBoolean(true), params: [] })),
      ]),
    ),
  },
  {
    name: "start missing value dictionary",
    header_type: "dictionary",
    raw: ["a, b=2"],
    must_fail: false,
    can_fail: false,
    canonical: None,
    expected: Some(
      ExpDictField([
        ("a", ExpItemMember({ bare: ExpBoolean(true), params: [] })),
        ("b", ExpItemMember({ bare: ExpInteger(2L), params: [] })),
      ]),
    ),
  },
]

///|
/// Begins a new text segment.
pub let httpwg_cases_part_3 : Array[HttpwgCase] = [
  {
    name: "end missing value dictionary",
    header_type: "dictionary",
    raw: ["a=1, b"],
    must_fail: false,
    can_fail: false,
    canonical: None,
    expected: Some(
      ExpDictField([
        ("a", ExpItemMember({ bare: ExpInteger(1L), params: [] })),
        ("b", ExpItemMember({ bare: ExpBoolean(true), params: [] })),
      ]),
    ),
  },
  {
    name: "missing value with params dictio" + "nary",
    header_type: "dictionary",
    raw: ["a=1, b;foo=9, c=3"],
    must_fail: false,
    can_fail: false,
    canonical: None,
    expected: Some(
      ExpDictField([
        ("a", ExpItemMember({ bare: ExpInteger(1L), params: [] })),
        (
          "b",
          ExpItemMember({
            bare: ExpBoolean(true),
            params: [{ key: "foo", value: ExpInteger(9L) }],
          }),
        ),
        ("c", ExpItemMember({ bare: ExpInteger(3L), params: [] })),
      ]),
    ),
  },
  {
    name: "explicit true value with params " + "dictionary",
    header_type: "dictionary",
    raw: ["a=1, b=?1;foo=9, c=3"],
    must_fail: false,
    can_fail: false,
    canonical: Some(["a=1, b;foo=9, c=3"]),
    expected: Some(
      ExpDictField([
        ("a", ExpItemMember({ bare: ExpInteger(1L), params: [] })),
        (
          "b",
          ExpItemMember({
            bare: ExpBoolean(true),
            params: [{ key: "foo", value: ExpInteger(9L) }],
          }),
        ),
        ("c", ExpItemMember({ bare: ExpInteger(3L), params: [] })),
      ]),
    ),
  },
  {
    name: "trailing comma dictionary",
    header_type: "dictionary",
    raw: ["a=1, b=2,"],
    must_fail: true,
    can_fail: false,
    canonical: None,
    expected: None,
  },
  {
    name: "empty item dictionary",
    header_type: "dictionary",
    raw: ["a=1,,b=2,"],
    must_fail: true,
    can_fail: false,
    canonical: None,
    expected: None,
  },
  {
    name: "duplicate key dictionary",
    header_type: "dictionary",
    raw: ["a=1,b=2,a=3"],
    must_fail: false,
    can_fail: false,
    canonical: Some(["a=3, b=2"]),
    expected: Some(
      ExpDictField([
        ("a", ExpItemMember({ bare: ExpInteger(3L), params: [] })),
        ("b", ExpItemMember({ bare: ExpInteger(2L), params: [] })),
      ]),
    ),
  },
  {
    name: "dictionary key ordering",
    header_type: "dictionary",
    raw: ["m, z, t"],
    must_fail: false,
    can_fail: false,
    canonical: None,
    expected: Some(
      ExpDictField([
        ("m", ExpItemMember({ bare: ExpBoolean(true), params: [] })),
        ("z", ExpItemMember({ bare: ExpBoolean(true), params: [] })),
        ("t", ExpItemMember({ bare: ExpBoolean(true), params: [] })),
      ]),
    ),
  },
  {
    name: "numeric key dictionary",
    header_type: "dictionary",
    raw: ["a=1,1b=2,a=1"],
    must_fail: true,
    can_fail: false,
    canonical: None,
    expected: None,
  },
  {
    name: "uppercase key dictionary",
    header_type: "dictionary",
    raw: ["a=1,B=2,a=1"],
    must_fail: true,
    can_fail: false,
    canonical: None,
    expected: None,
  },
  {
    name: "bad key dictionary",
    header_type: "dictionary",
    raw: ["a=1,b!=2,a=1"],
    must_fail: true,
    can_fail: false,
    canonical: None,
    expected: None,
  },
  {
    name: "basic display string (ascii cont" + "ent)",
    header_type: "item",
    raw: ["%\"foo bar\""],
    must_fail: false,
    can_fail: false,
    canonical: None,
    expected: Some(
      ExpItemField({ bare: ExpDisplayString("foo bar"), params: [] }),
    ),
  },
  {
    name: "all printable ascii",
    header_type: "item",
    raw: [
      "%\" !%22#$%25&'()*+,-./0123456789" +
      ":;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXY" +
      "Z[\\]^_`abcdefghijklmnopqrstuvwxy" +
      "z{|}~\"",
    ],
    must_fail: false,
    can_fail: false,
    canonical: None,
    expected: Some(
      ExpItemField({
        bare: ExpDisplayString(
          " !\"#$%&'()*+,-./0123456789:;<=>?" +
          "@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_" +
          "`abcdefghijklmnopqrstuvwxyz{|}~",
        ),
        params: [],
      }),
    ),
  },
  {
    name: "non-ascii display string (upperc" + "ase escaping)",
    header_type: "item",
    raw: ["%\"f%C3%BC%C3%BC\""],
    must_fail: true,
    can_fail: false,
    canonical: None,
    expected: None,
  },
  {
    name: "non-ascii display string (lowerc" + "ase escaping)",
    header_type: "item",
    raw: ["%\"f%c3%bc%c3%bc\""],
    must_fail: false,
    can_fail: false,
    canonical: None,
    expected: Some(
      ExpItemField({ bare: ExpDisplayString("f\u00fc\u00fc"), params: [] }),
    ),
  },
  {
    name: "non-ascii display string (unesca" + "ped)",
    header_type: "item",
    raw: ["%\"f\u00fc\u00fc\""],
    must_fail: true,
    can_fail: false,
    canonical: None,
    expected: None,
  },
  {
    name: "tab in display string",
    header_type: "item",
    raw: ["%\"\t\""],
    must_fail: true,
    can_fail: false,
    canonical: None,
    expected: None,
  },
  {
    name: "newline in display string",
    header_type: "item",
    raw: ["%\"\n\""],
    must_fail: true,
    can_fail: false,
    canonical: None,
    expected: None,
  },
  {
    name: "single quoted display string",
    header_type: "item",
    raw: ["%'foo'"],
    must_fail: true,
    can_fail: false,
    canonical: None,
    expected: None,
  },
  {
    name: "unquoted display string",
    header_type: "item",
    raw: ["%foo"],
    must_fail: true,
    can_fail: false,
    canonical: None,
    expected: None,
  },
  {
    name: "display string missing initial q" + "uote",
    header_type: "item",
    raw: ["%foo\""],
    must_fail: true,
    can_fail: false,
    canonical: None,
    expected: None,
  },
]

///|
/// Begins a new text segment.
pub let httpwg_cases_part_4 : Array[HttpwgCase] = [
  {
    name: "unbalanced display string",
    header_type: "item",
    raw: ["%\"foo"],
    must_fail: true,
    can_fail: false,
    canonical: None,
    expected: None,
  },
  {
    name: "display string quoting",
    header_type: "item",
    raw: ["%\"foo %22bar%22 \\ baz\""],
    must_fail: false,
    can_fail: false,
    canonical: None,
    expected: Some(
      ExpItemField({ bare: ExpDisplayString("foo \"bar\" \\ baz"), params: [] }),
    ),
  },
  {
    name: "bad display string escaping",
    header_type: "item",
    raw: ["%\"foo %a"],
    must_fail: true,
    can_fail: false,
    canonical: None,
    expected: None,
  },
  {
    name: "bad display string utf-8 (invali" + "d 2-byte seq)",
    header_type: "item",
    raw: ["%\"%c3%28\""],
    must_fail: true,
    can_fail: false,
    canonical: None,
    expected: None,
  },
  {
    name: "bad display string utf-8 (invali" + "d sequence id)",
    header_type: "item",
    raw: ["%\"%a0%a1\""],
    must_fail: true,
    can_fail: false,
    canonical: None,
    expected: None,
  },
  {
    name: "bad display string utf-8 (invali" + "d hex)",
    header_type: "item",
    raw: ["%\"%g0%1w\""],
    must_fail: true,
    can_fail: false,
    canonical: None,
    expected: None,
  },
  {
    name: "bad display string utf-8 (invali" + "d 3-byte seq)",
    header_type: "item",
    raw: ["%\"%e2%28%a1\""],
    must_fail: true,
    can_fail: false,
    canonical: None,
    expected: None,
  },
  {
    name: "bad display string utf-8 (invali" + "d 4-byte seq)",
    header_type: "item",
    raw: ["%\"%f0%28%8c%28\""],
    must_fail: true,
    can_fail: false,
    canonical: None,
    expected: None,
  },
  {
    name: "BOM in display string",
    header_type: "item",
    raw: ["%\"BOM: %ef%bb%bf\""],
    must_fail: false,
    can_fail: false,
    canonical: None,
    expected: Some(
      ExpItemField({ bare: ExpDisplayString("BOM: \u{feff}"), params: [] }),
    ),
  },
  {
    name: "two lines display string",
    header_type: "item",
    raw: ["%\"foo", "bar\""],
    must_fail: false,
    can_fail: true,
    canonical: Some(["%\"foo, bar\""]),
    expected: Some(
      ExpItemField({ bare: ExpDisplayString("foo, bar"), params: [] }),
    ),
  },
  {
    name: "truncated display string escape " + "(zero digits)",
    header_type: "item",
    raw: ["%\"%\""],
    must_fail: true,
    can_fail: false,
    canonical: None,
    expected: None,
  },
  {
    name: "over-encoded display string",
    header_type: "item",
    raw: ["%\"%61\""],
    must_fail: false,
    can_fail: false,
    canonical: Some(["%\"a\""]),
    expected: Some(ExpItemField({ bare: ExpDisplayString("a"), params: [] })),
  },
  {
    name: "Foo-Example",
    header_type: "item",
    raw: ["2; foourl=\"https://foo.example.c" + "om/\""],
    must_fail: false,
    can_fail: false,
    canonical: Some(["2;foourl=\"https://foo.example.co" + "m/\""]),
    expected: Some(
      ExpItemField({
        bare: ExpInteger(2L),
        params: [
          { key: "foourl", value: ExpString("https://foo.example.com/") },
        ],
      }),
    ),
  },
  {
    name: "Example-StrListHeader",
    header_type: "list",
    raw: ["\"foo\", \"bar\", \"It was the best o" + "f times.\""],
    must_fail: false,
    can_fail: false,
    canonical: None,
    expected: Some(
      ExpListField([
        ExpItemMember({ bare: ExpString("foo"), params: [] }),
        ExpItemMember({ bare: ExpString("bar"), params: [] }),
        ExpItemMember({
          bare: ExpString("It was the best of times."),
          params: [],
        }),
      ]),
    ),
  },
  {
    name: "Example-Hdr (list on one line)",
    header_type: "list",
    raw: ["foo, bar"],
    must_fail: false,
    can_fail: false,
    canonical: None,
    expected: Some(
      ExpListField([
        ExpItemMember({ bare: ExpToken("foo"), params: [] }),
        ExpItemMember({ bare: ExpToken("bar"), params: [] }),
      ]),
    ),
  },
  {
    name: "Example-Hdr (list on two lines)",
    header_type: "list",
    raw: ["foo", "bar"],
    must_fail: false,
    can_fail: false,
    canonical: Some(["foo, bar"]),
    expected: Some(
      ExpListField([
        ExpItemMember({ bare: ExpToken("foo"), params: [] }),
        ExpItemMember({ bare: ExpToken("bar"), params: [] }),
      ]),
    ),
  },
  {
    name: "Example-StrListListHeader",
    header_type: "list",
    raw: ["(\"foo\" \"bar\"), (\"baz\"), (\"bat\" \"" + "one\"), ()"],
    must_fail: false,
    can_fail: false,
    canonical: None,
    expected: Some(
      ExpListField([
        ExpInnerList(
          [
            { bare: ExpString("foo"), params: [] },
            { bare: ExpString("bar"), params: [] },
          ],
          [],
        ),
        ExpInnerList([{ bare: ExpString("baz"), params: [] }], []),
        ExpInnerList(
          [
            { bare: ExpString("bat"), params: [] },
            { bare: ExpString("one"), params: [] },
          ],
          [],
        ),
        ExpInnerList([], []),
      ]),
    ),
  },
  {
    name: "Example-ListListParam",
    header_type: "list",
    raw: ["(\"foo\"; a=1;b=2);lvl=5, (\"bar\" \"" + "baz\");lvl=1"],
    must_fail: false,
    can_fail: false,
    canonical: Some(["(\"foo\";a=1;b=2);lvl=5, (\"bar\" \"b" + "az\");lvl=1"]),
    expected: Some(
      ExpListField([
        ExpInnerList(
          [
            {
              bare: ExpString("foo"),
              params: [
                { key: "a", value: ExpInteger(1L) },
                { key: "b", value: ExpInteger(2L) },
              ],
            },
          ],
          [{ key: "lvl", value: ExpInteger(5L) }],
        ),
        ExpInnerList(
          [
            { bare: ExpString("bar"), params: [] },
            { bare: ExpString("baz"), params: [] },
          ],
          [{ key: "lvl", value: ExpInteger(1L) }],
        ),
      ]),
    ),
  },
  {
    name: "Example-ParamListHeader",
    header_type: "list",
    raw: ["abc;a=1;b=2; cde_456, (ghi;jk=4 " + "l);q=\"9\";r=w"],
    must_fail: false,
    can_fail: false,
    canonical: Some(["abc;a=1;b=2;cde_456, (ghi;jk=4 l" + ");q=\"9\";r=w"]),
    expected: Some(
      ExpListField([
        ExpItemMember({
          bare: ExpToken("abc"),
          params: [
            { key: "a", value: ExpInteger(1L) },
            { key: "b", value: ExpInteger(2L) },
            { key: "cde_456", value: ExpBoolean(true) },
          ],
        }),
        ExpInnerList(
          [
            {
              bare: ExpToken("ghi"),
              params: [{ key: "jk", value: ExpInteger(4L) }],
            },
            { bare: ExpToken("l"), params: [] },
          ],
          [
            { key: "q", value: ExpString("9") },
            { key: "r", value: ExpToken("w") },
          ],
        ),
      ]),
    ),
  },
  {
    name: "Example-IntHeader",
    header_type: "item",
    raw: ["1; a; b=?0"],
    must_fail: false,
    can_fail: false,
    canonical: Some(["1;a;b=?0"]),
    expected: Some(
      ExpItemField({
        bare: ExpInteger(1L),
        params: [
          { key: "a", value: ExpBoolean(true) },
          { key: "b", value: ExpBoolean(false) },
        ],
      }),
    ),
  },
]

///|
/// Begins a new text segment.
pub let httpwg_cases_part_5 : Array[HttpwgCase] = [
  {
    name: "Example-DictHeader",
    header_type: "dictionary",
    raw: ["en=\"Applepie\", da=:w4ZibGV0w6Zyd" + "GU=:"],
    must_fail: false,
    can_fail: false,
    canonical: None,
    expected: Some(
      ExpDictField([
        ("en", ExpItemMember({ bare: ExpString("Applepie"), params: [] })),
        (
          "da",
          ExpItemMember({
            bare: ExpBinary("c386626c6574c3a6727465"),
            params: [],
          }),
        ),
      ]),
    ),
  },
  {
    name: "Example-DictHeader (boolean valu" + "es)",
    header_type: "dictionary",
    raw: ["a=?0, b, c; foo=bar"],
    must_fail: false,
    can_fail: false,
    canonical: Some(["a=?0, b, c;foo=bar"]),
    expected: Some(
      ExpDictField([
        ("a", ExpItemMember({ bare: ExpBoolean(false), params: [] })),
        ("b", ExpItemMember({ bare: ExpBoolean(true), params: [] })),
        (
          "c",
          ExpItemMember({
            bare: ExpBoolean(true),
            params: [{ key: "foo", value: ExpToken("bar") }],
          }),
        ),
      ]),
    ),
  },
  {
    name: "Example-DictListHeader",
    header_type: "dictionary",
    raw: ["rating=1.5, feelings=(joy sadnes" + "s)"],
    must_fail: false,
    can_fail: false,
    canonical: None,
    expected: Some(
      ExpDictField([
        ("rating", ExpItemMember({ bare: ExpDecimal(15L, 1), params: [] })),
        (
          "feelings",
          ExpInnerList(
            [
              { bare: ExpToken("joy"), params: [] },
              { bare: ExpToken("sadness"), params: [] },
            ],
            [],
          ),
        ),
      ]),
    ),
  },
  {
    name: "Example-MixDict",
    header_type: "dictionary",
    raw: ["a=(1 2), b=3, c=4;aa=bb, d=(5 6)" + ";valid"],
    must_fail: false,
    can_fail: false,
    canonical: Some(["a=(1 2), b=3, c=4;aa=bb, d=(5 6)" + ";valid"]),
    expected: Some(
      ExpDictField([
        (
          "a",
          ExpInnerList(
            [
              { bare: ExpInteger(1L), params: [] },
              { bare: ExpInteger(2L), params: [] },
            ],
            [],
          ),
        ),
        ("b", ExpItemMember({ bare: ExpInteger(3L), params: [] })),
        (
          "c",
          ExpItemMember({
            bare: ExpInteger(4L),
            params: [{ key: "aa", value: ExpToken("bb") }],
          }),
        ),
        (
          "d",
          ExpInnerList(
            [
              { bare: ExpInteger(5L), params: [] },
              { bare: ExpInteger(6L), params: [] },
            ],
            [{ key: "valid", value: ExpBoolean(true) }],
          ),
        ),
      ]),
    ),
  },
  {
    name: "Example-Hdr (dictionary on one l" + "ine)",
    header_type: "dictionary",
    raw: ["foo=1, bar=2"],
    must_fail: false,
    can_fail: false,
    canonical: None,
    expected: Some(
      ExpDictField([
        ("foo", ExpItemMember({ bare: ExpInteger(1L), params: [] })),
        ("bar", ExpItemMember({ bare: ExpInteger(2L), params: [] })),
      ]),
    ),
  },
  {
    name: "Example-Hdr (dictionary on two l" + "ines)",
    header_type: "dictionary",
    raw: ["foo=1", "bar=2"],
    must_fail: false,
    can_fail: false,
    canonical: Some(["foo=1, bar=2"]),
    expected: Some(
      ExpDictField([
        ("foo", ExpItemMember({ bare: ExpInteger(1L), params: [] })),
        ("bar", ExpItemMember({ bare: ExpInteger(2L), params: [] })),
      ]),
    ),
  },
  {
    name: "Example-IntItemHeader",
    header_type: "item",
    raw: ["5"],
    must_fail: false,
    can_fail: false,
    canonical: None,
    expected: Some(ExpItemField({ bare: ExpInteger(5L), params: [] })),
  },
  {
    name: "Example-IntItemHeader (params)",
    header_type: "item",
    raw: ["5; foo=bar"],
    must_fail: false,
    can_fail: false,
    canonical: Some(["5;foo=bar"]),
    expected: Some(
      ExpItemField({
        bare: ExpInteger(5L),
        params: [{ key: "foo", value: ExpToken("bar") }],
      }),
    ),
  },
  {
    name: "Example-IntegerHeader",
    header_type: "item",
    raw: ["42"],
    must_fail: false,
    can_fail: false,
    canonical: None,
    expected: Some(ExpItemField({ bare: ExpInteger(42L), params: [] })),
  },
  {
    name: "Example-FloatHeader",
    header_type: "item",
    raw: ["4.5"],
    must_fail: false,
    can_fail: false,
    canonical: None,
    expected: Some(ExpItemField({ bare: ExpDecimal(45L, 1), params: [] })),
  },
  {
    name: "Example-StringHeader",
    header_type: "item",
    raw: ["\"hello world\""],
    must_fail: false,
    can_fail: false,
    canonical: None,
    expected: Some(ExpItemField({ bare: ExpString("hello world"), params: [] })),
  },
  {
    name: "Example-BinaryHdr",
    header_type: "item",
    raw: [":cHJldGVuZCB0aGlzIGlzIGJpbmFyeSB" + "jb250ZW50Lg==:"],
    must_fail: false,
    can_fail: false,
    canonical: None,
    expected: Some(
      ExpItemField({
        bare: ExpBinary(
          "70726574656e64207468697320697320" + "62696e61727920636f6e74656e742e",
        ),
        params: [],
      }),
    ),
  },
  {
    name: "Example-BoolHdr",
    header_type: "item",
    raw: ["?1"],
    must_fail: false,
    can_fail: false,
    canonical: None,
    expected: Some(ExpItemField({ bare: ExpBoolean(true), params: [] })),
  },
  {
    name: "empty item",
    header_type: "item",
    raw: [""],
    must_fail: true,
    can_fail: false,
    canonical: None,
    expected: None,
  },
  {
    name: "leading space",
    header_type: "item",
    raw: [" \t 1"],
    must_fail: true,
    can_fail: false,
    canonical: None,
    expected: None,
  },
  {
    name: "trailing space",
    header_type: "item",
    raw: ["1 \t "],
    must_fail: true,
    can_fail: false,
    canonical: None,
    expected: None,
  },
  {
    name: "leading and trailing space",
    header_type: "item",
    raw: ["  1  "],
    must_fail: false,
    can_fail: false,
    canonical: Some(["1"]),
    expected: Some(ExpItemField({ bare: ExpInteger(1L), params: [] })),
  },
  {
    name: "leading and trailing whitespace",
    header_type: "item",
    raw: ["     1  "],
    must_fail: false,
    can_fail: false,
    canonical: Some(["1"]),
    expected: Some(ExpItemField({ bare: ExpInteger(1L), params: [] })),
  },
  {
    name: "0x00 as a single-character dicti" + "onary key",
    header_type: "dictionary",
    raw: ["\u0000=1"],
    must_fail: true,
    can_fail: false,
    canonical: None,
    expected: None,
  },
  {
    name: "0x01 as a single-character dicti" + "onary key",
    header_type: "dictionary",
    raw: ["\u0001=1"],
    must_fail: true,
    can_fail: false,
    canonical: None,
    expected: None,
  },
]

///|
/// Begins a new text segment.
pub let httpwg_cases_part_6 : Array[HttpwgCase] = [
  {
    name: "0x02 as a single-character dicti" + "onary key",
    header_type: "dictionary",
    raw: ["\u0002=1"],
    must_fail: true,
    can_fail: false,
    canonical: None,
    expected: None,
  },
  {
    name: "0x03 as a single-character dicti" + "onary key",
    header_type: "dictionary",
    raw: ["\u0003=1"],
    must_fail: true,
    can_fail: false,
    canonical: None,
    expected: None,
  },
  {
    name: "0x04 as a single-character dicti" + "onary key",
    header_type: "dictionary",
    raw: ["\u0004=1"],
    must_fail: true,
    can_fail: false,
    canonical: None,
    expected: None,
  },
  {
    name: "0x05 as a single-character dicti" + "onary key",
    header_type: "dictionary",
    raw: ["\u0005=1"],
    must_fail: true,
    can_fail: false,
    canonical: None,
    expected: None,
  },
  {
    name: "0x06 as a single-character dicti" + "onary key",
    header_type: "dictionary",
    raw: ["\u0006=1"],
    must_fail: true,
    can_fail: false,
    canonical: None,
    expected: None,
  },
  {
    name: "0x07 as a single-character dicti" + "onary key",
    header_type: "dictionary",
    raw: ["\u0007=1"],
    must_fail: true,
    can_fail: false,
    canonical: None,
    expected: None,
  },
  {
    name: "0x08 as a single-character dicti" + "onary key",
    header_type: "dictionary",
    raw: ["\u0008=1"],
    must_fail: true,
    can_fail: false,
    canonical: None,
    expected: None,
  },
  {
    name: "0x09 as a single-character dicti" + "onary key",
    header_type: "dictionary",
    raw: ["\t=1"],
    must_fail: true,
    can_fail: false,
    canonical: None,
    expected: None,
  },
  {
    name: "0x0a as a single-character dicti" + "onary key",
    header_type: "dictionary",
    raw: ["\n=1"],
    must_fail: true,
    can_fail: false,
    canonical: None,
    expected: None,
  },
  {
    name: "0x0b as a single-character dicti" + "onary key",
    header_type: "dictionary",
    raw: ["\u000b=1"],
    must_fail: true,
    can_fail: false,
    canonical: None,
    expected: None,
  },
  {
    name: "0x0c as a single-character dicti" + "onary key",
    header_type: "dictionary",
    raw: ["\u000c=1"],
    must_fail: true,
    can_fail: false,
    canonical: None,
    expected: None,
  },
  {
    name: "0x0d as a single-character dicti" + "onary key",
    header_type: "dictionary",
    raw: ["\r=1"],
    must_fail: true,
    can_fail: false,
    canonical: None,
    expected: None,
  },
  {
    name: "0x0e as a single-character dicti" + "onary key",
    header_type: "dictionary",
    raw: ["\u000e=1"],
    must_fail: true,
    can_fail: false,
    canonical: None,
    expected: None,
  },
  {
    name: "0x0f as a single-character dicti" + "onary key",
    header_type: "dictionary",
    raw: ["\u000f=1"],
    must_fail: true,
    can_fail: false,
    canonical: None,
    expected: None,
  },
  {
    name: "0x10 as a single-character dicti" + "onary key",
    header_type: "dictionary",
    raw: ["\u0010=1"],
    must_fail: true,
    can_fail: false,
    canonical: None,
    expected: None,
  },
  {
    name: "0x11 as a single-character dicti" + "onary key",
    header_type: "dictionary",
    raw: ["\u0011=1"],
    must_fail: true,
    can_fail: false,
    canonical: None,
    expected: None,
  },
  {
    name: "0x12 as a single-character dicti" + "onary key",
    header_type: "dictionary",
    raw: ["\u0012=1"],
    must_fail: true,
    can_fail: false,
    canonical: None,
    expected: None,
  },
  {
    name: "0x13 as a single-character dicti" + "onary key",
    header_type: "dictionary",
    raw: ["\u0013=1"],
    must_fail: true,
    can_fail: false,
    canonical: None,
    expected: None,
  },
  {
    name: "0x14 as a single-character dicti" + "onary key",
    header_type: "dictionary",
    raw: ["\u0014=1"],
    must_fail: true,
    can_fail: false,
    canonical: None,
    expected: None,
  },
  {
    name: "0x15 as a single-character dicti" + "onary key",
    header_type: "dictionary",
    raw: ["\u0015=1"],
    must_fail: true,
    can_fail: false,
    canonical: None,
    expected: None,
  },
]

///|
/// Begins a new text segment.
pub let httpwg_cases_part_7 : Array[HttpwgCase] = [
  {
    name: "0x16 as a single-character dicti" + "onary key",
    header_type: "dictionary",
    raw: ["\u0016=1"],
    must_fail: true,
    can_fail: false,
    canonical: None,
    expected: None,
  },
  {
    name: "0x17 as a single-character dicti" + "onary key",
    header_type: "dictionary",
    raw: ["\u0017=1"],
    must_fail: true,
    can_fail: false,
    canonical: None,
    expected: None,
  },
  {
    name: "0x18 as a single-character dicti" + "onary key",
    header_type: "dictionary",
    raw: ["\u0018=1"],
    must_fail: true,
    can_fail: false,
    canonical: None,
    expected: None,
  },
  {
    name: "0x19 as a single-character dicti" + "onary key",
    header_type: "dictionary",
    raw: ["\u0019=1"],
    must_fail: true,
    can_fail: false,
    canonical: None,
    expected: None,
  },
  {
    name: "0x1a as a single-character dicti" + "onary key",
    header_type: "dictionary",
    raw: ["\u001a=1"],
    must_fail: true,
    can_fail: false,
    canonical: None,
    expected: None,
  },
  {
    name: "0x1b as a single-character dicti" + "onary key",
    header_type: "dictionary",
    raw: ["\u001b=1"],
    must_fail: true,
    can_fail: false,
    canonical: None,
    expected: None,
  },
  {
    name: "0x1c as a single-character dicti" + "onary key",
    header_type: "dictionary",
    raw: ["\u001c=1"],
    must_fail: true,
    can_fail: false,
    canonical: None,
    expected: None,
  },
  {
    name: "0x1d as a single-character dicti" + "onary key",
    header_type: "dictionary",
    raw: ["\u001d=1"],
    must_fail: true,
    can_fail: false,
    canonical: None,
    expected: None,
  },
  {
    name: "0x1e as a single-character dicti" + "onary key",
    header_type: "dictionary",
    raw: ["\u001e=1"],
    must_fail: true,
    can_fail: false,
    canonical: None,
    expected: None,
  },
  {
    name: "0x1f as a single-character dicti" + "onary key",
    header_type: "dictionary",
    raw: ["\u001f=1"],
    must_fail: true,
    can_fail: false,
    canonical: None,
    expected: None,
  },
  {
    name: "0x20 as a single-character dicti" + "onary key",
    header_type: "dictionary",
    raw: ["=1"],
    must_fail: true,
    can_fail: false,
    canonical: None,
    expected: None,
  },
  {
    name: "0x21 as a single-character dicti" + "onary key",
    header_type: "dictionary",
    raw: ["!=1"],
    must_fail: true,
    can_fail: false,
    canonical: None,
    expected: None,
  },
  {
    name: "0x22 as a single-character dicti" + "onary key",
    header_type: "dictionary",
    raw: ["\"=1"],
    must_fail: true,
    can_fail: false,
    canonical: None,
    expected: None,
  },
  {
    name: "0x23 as a single-character dicti" + "onary key",
    header_type: "dictionary",
    raw: ["#=1"],
    must_fail: true,
    can_fail: false,
    canonical: None,
    expected: None,
  },
  {
    name: "0x24 as a single-character dicti" + "onary key",
    header_type: "dictionary",
    raw: ["$=1"],
    must_fail: true,
    can_fail: false,
    canonical: None,
    expected: None,
  },
  {
    name: "0x25 as a single-character dicti" + "onary key",
    header_type: "dictionary",
    raw: ["%=1"],
    must_fail: true,
    can_fail: false,
    canonical: None,
    expected: None,
  },
  {
    name: "0x26 as a single-character dicti" + "onary key",
    header_type: "dictionary",
    raw: ["&=1"],
    must_fail: true,
    can_fail: false,
    canonical: None,
    expected: None,
  },
  {
    name: "0x27 as a single-character dicti" + "onary key",
    header_type: "dictionary",
    raw: ["'=1"],
    must_fail: true,
    can_fail: false,
    canonical: None,
    expected: None,
  },
  {
    name: "0x28 as a single-character dicti" + "onary key",
    header_type: "dictionary",
    raw: ["(=1"],
    must_fail: true,
    can_fail: false,
    canonical: None,
    expected: None,
  },
  {
    name: "0x29 as a single-character dicti" + "onary key",
    header_type: "dictionary",
    raw: [")=1"],
    must_fail: true,
    can_fail: false,
    canonical: None,
    expected: None,
  },
]