docs: def _process_param_value(self, value):
          """
          Returns a UTF-8 string representation of the parameter value,
          recursing into lists.
          """
          # Extract IDs from objects
          if isinstance(value, TroveboxObject):
              return str(value.id).encode('utf-8')
  
          # Ensure strings are UTF-8 encoded
          elif isinstance(value, TEXT_TYPE):
              return value.encode("utf-8")
  
          # Handle lists
          elif isinstance(value, list):
              # Make a copy of the list, to avoid overwriting the original
              new_list = list(value)
              # Process each item in the list
              for i, item in enumerate(new_list):
                  new_list[i] = self._process_param_value(item)
              # new_list elements are UTF-8 encoded strings - simply join up
              return b','.join(new_list)
  
          # Handle booleans
          elif isinstance(value, bool):
              return b"1" if value else b"0"
  
          # Unknown - just do our best
          else:
              return str(value).encode("utf-8")