void ManyFields::serialize(carbon::CarbonProtocolWriter& writer) const {
  writer.writeStructBegin();
  writer.writeField(1 /* field id */, buf1());
  writer.writeField(2 /* field id */, buf2());
  writer.writeField(3 /* field id */, buf3());
  writer.writeField(4 /* field id */, buf4());
  writer.writeField(5 /* field id */, buf5());
  writer.writeField(6 /* field id */, buf6());
  writer.writeField(7 /* field id */, buf7());
  writer.writeField(8 /* field id */, buf8());
  writer.writeField(9 /* field id */, buf9());
  writer.writeField(10 /* field id */, buf10());
  writer.writeField(11 /* field id */, buf11());
  writer.writeField(12 /* field id */, buf12());
  writer.writeField(13 /* field id */, buf13());
  writer.writeField(14 /* field id */, buf14());
  writer.writeField(15 /* field id */, buf15());
  writer.writeField(16 /* field id */, buf16());
  writer.writeField(17 /* field id */, buf17());
  writer.writeField(18 /* field id */, buf18());
  writer.writeField(19 /* field id */, buf19());
  writer.writeField(20 /* field id */, buf20());
  writer.writeField(21 /* field id */, buf21());
  writer.writeField(22 /* field id */, buf22());
  writer.writeField(23 /* field id */, buf23());
  writer.writeField(24 /* field id */, buf24());
  writer.writeField(25 /* field id */, buf25());
  writer.writeField(26 /* field id */, buf26());
  writer.writeField(27 /* field id */, buf27());
  writer.writeField(28 /* field id */, buf28());
  writer.writeField(29 /* field id */, buf29());
  writer.writeField(30 /* field id */, buf30());
  writer.writeField(31 /* field id */, buf31());
  writer.writeField(32 /* field id */, buf32());
  writer.writeField(33 /* field id */, buf33());
  writer.writeField(34 /* field id */, buf34());
  writer.writeField(35 /* field id */, buf35());
  writer.writeField(36 /* field id */, buf36());
  writer.writeField(37 /* field id */, buf37());
  writer.writeField(38 /* field id */, buf38());
  writer.writeField(39 /* field id */, buf39());
  writer.writeField(40 /* field id */, buf40());
  writer.writeFieldStop();
  writer.writeStructEnd();
}
void StringTestCase::ScopedBuffers()
{
    // wxString relies on efficient buffers, verify they work as they should

    const char *literal = "Hello World!";

    // non-owned buffer points to the string passed to it
    wxScopedCharBuffer sbuf = wxScopedCharBuffer::CreateNonOwned(literal);
    CPPUNIT_ASSERT( sbuf.data() == literal );

    // a copy of scoped non-owned buffer still points to the same string
    wxScopedCharBuffer sbuf2(sbuf);
    CPPUNIT_ASSERT( sbuf.data() == sbuf2.data() );

    // but assigning it to wxCharBuffer makes a full copy
    wxCharBuffer buf(sbuf);
    CPPUNIT_ASSERT( buf.data() != literal );
    CPPUNIT_ASSERT_EQUAL( literal, buf.data() );

    wxCharBuffer buf2 = sbuf;
    CPPUNIT_ASSERT( buf2.data() != literal );
    CPPUNIT_ASSERT_EQUAL( literal, buf.data() );

    // Check that extending the buffer keeps it NUL-terminated.
    size_t len = 10;

    wxCharBuffer buf3(len);
    CPPUNIT_ASSERT_EQUAL('\0', buf3.data()[len]);

    wxCharBuffer buf4;
    buf4.extend(len);
    CPPUNIT_ASSERT_EQUAL('\0', buf4.data()[len]);

    wxCharBuffer buf5(5);
    buf5.extend(len);
    CPPUNIT_ASSERT_EQUAL('\0', buf5.data()[len]);
}
void ManyFields::deserialize(carbon::CarbonProtocolReader& reader) {
  reader.readStructBegin();
  while (true) {
    const auto pr = reader.readFieldHeader();
    const auto fieldType = pr.first;
    const auto fieldId = pr.second;

    if (fieldType == carbon::FieldType::Stop) {
      break;
    }

    switch (fieldId) {
      case 1: {
        reader.readField(buf1(), fieldType);
        break;
      }
      case 2: {
        reader.readField(buf2(), fieldType);
        break;
      }
      case 3: {
        reader.readField(buf3(), fieldType);
        break;
      }
      case 4: {
        reader.readField(buf4(), fieldType);
        break;
      }
      case 5: {
        reader.readField(buf5(), fieldType);
        break;
      }
      case 6: {
        reader.readField(buf6(), fieldType);
        break;
      }
      case 7: {
        reader.readField(buf7(), fieldType);
        break;
      }
      case 8: {
        reader.readField(buf8(), fieldType);
        break;
      }
      case 9: {
        reader.readField(buf9(), fieldType);
        break;
      }
      case 10: {
        reader.readField(buf10(), fieldType);
        break;
      }
      case 11: {
        reader.readField(buf11(), fieldType);
        break;
      }
      case 12: {
        reader.readField(buf12(), fieldType);
        break;
      }
      case 13: {
        reader.readField(buf13(), fieldType);
        break;
      }
      case 14: {
        reader.readField(buf14(), fieldType);
        break;
      }
      case 15: {
        reader.readField(buf15(), fieldType);
        break;
      }
      case 16: {
        reader.readField(buf16(), fieldType);
        break;
      }
      case 17: {
        reader.readField(buf17(), fieldType);
        break;
      }
      case 18: {
        reader.readField(buf18(), fieldType);
        break;
      }
      case 19: {
        reader.readField(buf19(), fieldType);
        break;
      }
      case 20: {
        reader.readField(buf20(), fieldType);
        break;
      }
      case 21: {
        reader.readField(buf21(), fieldType);
        break;
      }
      case 22: {
        reader.readField(buf22(), fieldType);
        break;
      }
      case 23: {
        reader.readField(buf23(), fieldType);
        break;
      }
      case 24: {
        reader.readField(buf24(), fieldType);
        break;
      }
      case 25: {
        reader.readField(buf25(), fieldType);
        break;
      }
      case 26: {
        reader.readField(buf26(), fieldType);
        break;
      }
      case 27: {
        reader.readField(buf27(), fieldType);
        break;
      }
      case 28: {
        reader.readField(buf28(), fieldType);
        break;
      }
      case 29: {
        reader.readField(buf29(), fieldType);
        break;
      }
      case 30: {
        reader.readField(buf30(), fieldType);
        break;
      }
      case 31: {
        reader.readField(buf31(), fieldType);
        break;
      }
      case 32: {
        reader.readField(buf32(), fieldType);
        break;
      }
      case 33: {
        reader.readField(buf33(), fieldType);
        break;
      }
      case 34: {
        reader.readField(buf34(), fieldType);
        break;
      }
      case 35: {
        reader.readField(buf35(), fieldType);
        break;
      }
      case 36: {
        reader.readField(buf36(), fieldType);
        break;
      }
      case 37: {
        reader.readField(buf37(), fieldType);
        break;
      }
      case 38: {
        reader.readField(buf38(), fieldType);
        break;
      }
      case 39: {
        reader.readField(buf39(), fieldType);
        break;
      }
      case 40: {
        reader.readField(buf40(), fieldType);
        break;
      }
      default: {
        reader.skip(fieldType);
        break;
      }
    }
  }
  reader.readStructEnd();
}