uint32_t TDebugProtocol::writeString(const string& str) {
// XXX Raw/UTF-8?
+ string to_show = str;
+ if (to_show.length() > (string::size_type)string_limit_) {
+ to_show = str.substr(0, string_prefix_size_);
+ to_show += "[...](" + boost::lexical_cast<string>(str.length()) + ")";
+ }
+
string output = "\"";
- for (string::const_iterator it = str.begin(); it != str.end(); ++it) {
+ for (string::const_iterator it = to_show.begin(); it != to_show.end(); ++it) {
if (*it == '\\') {
output += "\\";
} else if (*it == '"') {
}
uint32_t TDebugProtocol::writeBinary(const string& str) {
+ // XXX Hex?
return TDebugProtocol::writeString(str);
}
public:
TDebugProtocol(boost::shared_ptr<TTransport> trans)
: TWriteOnlyProtocol(trans, "TDebugProtocol")
+ , string_limit_(DEFAULT_STRING_LIMIT)
+ , string_prefix_size_(DEFAULT_STRING_PREFIX_SIZE)
{
write_state_.push_back(UNINIT);
}
+ static const int32_t DEFAULT_STRING_LIMIT = 256;
+ static const int32_t DEFAULT_STRING_PREFIX_SIZE = 16;
+
+ void setStringSizeLimit(int32_t string_limit) {
+ string_limit_ = string_limit;
+ }
+
+ void setStringPrefixSize(int32_t string_prefix_size) {
+ string_prefix_size_ = string_prefix_size;
+ }
+
virtual uint32_t writeMessageBegin(const std::string& name,
const TMessageType messageType,
static std::string fieldTypeName(TType type);
+ int32_t string_limit_;
+ int32_t string_prefix_size_;
+
std::string indent_str_;
static const int indent_inc = 2;