code: def structure_recursion(self, struct, folder):
          
          has_subfolder = False
          for name, substruct in struct.items():
              subfolder = os.path.join(folder, name)
              if not isinstance(substruct, dict):
                  product_name, data_name = self._url_to_props(substruct)
                  if '.' in data_name:
                      data_type = MimeType(data_name.split('.')[-1])
                      data_name = data_name.rsplit('.', 1)[0]
                  else:
                      data_type = MimeType.RAW
                  if data_name in self.bands + self.metafiles:
                      self.download_list.append(DownloadRequest(url=substruct, filename=subfolder, data_type=data_type,
                                                                data_name=data_name, product_name=product_name))
              else:
                  has_subfolder = True
                  self.structure_recursion(substruct, subfolder)
          if not has_subfolder:
              self.folder_list.append(folder)
docs: From nested dictionaries representing .SAFE structure it recursively extracts all the files that need to be
          downloaded and stores them into class attribute `download_list`.
  
          :param struct: nested dictionaries representing a part of .SAFE structure
          :type struct: dict
          :param folder: name of folder where this structure will be saved
          :type folder: str