clientext.rs
64 lines
| 2.0 KiB
| application/rls-services+xml
|
RustLexer
Yuya Nishihara
|
r40013 | // Copyright 2018 Yuya Nishihara <yuya@tcha.org> | ||
// | ||||
// This software may be used and distributed according to the terms of the | ||||
// GNU General Public License version 2 or any later version. | ||||
//! cHg extensions to command server client. | ||||
use std::ffi::OsStr; | ||||
Yuya Nishihara
|
r40014 | use std::os::unix::ffi::OsStrExt; | ||
Yuya Nishihara
|
r40013 | use std::os::unix::io::AsRawFd; | ||
Yuya Nishihara
|
r40014 | use std::path::Path; | ||
Yuya Nishihara
|
r40013 | use tokio_hglib::{Client, Connection}; | ||
Yuya Nishihara
|
r40014 | use tokio_hglib::protocol::OneShotRequest; | ||
Yuya Nishihara
|
r40013 | |||
use super::attachio::AttachIo; | ||||
use super::message; | ||||
use super::runcommand::ChgRunCommand; | ||||
use super::uihandler::SystemHandler; | ||||
pub trait ChgClientExt<C> | ||||
where C: Connection + AsRawFd, | ||||
{ | ||||
/// Attaches the client file descriptors to the server. | ||||
fn attach_io<I, O, E>(self, stdin: I, stdout: O, stderr: E) -> AttachIo<C, I, O, E> | ||||
where I: AsRawFd, | ||||
O: AsRawFd, | ||||
E: AsRawFd; | ||||
Yuya Nishihara
|
r40014 | /// Changes the working directory of the server. | ||
fn set_current_dir<P>(self, dir: P) -> OneShotRequest<C> | ||||
where P: AsRef<Path>; | ||||
Yuya Nishihara
|
r40013 | /// Runs the specified Mercurial command with cHg extension. | ||
fn run_command_chg<I, P, H>(self, handler: H, args: I) -> ChgRunCommand<C, H> | ||||
where I: IntoIterator<Item = P>, | ||||
P: AsRef<OsStr>, | ||||
H: SystemHandler; | ||||
} | ||||
impl<C> ChgClientExt<C> for Client<C> | ||||
where C: Connection + AsRawFd, | ||||
{ | ||||
fn attach_io<I, O, E>(self, stdin: I, stdout: O, stderr: E) -> AttachIo<C, I, O, E> | ||||
where I: AsRawFd, | ||||
O: AsRawFd, | ||||
E: AsRawFd, | ||||
{ | ||||
AttachIo::with_client(self, stdin, stdout, Some(stderr)) | ||||
} | ||||
Yuya Nishihara
|
r40014 | fn set_current_dir<P>(self, dir: P) -> OneShotRequest<C> | ||
where P: AsRef<Path>, | ||||
{ | ||||
OneShotRequest::start_with_args(self, b"chdir", dir.as_ref().as_os_str().as_bytes()) | ||||
} | ||||
Yuya Nishihara
|
r40013 | fn run_command_chg<I, P, H>(self, handler: H, args: I) -> ChgRunCommand<C, H> | ||
where I: IntoIterator<Item = P>, | ||||
P: AsRef<OsStr>, | ||||
H: SystemHandler, | ||||
{ | ||||
ChgRunCommand::with_client(self, handler, message::pack_args_os(args)) | ||||
} | ||||
} | ||||