call(sc, ma.opts, subargs).expect("execution error");
}
-type Conn = MgmtChannel<UnixStream>;
+type Conn = MgmtChannel;
-fn connect(ma: &MainOpts) -> Result<(),E> {
+#[throws(E)]
+fn connect(ma: &MainOpts) -> MgmtChannel {
let unix = UnixStream::connect(SOCKET_PATH).context("connect to server")?;
-
- todo!()
+ let chan = MgmtChannel::new(unix)?;
+ chan
}
inventory::submit!{Subcommand(
let chan = connect(&mainopts)?;
- eprintln!("CREATE-TABLE {:?} {:?} {:?}", &mainopts, &args, &chan);
+ eprintln!("CREATE-TABLE {:?} {:?}", &mainopts, &args);
Ok(())
}
)}
desc : &'d str,
scope : Option<ManagementScope>,
amu : Option<InstanceRef>,
- chan : MgmtChannel<UnixStream>,
+ chan : MgmtChannel,
}
type CSE = anyhow::Error;
}
display_as_debug!{MgmtChannelReadError}
-#[derive(Debug)]
-pub struct MgmtChannel<U : Read + Write> {
- read : io::Lines<BufReader<U>>,
- write : BufWriter<U>,
+pub struct MgmtChannel {
+ read : io::Lines<BufReader<Box<dyn Read>>>,
+ write : BufWriter<Box<dyn Write>>,
}
-impl<U: IoTryClone + Read + Write> MgmtChannel<U> {
+impl MgmtChannel {
#[throws(AE)]
- pub fn new(conn: U) -> MgmtChannel<U> {
+ pub fn new<U: IoTryClone + Read + Write + 'static>(conn: U) -> MgmtChannel {
let read = conn.try_clone().context("dup the command stream")?;
+ let read = Box::new(read) as Box<dyn Read>;
let read = BufReader::new(read);
let read = read.lines();
- let write = conn;
+ let write = Box::new(conn) as Box<dyn Write>;
let write = BufWriter::new(write);
MgmtChannel { read, write }
}
#[typetag::serde]
impl PlayerAccessSpec for UrlOnStdout {
- fn deliver_token_client(&self, conn: &mut (), nick: &str)
+ fn deliver_token_client(&self, _conn: &mut (), _nick: &str)
-> Result<(),anyhow::Error> {
todo!()
}