From b6efc9b39a367da829e84af581387733600c08d7 Mon Sep 17 00:00:00 2001 From: syn Date: Mon, 25 May 2020 19:19:26 +0300 Subject: [move to typing] typed updates --- src/client.rs | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) (limited to 'src/client.rs') diff --git a/src/client.rs b/src/client.rs index 0e215f8..b105311 100644 --- a/src/client.rs +++ b/src/client.rs @@ -18,7 +18,7 @@ use crossbeam::channel::{ use uuid::Uuid; use std::collections::HashMap; use serde_json::Value as JsonValue; -use crate::update::{ UpdateRouter, Handler }; +use crate::update::Handler; use pert_types::types::Update; @@ -62,7 +62,7 @@ pub struct Client { } impl Client { - pub fn new(log_opt: Option, updater: UpdateRouter) -> Self { + pub fn new(log_opt: Option, updater: H) -> Self { if let Some(log) = log_opt { Tdlib::set_log_verbosity_level(log).ok(); } @@ -73,10 +73,11 @@ impl Client { let api_for_listener = api.clone(); let api_for_responder = api.clone(); let sender_for_responder = tx.clone(); + let rt = tokio::runtime::Handle::try_current().expect("Must be in runtime"); let _run_handle = thread::spawn( move || OneshotResponder::new(rx, api_for_responder).run( - updater, Self { sender: sender_for_responder } + updater, Self { sender: sender_for_responder }, rt ) ); let _tg_handle = thread::spawn( @@ -129,7 +130,7 @@ impl OneshotResponder { } } - fn run(&mut self, updater: UpdateRouter, client: Client) { + fn run(&mut self, updater: H, client: Client, rt: tokio::runtime::Handle) { loop { match self.rx.recv() { Ok(JoinStreams::NewRequest(fut)) => { @@ -156,7 +157,12 @@ impl OneshotResponder { Ok(val) => { let typ = val["@type"].as_str().unwrap(); if typ.starts_with("update") { - updater.dispatch(&client, val); + match serde_json::from_value(val.clone()) { + Ok(upd) => { rt.spawn(updater.handle(client.clone(), upd)); }, + Err(err) => { + error!("Could not deser update: {}, was: {}", err, val); + } + }; } else { self.handle_response(val); } -- cgit v1.2.1-18-gbd029