The ManifestWriter/ManifestListWriter API uses the std::shared_ptr<FileIO> parameter for the IO interface,
which actually should be an internal arrow::ArrowFileSystemFileIO (not publicly accessible).
It appears that only the fs() is actually utilized.
auto io = internal::checked_pointer_cast<arrow::ArrowFileSystemFileIO>(options.io);
ICEBERG_ARROW_ASSIGN_OR_RETURN(auto output, io->fs()->OpenOutputStream(options.path));