docs: String parseBodyStructure(boolean includeExtension) {
          try {
              String fields = parseBodyFields();
              StringBuilder buf = new StringBuilder();
              buf.append(LB);
              if (primaryType.equalsIgnoreCase("Text")) {
                  buf.append("\"TEXT\" \"");
                  buf.append(secondaryType.toUpperCase());
                  buf.append("\" ");
                  buf.append(fields);
                  buf.append(' ');
                  buf.append(lineCount);
  
                  // is:    * 1 FETCH (BODYSTRUCTURE ("Text" "plain" NIL NIL NIL NIL    4  -1))
                  // wants: * 1 FETCH (BODYSTRUCTURE ("text" "plain" NIL NIL NIL "8bit" 6  1  NIL NIL NIL))
                  // or:    * 1 FETCH (BODYSTRUCTURE ("text" "plain" NIL NIL NIL "7bit" 28 1 NIL NIL NIL))
  
              } else if (primaryType.equalsIgnoreCase(MESSAGE) && secondaryType.equalsIgnoreCase("rfc822")) {
                  buf.append("\"MESSAGE\" \"RFC822\" ");
                  buf.append(fields).append(SP);
  //                setupLogger(parts[0]); // reset transient logger
                  buf.append(parts[0].getEnvelope()).append(SP);
                  buf.append(parts[0].getBodyStructure(false)).append(SP);
                  buf.append(lineCount);
              } else if (primaryType.equalsIgnoreCase(MULTIPART)) {
                  for (MailMessageAttributes part : parts) {
  //                    setupLogger(parts[i]); // reset transient getLogger()
                      buf.append(part.getBodyStructure(includeExtension));
                  }
                  buf.append(SP + Q).append(secondaryType).append(Q);
              } else {
                  //1. primary type -------
                  buf.append('\"');
                  buf.append(primaryType.toUpperCase());
                  buf.append('\"');
                  //2. sec type -------
                  buf.append(" \"");
                  buf.append(secondaryType.toUpperCase());
                  buf.append('\"');
                  //3. params -------
                  buf.append(' ');
                  getParameters(buf);
                  //4. body id -------
                  buf.append(' ');
                  if (null != contentID ) {
                      buf.append(Q).append(contentID).append(Q);
                  } else {
                      buf.append(NIL);
                  }
                  //5. content desc -------
                  buf.append(' ');
                  if (null != contentDesc) {
                      buf.append('\"');
                      buf.append(contentDesc);
                      buf.append('\"');
                  } else {
                      buf.append(NIL);
                  }
                  //6. encoding -------
                  buf.append(' ');
                  if (null != contentEncoding) {
                      buf.append('\"');
                      buf.append(contentEncoding);
                      buf.append('\"');
                  } else {
                      buf.append(NIL);
                  }
                  //7. size -------
                  buf.append(' ');
                  buf.append(size);
              }
  
              if (includeExtension) {
                  //extension is different for multipart and single parts
                  if (primaryType.equalsIgnoreCase(MULTIPART)) {
                      //8. ext1 params -------
                      buf.append(' ');
                      getParameters(buf);
                      //9. ext2 disposition -------
                      buf.append(' ');
                      if (null != contentDisposition) {
                          buf.append(contentDisposition);
                      } else {
                          buf.append(NIL);
                      }
                      //10. ext3 language -------
                      buf.append(' ');
                      buf.append(NIL);
                  } else {
                      // ext1 md5 -------
                      buf.append(' ');
                      buf.append(NIL);
                      // ext2 disposition -------
                      buf.append(' ');
                      if (null != contentDisposition) {
                          buf.append(contentDisposition);
                      } else {
                          buf.append(NIL);
                      }
                      //ext3 language -------
                      buf.append(' ');
                      buf.append(NIL);
                  }
              }
  
              buf.append(RB);
              return buf.toString();
          } catch (Exception e) {
              throw new IllegalStateException("Can not parse body structure", e);
          }
      }