//! openssh sftp client, implements [sftp v3] accodring to
//! [`openssh-portable/sftp-client.c`] and provides
//! an easy-to-use highlevel API.
//!
//! All `async` functions in this module are cancel safe.
//!
//! Internally, this is archived by first writing requests into a write buffer
//! containing [`bytes::Bytes`] and then flush all buffers at once periodically
//! to archive cancel safety and improve efficiencies.
//!
//! However, cancelling the future does not actually has any effect,
//! since the requests are sent regardless of the cancellation.
//!
//! Thus, if you cancel a future that changes the remote filesystem in any way,
//! then the change would still happen regardless.
//!
//! ## Usage
//!
//! It is recommended that you use this crate with [openssh].
//!
//! You can also use this crate directly by using whatever ssh library
//! to launch the `sftp` subsystem, then pass the stdin/stdout to
//! [`Sftp::new`].
//!
//! ## Extensions
//!
//! This crate support the following extensions:
//! - limits
//! - expand path
//! - fsync
//! - hardlink
//! - posix rename
//!
//! [openssh]: https://crates.io/crates/openssh
//! [sftp v3]: https://www.openssh.com/txt/draft-ietf-secsh-filexfer-02.txt
//! [`openssh-portable/sftp-client.c`]: https://github.com/openssh/openssh-portable/blob/19b3d846f06697c85957ab79a63454f57f8e22d6/sftp-client.c
/// Changelog for this crate.
pub use ;
use openssh_sftp_client_lowlevel as lowlevel;
pub use openssh_sftp_error as error;
use BytesMut;
pub use UnixTimeStamp;
pub use Sftp;
use BoxedWaitForCancellationFuture;
pub use SftpOptions;
use MpscQueue;
use Auxiliary;
use WriteEndWithCachedId;
use OwnedHandle;
/// Module contains types for manipulating files.
/// Module contains types for manipulating directories.
/// Module contains types for manipulating metadata of files or directories.
type Buffer = BytesMut;
type WriteEnd = WriteEnd;
type ReadEnd<R> = ReadEnd;
type SharedData = SharedData;
type Id = Id;
type Data = Data;