  readKVContainerFieldSizeAndInnerTypes() {
    std::pair<std::pair<FieldType, FieldType>, uint32_t> pr;
    const auto len = readVarint<uint32_t>();
    pr.second = len;
    uint8_t byte = 0;
    if (len > 0) {
      byte = readByte();
    }
    pr.first.first = static_cast<FieldType>((byte & 0xf0) >> 4); // key-type
    pr.first.second = static_cast<FieldType>(byte & 0x0f); // value-type
    return pr;
  }
  readKVContainerFieldSizeAndInnerTypes() {
    std::pair<std::pair<FieldType, FieldType>, uint32_t> pr;
    const auto len = readVarint<uint32_t>();
    pr.second = len;
    uint8_t byte = 0;
    if (len > 0) {
      byte = readByte();
    }
    pr.first.first = static_cast<FieldType>((byte & 0xf0) >> 4);  
    pr.first.second = static_cast<FieldType>(byte & 0x0f);  
    return pr;
  }