chiark / gitweb /
mgmtchannel dyn
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Thu, 13 Aug 2020 17:31:28 +0000 (18:31 +0100)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Thu, 13 Aug 2020 17:31:28 +0000 (18:31 +0100)
src/bin/otter.rs
src/cmdlistener.rs
src/mgmtchannel.rs
src/spec.rs

index 2c4128abbb83f99e33968fd67594f48c86663e7e..31b7edad409cc7132baac2a68df3f3df31bac602 100644 (file)
@@ -178,12 +178,13 @@ fn main() {
   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(
@@ -208,7 +209,7 @@ inventory::submit!{Subcommand(
 
     let chan = connect(&mainopts)?;
 
-    eprintln!("CREATE-TABLE {:?} {:?} {:?}", &mainopts, &args, &chan);
+    eprintln!("CREATE-TABLE {:?} {:?}", &mainopts, &args);
     Ok(())
   }
 )}
index 93dd717942182a3348d7f45f62ee0440f93aebe1..47ca1d1f88bcfb3ef019f41b51388f06d5f67c24 100644 (file)
@@ -32,7 +32,7 @@ struct CommandStream<'d> {
   desc : &'d str,
   scope : Option<ManagementScope>,
   amu : Option<InstanceRef>,
-  chan : MgmtChannel<UnixStream>,
+  chan : MgmtChannel,
 }
 
 type CSE = anyhow::Error;
index 0ca3216dcc52f80c2731f92f3f584069a861a74a..efe771bb31b3d0663cdce295687efa02f63ce356 100644 (file)
@@ -9,19 +9,19 @@ pub enum MgmtChannelReadError {
 }
 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 }
   }
index 35310aab4d878f319e74b54d8f1484ec9075b4e7..d6fae933a1cdcb6ff04f4372a328e657d6b09300 100644 (file)
@@ -42,7 +42,7 @@ struct UrlOnStdout;
 
 #[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!()
   }