Skip to content
This repository has been archived by the owner on Oct 1, 2023. It is now read-only.

Commit

Permalink
[IO] add handle copy function ( closes #44 )
Browse files Browse the repository at this point in the history
  • Loading branch information
azjezz committed Apr 2, 2020
1 parent cf23c87 commit c4350ec
Showing 1 changed file with 38 additions and 0 deletions.
38 changes: 38 additions & 0 deletions src/io/copy.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
<?hh
/*
* Copyright (c) 2004-present, Facebook, Inc.
* All rights reserved.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*
*/

namespace HH\Lib\IO;

use namespace HH\Lib\Str;

/**
* Copies content from the given $source read handle to the $target write handle
* until the eol of $source is reached.
*
* If `$chunk_size` is `null`, there is no limit on the chunk size - this function will
* copy the content of $source all at once.
*/
async function copy(
<<__AcceptDisposable>> ReadHandle $source,
<<__AcceptDisposable>> WriteHandle $target,
?int $chunk_size = null,
?float $timeout_seconds = null,
): Awaitable<bool> {
if (!$source->isEndOfFile()) {
$content = await $source->readAsync($chunk_size, $timeout_seconds);
await $target->writeAsync($content, $timeout_seconds);
}

if (!$source->isEndOfFile()) {
await copy($source, $target, $chunk_size, $timeout_seconds);
}

return true;
}

0 comments on commit c4350ec

Please sign in to comment.