class_docstr: Summary of diffs between two protos.
class_docstr_tok: ["Summary","of","diffs","between","two","protos","."]
docstr: Returns a string report of diffs.
  
  Additions and removals are identified by proto path. Changes in value are
  reported as path: old_value -> new_value by default, though this can be
  customized via the differencers argument.
  
  Args:
    differencers: Iterable of callable(path, proto_a, proto_b) -> str or None
      If a string is returned it is used to represent the diff between
      path.get_field(proto_a) and path.get_field(proto_b), and no further
      differencers are invoked. If None is returned by all differencers, the
      default string diff is used.
    truncate_to: Number of characters to truncate diff output values to.
      Zero, the default, means no truncation.
docstr_tok: ["Returns","a","string","report","of","diffs",".","Additions","and","removals","are","identified","by","proto","path",".","Changes","in","value","are","reported","as","path",":","old_value","-",">","new_value","by","default",",","though","this","can","be","customized","via","the","differencers","argument",".","Args",":","differencers",":","Iterable","of","callable","(","path",",","proto_a",",","proto_b",")","-",">","str","or","None","If","a","string","is","returned","it","is","used","to","represent","the","diff","between","path.get_field","(","proto_a",")","and","path.get_field","(","proto_b",")",",","and","no","further","differencers","are","invoked",".","If","None","is","returned","by","all","differencers",",","the","default","string","diff","is","used",".","truncate_to",":","Number","of","characters","to","truncate","diff","output","values","to",".","Zero",",","the","default",",","means","no","truncation","."]
code: def report(self, differencers=None, truncate_to=0):
      """Returns a string report of diffs.
  
      Additions and removals are identified by proto path. Changes in value are
      reported as path: old_value -> new_value by default, though this can be
      customized via the differencers argument.
  
      Args:
        differencers: Iterable of callable(path, proto_a, proto_b) -> str or None
          If a string is returned it is used to represent the diff between
          path.get_field(proto_a) and path.get_field(proto_b), and no further
          differencers are invoked. If None is returned by all differencers, the
          default string diff is used.
        truncate_to: Number of characters to truncate diff output values to.
          Zero, the default, means no truncation.
      """
      results = []
      for a in self._added:
          results.append("Added {}.".format(a))
  
      for r in self._removed:
          results.append("Removed {}.".format(r))
  
      for c in self._changed:
          result = None
          if differencers:
              for d in differencers:
                  result = d(c, self._proto_a, self._proto_b)
                  if result:
                      break
  
          if not result:
              result = "{} -> {}".format(
                  _truncate(c.get_field(self._proto_a), truncate_to),
                  _truncate(c.get_field(self._proto_b), truncate_to),
              )
          else:
              result = _truncate(result, truncate_to)
  
          results.append("Changed {}: {}.".format(c, result))
  
      if results:
          return "\n".join(results)
      else:
          return "No diffs."
  
imports: import deepdiff
  from google.protobuf import json_format
label_desc: Use image node_id 8 for calling the ProtoDiffs obj's underlying member method code with example usage: obj.report(differencers, truncate_to) and returns: str, str