text: /*-------------------------------------------------------------------------
   *
   * backup_manifest.h
   *	  Routines for generating a backup manifest.
   *
   * Portions Copyright (c) 2010-2022, PostgreSQL Global Development Group
   *
   * src/include/replication/backup_manifest.h
   *
   *-------------------------------------------------------------------------
   */
  #ifndef BACKUP_MANIFEST_H
  #define BACKUP_MANIFEST_H
  
  #include "common/checksum_helper.h"
  #include "pgtime.h"
  #include "replication/basebackup_sink.h"
  #include "storage/buffile.h"
  
  typedef enum manifest_option
  {
  	MANIFEST_OPTION_YES,
  	MANIFEST_OPTION_NO,
  	MANIFEST_OPTION_FORCE_ENCODE
  } backup_manifest_option;
  
  typedef struct backup_manifest_info
  {
  	BufFile    *buffile;
  	pg_checksum_type checksum_type;
  	pg_cryptohash_ctx *manifest_ctx;
  	uint64		manifest_size;
  	bool		force_encode;
  	bool		first_file;
  	bool		still_checksumming;
  } backup_manifest_info;
  
  extern void InitializeBackupManifest(backup_manifest_info *manifest,
  									 backup_manifest_option want_manifest,
  									 pg_checksum_type manifest_checksum_type);
  extern void AddFileToBackupManifest(backup_manifest_info *manifest,
  									const char *spcoid,
  									const char *pathname, size_t size,
  									pg_time_t mtime,
  									pg_checksum_context *checksum_ctx);
  extern void AddWALInfoToBackupManifest(backup_manifest_info *manifest,
  									   XLogRecPtr startptr,
  									   TimeLineID starttli, XLogRecPtr endptr,
  									   TimeLineID endtli);
  
  extern void SendBackupManifest(backup_manifest_info *manifest, bbsink *sink);
  extern void FreeBackupManifest(backup_manifest_info *manifest);
  
  #endif
  