diff --git a/src/app.rs b/src/app.rs index 05833b4..98bba6e 100644 --- a/src/app.rs +++ b/src/app.rs @@ -10,7 +10,7 @@ use futures_signals::signal::{Mutable, Signal, MutableSignalCloned, MutableLockM use termion::event::Key; use crate::input::Inputs; -use crate::schema::{API, Authentication}; +use crate::session::Session; use crate::commands::{CommandParser, Commands}; use smol::future::FutureExt; @@ -42,7 +42,7 @@ pub struct Sute<'a, S> { signal: S, inputs: Inputs, - api: Option, + session: Option, log: Logger, cmds: CommandParser<'a>, @@ -52,13 +52,13 @@ pub struct Sute<'a, S> { } impl<'a, S: Unpin> Sute<'a, S> { - pub fn new(signal: S, log: Logger, drain: Arc>, api: Option) -> Self { + pub fn new(signal: S, log: Logger, drain: Arc>, session: Option) -> Self { let inputs = Inputs::new(); let state = Mutable::new(SuteState::new()); let cmds = CommandParser::new(); let future = None; - Self { state, signal, inputs, api, log, cmds, drain, future } + Self { state, signal, inputs, session, log, cmds, drain, future } } fn run_cmd(&mut self, cmdline: String) { @@ -73,7 +73,7 @@ impl<'a, S: Unpin> Sute<'a, S> { if u.is_none() || p.is_none() { error!(self.log, "authenticate "); } else { - if let Some(mut api) = self.api.clone() { + if let Some(mut api) = self.session.as_ref().map(|s| s.bootstrap.clone()) { let log2 = self.log.clone(); info!(self.log, "Going for an auth trip"); diff --git a/src/main.rs b/src/main.rs index 88b898f..55e667a 100644 --- a/src/main.rs +++ b/src/main.rs @@ -65,7 +65,12 @@ fn main() -> Result<(), io::Error> { let resize = util::Resize::new()?; - let app = app::Sute::new(resize, log.clone(), drain.clone(), Some(api)); + let session_f = session::Session::connect(log.clone(), server); + + let mut session = smol::block_on(session_f).unwrap(); + let rpc_future = session.vat.take().unwrap(); + + let app = app::Sute::new(resize, log.clone(), drain.clone(), Some(session)); let app_state = app.get_state(); let mut ui_state = ui::UIState::new(app_state, drain); diff --git a/src/schema/mod.rs b/src/schema/mod.rs index c4dda99..790f43c 100644 --- a/src/schema/mod.rs +++ b/src/schema/mod.rs @@ -9,12 +9,15 @@ use capnp_rpc::twoparty; use capnp_rpc::RpcSystem; use capnp_rpc::rpc_twoparty_capnp::Side; +#[allow(dead_code)] mod auth_capnp { include!(concat!(env!("OUT_DIR"), "/schema/auth_capnp.rs")); } +#[allow(dead_code)] mod connection_capnp { include!(concat!(env!("OUT_DIR"), "/schema/connection_capnp.rs")); } +#[allow(dead_code)] mod api_capnp { include!(concat!(env!("OUT_DIR"), "/schema/api_capnp.rs")); } diff --git a/src/session.rs b/src/session.rs index b78f62a..5ce69f4 100644 --- a/src/session.rs +++ b/src/session.rs @@ -12,13 +12,13 @@ use slog::Logger; use crate::schema::{bootstrap, API, Authentication}; pub struct Session { - bootstrap: API, + pub bootstrap: API, authenticate: Option, - vat: Option>, + pub vat: Option>, } impl Session { - async fn connect(log: Logger, addr: A) -> Result { + pub async fn connect(log: Logger, addr: A) -> Result { let stream = TcpStream::connect(addr).await?; let (rpc_system, api) = bootstrap(log, stream);