docs: def get_resource_object_doc_lines() -> List[str]:
      """Generate documentation lines for all collected resource objects.
  
      As API documentation is generated we keep a running list of objects used
      in request parameters and responses.  This section will generate
      documentation for each object and provide an inline reference in the API
      documentation.
  
      :returns: A list of lines required to generate the documentation.
      """
      # First loop through  all resources and make sure to add any properties that
      # are objects and not already in `ALL_RESOURCES`.  We iterate over a copy
      # since we will be modifying the dict during the loop.
      for resource_name, a_type in ALL_RESOURCES.copy().items():
          for prop_a_type in a_type.properties.values():
              if issubclass(prop_a_type, Object):
                  resource_name = prop_a_type.title
                  if resource_name is None:
                      class_name = prop_a_type.__name__
                      resource_name = class_name_to_resource_name(class_name)
                  ALL_RESOURCES[resource_name] = prop_a_type
              elif (issubclass(prop_a_type, Array) and
                      prop_a_type.items is not None and
                      not isinstance(prop_a_type.items, list) and
                      issubclass(prop_a_type.items, Object)):
                  # This means the type is an array of objects, so we want to
                  # collect the object as a resource we can document later.
                  resource_name = prop_a_type.items.title
                  if resource_name is None:
                      class_name = prop_a_type.items.__name__
                      resource_name = class_name_to_resource_name(class_name)
                  ALL_RESOURCES[resource_name] = prop_a_type.items
  
      # If we don't have any resources to document, just return.
      if not ALL_RESOURCES:
          return []
  
      lines = ['Resource Objects', '----------------']
      for resource_name in sorted(ALL_RESOURCES.keys()):
          a_type = ALL_RESOURCES[resource_name]
          # First add a reference to the resource
          resource_ref = '_resource-{}'.format(
              '-'.join(resource_name.lower().split(' ')))
          lines.extend(['.. {}:'.format(resource_ref), ''])
          # Add resource name heading
          lines.extend([resource_name, '#' * len(resource_name)])
          # Add resource description
          lines.extend([a_type.description, ''])
          # Only document attributes if it has properties defined.
          if a_type.properties:
              # Add attributes documentation.
              lines.extend(['Attributes', '**********'])
              for prop in a_type.properties:
                  prop_a_type = a_type.properties[prop]
                  description = a_type.properties[prop].description.strip()
                  # Add any object reference if the property is an object or
                  # an array of objects.
                  obj_ref = ''
                  if issubclass(prop_a_type, Object):
                      obj_ref = get_object_reference(prop_a_type)
                  elif (issubclass(prop_a_type, Array) and
                          prop_a_type.items is not None and
                          not isinstance(prop_a_type.items, list) and
                          issubclass(prop_a_type.items, Object)):
                      # This means the type is an array of objects.
                      obj_ref = get_object_reference(prop_a_type.items)
                  elif (issubclass(prop_a_type, Array) and
                          prop_a_type.items is not None):
                      description += get_array_items_description(prop_a_type)
                  native_type = a_type.properties[prop].native_type.__name__
                  if prop in a_type.required:
                      description = '**Required**.  ' + description
                  lines.append('* **{}** (*{}*) - {}{}'.format(
                      prop, native_type, description, obj_ref).strip())
              lines.append('')
          # Add example of object.
          lines.extend(['Example', '*******'])
          example = a_type.get_example()
          pretty_json = json.dumps(example, separators=(',', ': '), indent=4,
                                   sort_keys=True)
          pretty_json_lines = prefix_lines(pretty_json, '   ')
          lines.extend(['.. code-block:: json', ''])
          lines.extend(pretty_json_lines)
      return lines