/**
 * a datastore implementation that stores all
 * objects in a 2 level directory structure in
 * the local file system, regardless of the
 * hierarchy of the keys. Modeled after go-ds-flatfs
 */

/**
 * Given a filename (usually a long hash), derive a subdirectory name
 * @param datastore_path the path to the datastore
 * @param proposed_filename the filename to use
 * @param derived_path the complete pathname to the directory that should contain the proposed_filename
 * @param max_derived_path_length the maximum memory allocated for derived_path
 * @returns true(1) on success
 */
int ipfs_flatfs_get_directory(const char* datastore_path, const char* proposed_filename,
		char* derived_path, size_t max_derived_path_length);

/**
 * Given the proposed filename, return the acutal filename on the disk (clean the name and add .data suffix)
 * @param proposed_filename the start
 * @param derived_filename the results
 * @param max_derived_filename_length the buffer size
 * @returns true(1) on success
 */
int ipfs_flatfs_get_filename(const char* proposed_filename, char* derived_filename, size_t max_derived_filename_length);

/**
 * Combines the datastore path, the directory (derived from the filename itself), the proposed
 * filename, and the suffix (.data) to build a complete filename on the disk
 * @param datastore_path where the datastore is
 * @param proposed_filename the filename we want to use
 * @param derived_full_filename where the results will be put
 * @param max_derived_filename_length the size of memory allocated for "derived_full_filename"
 * @returns true(1) on success
 */
int ipfs_flatfs_get_full_filename(const char* datastore_path, const char* proposed_filename,
		char* derived_full_filename, size_t max_derived_filename_length);