Rename xmpp client field from "inner" to "client"

[?]
Dec 31, 2018, 5:44 PM
5IKA4GO7DIMBBYB7OUF5S7N2LUWIZ5MKCCCTZCAYPZI2357MVFHAC

Dependencies

  • [2] AYQZ2UIA Update deps
  • [3] IK3YDPTY Update deps
  • [4] PVCRPP3B Some servers don't send to in initial presence
  • [5] H7R7Y3FQ Use new processing code to wait online
  • [6] QWE26TMV update deps
  • [7] 3GEU7TC7 Welcome to 2018!
  • [8] 4LRBIGVT Show info about xmpp errors
  • [9] 5OBTKGDL Update deps
  • [10] L77O4T7M Formatting and fixes
  • [11] VS6AHRWI Move XMPP to separate dir
  • [12] MAC6WCSX Fix pipelines
  • [13] ZI4GJ72V Add message to xmpp command
  • [14] BTOZT4JP Use failure
  • [15] FV6BJ5K6 Send self-presence and store account info in Rc so it willbe used in some future in parallel
  • [16] O2GM5J4F Don't split xmpp receiving and sending
  • [17] 5A5UVGNM Move receiver closing logic out of xmpp processing
  • [18] QYY3KRGL Use failure instead Box<dyn Error>
  • [19] AGIW6YR3 Use shared future for signal everywhere
  • [20] PBRUH4BJ Rename optional XmppConnection to MaybeXmppConnection
  • [21] PFC7OJQF Query roster
  • [22] TDOR5XQU Accept destination
  • [23] OGMBXBKP Move online to XmppConnection
  • [24] V5HDBSZM Use jid for receiver address
  • [25] X6L47BHQ Use different structure for established xmpp connection
  • [26] EOHEZXX3 Move request processing to structure
  • [27] HU3NZX5Z Process self-presence via new processing code
  • [28] 6E5IC33Z Try to test 2018 edition
  • [29] FVVPKFTL Initial commit
  • [30] HKSQO7JZ Enable hyper http server and configuration
  • [31] NDDQQP2P Update deps
  • [32] XGP44R5H Rework stopping xmpp connection

Change contents

  • edit in src/xmpp/stanzas.rs at line 2
    [3.57]
    [3.57]
    use xmpp_parsers::iq::Iq;
  • edit in src/xmpp/stanzas.rs at line 4
    [3.141]
    [3.141]
    use xmpp_parsers::roster::Roster;
  • edit in src/xmpp/stanzas.rs at line 14
    [3.419]
    pub fn make_get_roster(id: &str) -> Element {
    let mut get_roster = Iq::from_get(Roster {
    ver: None,
    items: vec![],
    });
    get_roster.id = Some(id.to_string());
    get_roster.into()
    }
  • edit in src/xmpp/mod.rs at line 9
    [3.434]
    [3.105]
    const ID_GET_ROSTER: &str = "id_get_roster0";
    pub struct MaybeXmppConnection {
    account: std::rc::Rc<config::Account>,
    client: Option<Client>,
    }
  • replacement in src/xmpp/mod.rs at line 19
    [3.74][2.0:77]()
    inner: Option<(stream::SplitSink<Client>, stream::SplitStream<Client>)>,
    [3.74]
    [3.126]
    client: Client,
    }
    impl From<XmppConnection> for MaybeXmppConnection {
    fn from(from: XmppConnection) -> MaybeXmppConnection {
    MaybeXmppConnection {
    account: from.account,
    client: Some(from.client),
    }
    }
  • replacement in src/xmpp/mod.rs at line 31
    [3.129][2.78:182]()
    impl XmppConnection {
    fn new(account: config::Account) -> XmppConnection {
    XmppConnection {
    [3.129]
    [3.479]
    impl MaybeXmppConnection {
    fn new(account: config::Account) -> MaybeXmppConnection {
    MaybeXmppConnection {
  • replacement in src/xmpp/mod.rs at line 35
    [3.527][3.474:499](),[3.474][3.474:499]()
    inner: None,
    [3.527]
    [3.499]
    client: None,
  • replacement in src/xmpp/mod.rs at line 40
    [3.554][2.183:282]()
    /// Error shoud be !
    fn connect<E: 'static>(self) -> impl Future<Item = Self, Error = E> {
    [3.554]
    [3.653]
    /// don't connect if stop_future resolved
    fn connect<F>(
    self,
    stop_future: F,
    ) -> impl Future<Item = XmppConnection, Error = failure::Error>
    where
    F: future::Future + Clone + 'static,
    <F as hyper::rt::Future>::Error: Into<failure::Error> + Send,
    {
  • replacement in src/xmpp/mod.rs at line 50
    [3.690][2.283:337]()
    let XmppConnection { account, inner } = self;
    [3.690]
    [3.744]
    let MaybeXmppConnection { account, client } = self;
  • replacement in src/xmpp/mod.rs at line 52
    [3.745][3.745:782](),[3.745][3.745:782](),[3.745][3.745:782](),[3.745][3.745:782](),[3.745][3.745:782](),[3.745][3.745:782](),[3.745][3.745:782](),[3.782][2.338:500]()
    if let Some(inner) = inner {
    Box::new(future::ok(XmppConnection {
    account,
    inner: Some(inner),
    })) as Box<Future<Item = _, Error = E>>
    [3.745]
    [3.944]
    if let Some(client) = client {
    Box::new(future::ok(XmppConnection { account, client }))
    as Box<Future<Item = _, Error = _>>
  • replacement in src/xmpp/mod.rs at line 56
    [3.961][2.501:1016]()
    Box::new(future::loop_fn(account, |account| {
    info!("xmpp initialization...");
    let mut res_client = Client::new(&account.jid, &account.password);
    while let Err(e) = res_client {
    error!("Cann't init xmpp client: {}", e);
    res_client = Client::new(&account.jid, &account.password);
    }
    let client = res_client.expect("Cann't init xmpp client");
    info!("xmpp initialized");
    [3.961]
    [3.1476]
    Box::new(
    stop_future
    .clone()
    .select2(
    future::loop_fn(account, move |account| {
    info!("xmpp initialization...");
    let res_client = Client::new(&account.jid, &account.password);
    match res_client {
    Err(_e) => Box::new(future::ok(future::Loop::Continue(account)))
    as Box<Future<Item = _, Error = _>>,
    Ok(client) => {
    info!("xmpp initialized");
  • replacement in src/xmpp/mod.rs at line 69
    [3.1477][2.1017:1167]()
    // future to wait for online
    Self::online(client.split(), account)
    .and_then(Self::self_presence)
    [3.1477]
    [3.2319]
    let stop_future2 = stop_future.clone();
    let stop_future3 = stop_future.clone();
    // future to wait for online
    Box::new(
    XmppConnection { client, account }
    .processing(XmppConnection::online, stop_future.clone())
    .map(|(conn, _)| conn)
    .map_err(|(acc, _)| acc)
    .and_then(|conn| conn.initial_roster(stop_future2))
    .and_then(|conn| conn.self_presence(stop_future3))
    .then(|r| match r {
    Ok(conn) => future::ok(future::Loop::Break(conn)),
    Err(acc) => future::ok(future::Loop::Continue(acc)),
    }),
    )
    }
    }
    })
    .map_err(|_: ()| ()),
    )
  • replacement in src/xmpp/mod.rs at line 91
    [3.2359][2.1168:1359]()
    Ok(conn) => future::ok(future::Loop::Break(conn)),
    Err(acc) => future::ok(future::Loop::Continue(acc)),
    })
    }))
    [3.2359]
    [3.1858]
    Ok(Either::A((_x, _b))) => future::err(format_err!("Stop XMMP connection")),
    Ok(Either::B((x, _a))) => future::ok(x),
    Err(Either::A((e, _b))) => future::err(e.into()),
    Err(Either::B((_, _a))) => {
    future::err(format_err!("Cann't initiate XMPP connection"))
    }
    }),
    )
  • edit in src/xmpp/mod.rs at line 101
    [3.2890]
    [3.2997]
    }
  • replacement in src/xmpp/mod.rs at line 103
    [3.2998][2.1360:2085](),[2.2085][3.3955:3996](),[3.2085][3.3955:3996](),[3.4611][3.3955:3996](),[3.3955][3.3955:3996](),[3.3996][2.2086:2179]()
    /// get connection and wait for online status and set presence
    /// returns error if something went wrong
    fn online(
    (sink, stream): (stream::SplitSink<Client>, stream::SplitStream<Client>),
    account: std::rc::Rc<config::Account>,
    ) -> impl Future<Item = Self, Error = std::rc::Rc<config::Account>> {
    Box::new(future::loop_fn(
    (sink, stream, account),
    |(sink, stream, account)| {
    stream.into_future().then(|r| match r {
    Ok((event, stream)) => match event {
    Some(Event::Online) => {
    info!("Online");
    future::ok(future::Loop::Break(XmppConnection {
    account,
    inner: Some((sink, stream)),
    }))
    [3.2998]
    [3.4505]
    impl XmppConnection {
    /// base XMPP processing
    fn xmpp_processing(&mut self, event: &Event) {
    info!("Incoming xmpp event: {:?}", event);
    }
    /// process event from xmpp stream
    /// returns from future when condition met
    /// or stop future was resolved
    fn processing<S, F, T, E>(
    self,
    stop_condition: S,
    stop_future: F,
    ) -> impl Future<
    Item = (Self, Result<Either<F, T>, failure::Error>),
    Error = (
    std::rc::Rc<config::Account>,
    Result<Either<F, T>, failure::Error>,
    ),
    >
    where
    F: Future<Item = T, Error = E>,
    E: Into<failure::Error>,
    S: FnMut(&mut Self, Event) -> Result<bool, failure::Error>,
    {
    future::loop_fn(
    (self, stop_future, stop_condition),
    |(xmpp, stop_future, mut stop_condition)| {
    let XmppConnection { client, account } = xmpp;
    client.into_future().select2(stop_future).then(|r| match r {
    Ok(Either::A(((event, client), b))) => {
    if let Some(event) = event {
    let mut xmpp = XmppConnection { client, account };
    xmpp.xmpp_processing(&event);
    match stop_condition(&mut xmpp, event) {
    Ok(true) => {
    future::ok(future::Loop::Break((xmpp, Ok(Either::A(b)))))
    }
    Ok(false) => {
    future::ok(future::Loop::Continue((xmpp, b, stop_condition)))
    }
    Err(e) => future::err((xmpp.account, Err(e))),
    }
    } else {
    future::err((account, Ok(Either::A(b))))
  • replacement in src/xmpp/mod.rs at line 149
    [3.4531][2.2180:2379]()
    Some(Event::Stanza(s)) => {
    info!("xmpp stanza: {:?}", s);
    future::ok(future::Loop::Continue((sink, stream, account)))
    [3.4531]
    [3.4974]
    }
    Ok(Either::B((t, a))) => {
    if let Some(client) = a.into_inner() {
    future::ok(future::Loop::Break((
    XmppConnection { client, account },
    Ok(Either::B(t)),
    )))
    } else {
    future::err((account, Ok(Either::B(t))))
  • replacement in src/xmpp/mod.rs at line 159
    [3.5000][2.2380:2511]()
    _ => {
    warn!("Disconnected");
    future::err(account)
    [3.5000]
    [3.5513]
    }
    Err(Either::A((_e, b))) => future::err((account, Ok(Either::A(b)))),
    Err(Either::B((e, a))) => {
    if let Some(client) = a.into_inner() {
    future::ok(future::Loop::Break((
    XmppConnection { client, account },
    Err(e.into()),
    )))
    } else {
    future::err((account, Err(e.into())))
  • edit in src/xmpp/mod.rs at line 170
    [3.5539][2.2512:2678]()
    },
    Err((e, _)) => {
    error!("xmpp receive error: {}", e);
    future::err(account)
  • replacement in src/xmpp/mod.rs at line 173
    [3.5595][2.2679:2690]()
    ))
    [3.5595]
    [3.3349]
    )
  • replacement in src/xmpp/mod.rs at line 176
    [3.3356][2.2691:2924]()
    fn self_presence(self) -> impl Future<Item = Self, Error = std::rc::Rc<config::Account>> {
    let XmppConnection { account, inner } = self;
    if let Some((sink, stream)) = inner {
    use tokio::prelude::Sink;
    [3.3356]
    [3.3693]
    /// get connection and wait for online status and set presence
    /// returns error if something went wrong
    fn online(&mut self, event: Event) -> Result<bool, failure::Error> {
    match event {
    Event::Online => {
    info!("Online!");
    Ok(true)
    }
    Event::Stanza(s) => {
    warn!("Stanza before online: {:?}", s);
    Ok(false)
    }
    _ => {
    error!("Disconnected while online");
    Err(format_err!("Disconnected while online"))
    }
    }
    }
  • replacement in src/xmpp/mod.rs at line 195
    [3.3694][2.2925:4798]()
    let presence = stanzas::make_presence(&account);
    info!("Sending presence...");
    Box::new(
    sink.send(presence)
    .map_err(|e| {
    error!("Error on send self-presence: {}", e);
    "Cann't send self-presence".to_owned()
    })
    .join(
    future::loop_fn((account.clone(), stream), |(account, stream)| {
    stream
    .into_future()
    .map_err(|(e, _)| {
    error!("Error on reading self-presence: {}", e);
    "Cann't read self-presence".to_owned()
    })
    .and_then(|(event, stream)| match event {
    Some(event) => {
    if let tokio_xmpp::Event::Stanza(e) = event {
    info!("Get stanza: {:?}", e);
    if e.name() == "presence"
    && e.attr("from")
    .map_or(false, |f| f == account.jid)
    && e.attr("to").map_or(false, |f| f == account.jid)
    {
    info!("Self presence");
    future::ok(future::Loop::Break(stream))
    } else {
    future::ok(future::Loop::Continue((
    account, stream,
    )))
    [3.3694]
    [3.2496]
    fn process_initial_roster(&mut self, event: Event) -> Result<bool, failure::Error> {
    if let Event::Stanza(s) = event {
    use try_from::TryInto;
    match s.try_into() as Result<xmpp_parsers::iq::Iq, _> {
    Ok(iq) => {
    if let Some(id) = iq.id {
    if id == ID_GET_ROSTER {
    match iq.payload {
    xmpp_parsers::iq::IqType::Error(_e) => {
    Err(format_err!("Get error instead of roster"))
    }
    xmpp_parsers::iq::IqType::Result(Some(result)) => {
    match result.try_into()
    as Result<xmpp_parsers::roster::Roster, _>
    {
    Ok(roster) => {
    info!("Got roster:");
    for i in roster.items {
    info!(" >>> {:?}", i);
  • replacement in src/xmpp/mod.rs at line 215
    [3.2542][3.2542:2591](),[3.2542][3.2542:2591](),[3.2591][2.4799:4885]()
    } else {
    future::err("Got wrong event".to_owned())
    [3.2542]
    [3.2645]
    Ok(true)
  • edit in src/xmpp/mod.rs at line 217
    [3.2687]
    [3.2813]
    Err(e) => Err(format_err!("Cann't parse roster: {}", e)),
  • replacement in src/xmpp/mod.rs at line 219
    [3.2851][2.4886:5337]()
    None => future::err("Got closed stream".to_owned()),
    })
    })
    .map_err(|e| format!("waiting self-presence: {}", e)),
    )
    .then(|r| match r {
    Err(e) => {
    error!("Self-presence waiting error: {}", e);
    future::err(account)
    [3.2851]
    [3.5558]
    }
    _ => Err(format_err!("Unknown result of roster")),
    }
    } else {
    Ok(false)
  • replacement in src/xmpp/mod.rs at line 225
    [3.5584][2.5338:5554]()
    Ok(inner) => future::ok(XmppConnection {
    account,
    inner: Some(inner),
    }),
    }),
    )
    [3.5584]
    [2.5554]
    } else {
    Err(format_err!("Iq stanza without id"))
    }
    }
    Err(_e) => Ok(false),
    }
  • replacement in src/xmpp/mod.rs at line 232
    [2.5571][2.5571:5710]()
    warn!("Don't gen connection on self-presence");
    Box::new(future::err(account)) as Box<Future<Item = _, Error = _>>
    [2.5571]
    [2.5710]
    Err(format_err!("Wrong event while waiting roster"))
  • edit in src/xmpp/mod.rs at line 234
    [2.5720]
    [3.3783]
    }
    fn initial_roster<F, E>(
    self,
    stop_future: F,
    ) -> impl Future<Item = Self, Error = std::rc::Rc<config::Account>>
    where
    F: Future<Error = E>,
    E: Into<failure::Error>,
    {
    let XmppConnection { account, client } = self;
    use tokio::prelude::Sink;
    let get_roster = stanzas::make_get_roster(ID_GET_ROSTER);
    let account2 = account.clone();
    info!("Quering roster... {:?}", get_roster);
    client
    .send(get_roster)
    .map_err(move |e| {
    error!("Error on querying roster: {}", e);
    (account2, Err(failure::SyncFailure::new(e).into()))
    })
    .and_then(move |client| {
    XmppConnection { client, account }
    .processing(XmppConnection::process_initial_roster, stop_future)
    })
    .then(|r| match r {
    Err((account, e)) => {
    error!(
    "Cann't wait roster: {}",
    e.err().map_or_else(
    || std::borrow::Cow::Borrowed("None"),
    |e| e.to_string().into()
    )
    );
    future::err(account)
    }
    Ok((conn, _)) => future::ok(conn),
    })
  • edit in src/xmpp/mod.rs at line 275
    [3.3789]
    [3.3789]
    fn self_presence<F, E>(
    self,
    stop_future: F,
    ) -> impl Future<Item = Self, Error = std::rc::Rc<config::Account>>
    where
    F: Future<Error = E>,
    E: Into<failure::Error>,
    {
    let XmppConnection { account, client } = self;
    use tokio::prelude::Sink;
    let presence = stanzas::make_presence(&account);
    let account2 = account.clone();
    info!("Sending presence... {:?}", presence);
    client
    .send(presence)
    .map_err(|e| {
    error!("Error on send self-presence: {}", e);
    (account2, Err(failure::SyncFailure::new(e).into()))
    })
    .and_then(move |client| {
    XmppConnection { client, account }.processing(
    move |conn, event| {
    if let Event::Stanza(s) = event {
    if s.name() == "presence"
    && s.attr("from").map_or(false, |f| f == conn.account.jid)
    && s.attr("to").map_or(false, |f| f == conn.account.jid)
    {
    Ok(true)
    } else {
    Ok(false)
    }
    } else {
    Err(format_err!("Wrong event while waiting self-presence"))
    }
    },
    stop_future,
    )
    })
    .then(|r| match r {
    Err((account, _e)) => {
    error!("Cann't wait self-presence");
    future::err(account)
    }
    Ok((conn, _)) => future::ok(conn),
    })
    }
  • replacement in src/xmpp/mod.rs at line 332
    [3.3891][2.5746:5772]()
    conn: XmppConnection,
    [3.3891]
    [3.3917]
    conn: MaybeXmppConnection,
  • replacement in src/xmpp/mod.rs at line 336
    [3.133][2.5773:5851]()
    fn new(cmd_recv: S, signal: F, conn: XmppConnection) -> XmppState<F, S> {
    [3.133]
    [3.4038]
    fn new(cmd_recv: S, signal: F, conn: MaybeXmppConnection) -> XmppState<F, S> {
  • replacement in src/xmpp/mod.rs at line 351
    [3.4311][2.5852:5896]()
    F: future::Future<Item = ()> + 'static,
    [3.4311]
    [3.465]
    F: future::Future + Clone + 'static,
    <F as hyper::rt::Future>::Error: std::fmt::Display + Into<failure::Error> + Send,
  • replacement in src/xmpp/mod.rs at line 355
    [3.4357][2.5897:6018]()
    let signal = signal.map_err(|_| format_err!("Wrong shutdown signal"));
    let conn = XmppConnection::new(account);
    [3.4357]
    [3.4526]
    let conn = MaybeXmppConnection::new(account);
  • replacement in src/xmpp/mod.rs at line 363
    [3.4692][2.6019:6088]()
    signal
    .select2(conn.connect().and_then(|conn| {
    [3.4692]
    [3.4761]
    conn.connect(signal.clone())
    .and_then(|conn| {
  • replacement in src/xmpp/mod.rs at line 372
    [3.675][2.6089:6145]()
    .map(|f| (f, conn))
    }))
    [3.675]
    [3.731]
    .map(|(cmd, cmd_recv)| (cmd, cmd_recv, conn))
    })
  • replacement in src/xmpp/mod.rs at line 376
    [3.5146][2.6146:6841](),[2.6841][3.6239:6261](),[3.6779][3.6239:6261](),[3.6239][3.6239:6261](),[3.6261][2.6842:7148]()
    Ok(Either::A((_x, b))) => {
    info!("Got signal");
    // got signal, breaks
    Box::new(b.map(|b| future::Loop::Break((Some((b.0).1), b.1))))
    as Box<Future<Item = _, Error = _>>
    }
    Ok(Either::B((x, a))) => {
    info!("Got cmd");
    // got cmd, continue
    Box::new(future::ok(future::Loop::Continue(XmppState::new(
    (x.0).1,
    a,
    x.1,
    )))) as Box<Future<Item = _, Error = _>>
    }
    Err(Either::A((e, b))) => {
    // got signal error, breaks
    error!("Signal error: {}", e);
    Box::new(b.map(|b| future::Loop::Break((Some((b.0).1), b.1))))
    as Box<Future<Item = _, Error = _>>
    [3.5146]
    [2.7148]
    Ok((cmd, cmd_recv, conn)) => {
    if let Some(_cmd) = cmd {
    info!("Got cmd");
    // got cmd, continue
    future::ok(future::Loop::Continue(XmppState::new(
    cmd_recv,
    signal,
    conn.into(),
    )))
    } else {
    future::ok(future::Loop::Break((None, conn.into())))
    }
  • replacement in src/xmpp/mod.rs at line 389
    [2.7170][2.7170:7219]()
    Err(Either::B((e, _a))) => {
    [2.7170]
    [3.6240]
    Err(e) => {
  • replacement in src/xmpp/mod.rs at line 392
    [3.6342][2.7220:7356]()
    Box::new(future::err(format_err!("Cmd error")))
    as Box<Future<Item = _, Error = _>>
    [3.6342]
    [3.6572]
    future::err(e)
  • replacement in src/xmpp/mod.rs at line 397
    [3.900][2.7357:7426]()
    .and_then(|(opt_cmd_recv, _conn): (Option<S>, XmppConnection)| {
    [3.900]
    [3.969]
    .and_then(|(opt_cmd_recv, _conn): (Option<S>, MaybeXmppConnection)| {
  • replacement in src/xmpp/mod.rs at line 407
    [3.1354][2.7427:7495]()
    Box::new(future::err(format_err!("cmd receiver gone")))
    [3.1354]
    [3.1422]
    Box::new(future::ok(()))
  • replacement in src/main.rs at line 63
    [3.4954][2.7556:7622]()
    .map_err(|e| error!("Cann't get CTRL+C signal: {}", e.0))
    [3.4954]
    [3.5020]
    .map_err(|e| {
    error!("Cann't get CTRL+C signal: {}", e.0);
    e.0
    })
  • replacement in src/main.rs at line 100
    [3.6389][2.8404:8551]()
    let result = ctrt.block_on(xmpp_process(
    ctrl_c.clone().map(|_| ()),
    recv,
    config.account,
    ));
    [3.6389]
    [3.6536]
    let result = ctrt.block_on(xmpp_process(ctrl_c.clone(), recv, config.account));
  • edit in Cargo.toml at line 23
    [3.7111]
    [2.8552]
    try_from = "=0.2.2" # dependency of xmpp-parsers
  • edit in Cargo.lock at line 0
    [3.12201][3.9879:10088]()
    [[package]]
    name = "MacTypes-sys"
    version = "1.3.0"
    source = "registry+https://github.com/rust-lang/crates.io-index"
    dependencies = [
    "libc 0.2.45 (registry+https://github.com/rust-lang/crates.io-index)",
    ]
  • replacement in Cargo.lock at line 5
    [3.7247][3.10089:10162]()
    "memchr 2.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
    [3.7247]
    [3.7320]
    "memchr 2.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
  • replacement in Cargo.lock at line 18
    [3.7561][3.10163:10181]()
    version = "0.3.7"
    [3.7561]
    [3.7579]
    version = "0.3.6"
  • replacement in Cargo.lock at line 28
    [3.7789][3.10182:10201]()
    version = "0.4.10"
    [3.7789]
    [3.7807]
    version = "0.4.8"
  • replacement in Cargo.lock at line 39
    [3.8093][3.10202:10274]()
    "libc 0.2.45 (registry+https://github.com/rust-lang/crates.io-index)",
    [3.8093]
    [3.8165]
    "libc 0.2.44 (registry+https://github.com/rust-lang/crates.io-index)",
  • edit in Cargo.lock at line 43
    [3.8136][3.8314:8327](),[3.5506][3.8314:8327](),[3.8314][3.8314:8327](),[3.8327][3.10275:10375]()
    [[package]]
    name = "autocfg"
    version = "0.1.1"
    source = "registry+https://github.com/rust-lang/crates.io-index"
  • replacement in Cargo.lock at line 49
    [3.8446][3.10389:10470]()
    "backtrace-sys 0.1.28 (registry+https://github.com/rust-lang/crates.io-index)",
    [3.8446]
    [3.8527]
    "backtrace-sys 0.1.24 (registry+https://github.com/rust-lang/crates.io-index)",
  • replacement in Cargo.lock at line 53
    [3.8757][3.10471:10625]()
    "libc 0.2.45 (registry+https://github.com/rust-lang/crates.io-index)",
    "rustc-demangle 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)",
    [3.8757]
    [3.8910]
    "libc 0.2.44 (registry+https://github.com/rust-lang/crates.io-index)",
    "rustc-demangle 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)",
  • replacement in Cargo.lock at line 60
    [3.9017][3.10626:10645]()
    version = "0.3.13"
    [3.9017]
    [3.9035]
    version = "0.3.9"
  • replacement in Cargo.lock at line 63
    [3.9117][3.10646:10801]()
    "autocfg 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
    "backtrace-sys 0.1.28 (registry+https://github.com/rust-lang/crates.io-index)",
    [3.9117]
    [3.9198]
    "backtrace-sys 0.1.24 (registry+https://github.com/rust-lang/crates.io-index)",
  • replacement in Cargo.lock at line 65
    [3.9271][3.10802:10956]()
    "libc 0.2.45 (registry+https://github.com/rust-lang/crates.io-index)",
    "rustc-demangle 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)",
    [3.9271]
    [3.9424]
    "libc 0.2.44 (registry+https://github.com/rust-lang/crates.io-index)",
    "rustc-demangle 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)",
  • replacement in Cargo.lock at line 72
    [3.9535][3.10957:10976]()
    version = "0.1.28"
    [3.9535]
    [3.9554]
    version = "0.1.24"
  • replacement in Cargo.lock at line 75
    [3.9636][3.10977:11119]()
    "cc 1.0.28 (registry+https://github.com/rust-lang/crates.io-index)",
    "libc 0.2.45 (registry+https://github.com/rust-lang/crates.io-index)",
    [3.9636]
    [3.9778]
    "cc 1.0.25 (registry+https://github.com/rust-lang/crates.io-index)",
    "libc 0.2.44 (registry+https://github.com/rust-lang/crates.io-index)",
  • replacement in Cargo.lock at line 138
    [3.11467][3.11120:11139]()
    version = "1.0.28"
    [3.11467]
    [3.11486]
    version = "1.0.25"
  • replacement in Cargo.lock at line 153
    [3.11948][3.11140:11212]()
    "time 0.1.41 (registry+https://github.com/rust-lang/crates.io-index)",
    [3.11948]
    [3.12020]
    "time 0.1.40 (registry+https://github.com/rust-lang/crates.io-index)",
  • replacement in Cargo.lock at line 189
    [3.13233][3.11213:11285]()
    "libc 0.2.45 (registry+https://github.com/rust-lang/crates.io-index)",
    [3.13233]
    [3.13305]
    "libc 0.2.44 (registry+https://github.com/rust-lang/crates.io-index)",
  • replacement in Cargo.lock at line 197
    [3.13449][3.11286:11358]()
    "libc 0.2.45 (registry+https://github.com/rust-lang/crates.io-index)",
    [3.13449]
    [3.13521]
    "libc 0.2.44 (registry+https://github.com/rust-lang/crates.io-index)",
  • replacement in Cargo.lock at line 202
    [3.13561][3.11359:11377]()
    version = "0.6.3"
    [3.13561]
    [3.13579]
    version = "0.6.2"
  • replacement in Cargo.lock at line 205
    [3.13661][3.11378:11542]()
    "crossbeam-epoch 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
    "crossbeam-utils 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)",
    [3.13661]
    [3.13825]
    "crossbeam-epoch 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)",
    "crossbeam-utils 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)",
  • replacement in Cargo.lock at line 211
    [3.13865][3.11543:11561]()
    version = "0.7.0"
    [3.13865]
    [3.13883]
    version = "0.6.1"
  • replacement in Cargo.lock at line 214
    [3.13965][3.11562:11638]()
    "arrayvec 0.4.10 (registry+https://github.com/rust-lang/crates.io-index)",
    [3.13965]
    [3.14040]
    "arrayvec 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
  • replacement in Cargo.lock at line 216
    [3.14113][3.11639:11721]()
    "crossbeam-utils 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)",
    [3.14113]
    [3.14195]
    "crossbeam-utils 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)",
  • replacement in Cargo.lock at line 224
    [3.14466][3.11722:11740]()
    version = "0.6.3"
    [3.14466]
    [3.14484]
    version = "0.6.1"
  • replacement in Cargo.lock at line 268
    [3.15825][3.11741:11760]()
    version = "0.8.13"
    [3.15825]
    [3.15844]
    version = "0.8.12"
  • replacement in Cargo.lock at line 282
    [3.16352][3.11761:11833]()
    "regex 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
    [3.16352]
    [3.16424]
    "regex 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)",
  • replacement in Cargo.lock at line 299
    [3.16849][3.11834:11911]()
    "backtrace 0.3.13 (registry+https://github.com/rust-lang/crates.io-index)",
    [3.16849]
    [3.16925]
    "backtrace 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)",
  • replacement in Cargo.lock at line 307
    [3.17057][3.11912:11989]()
    "backtrace 0.3.13 (registry+https://github.com/rust-lang/crates.io-index)",
    [3.17057]
    [3.6489]
    "backtrace 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)",
  • replacement in Cargo.lock at line 318
    [3.17505][3.11990:12062]()
    "syn 0.15.23 (registry+https://github.com/rust-lang/crates.io-index)",
    [3.17505]
    [3.17577]
    "syn 0.15.22 (registry+https://github.com/rust-lang/crates.io-index)",
  • replacement in Cargo.lock at line 379
    [3.19271][3.12063:12138]()
    "num_cpus 1.9.0 (registry+https://github.com/rust-lang/crates.io-index)",
    [3.19271]
    [3.19346]
    "num_cpus 1.8.0 (registry+https://github.com/rust-lang/crates.io-index)",
  • replacement in Cargo.lock at line 412
    [3.20551][3.12139:12211]()
    "libc 0.2.45 (registry+https://github.com/rust-lang/crates.io-index)",
    [3.20551]
    [3.20623]
    "libc 0.2.44 (registry+https://github.com/rust-lang/crates.io-index)",
  • replacement in Cargo.lock at line 441
    [3.21397][3.12212:12232]()
    version = "0.12.19"
    [3.21397]
    [3.21417]
    version = "0.12.17"
  • replacement in Cargo.lock at line 454
    [3.22231][3.12233:12305]()
    "time 0.1.41 (registry+https://github.com/rust-lang/crates.io-index)",
    [3.22231]
    [3.22303]
    "time 0.1.40 (registry+https://github.com/rust-lang/crates.io-index)",
  • replacement in Cargo.lock at line 485
    [3.23535][3.12306:12378]()
    "libc 0.2.45 (registry+https://github.com/rust-lang/crates.io-index)",
    [3.23535]
    [3.23607]
    "libc 0.2.44 (registry+https://github.com/rust-lang/crates.io-index)",
  • replacement in Cargo.lock at line 542
    [3.25316][3.12379:12398]()
    version = "0.2.45"
    [3.25316]
    [3.25335]
    version = "0.2.44"
  • replacement in Cargo.lock at line 582
    [3.26368][3.12399:12417]()
    version = "0.7.5"
    [3.26368]
    [3.26386]
    version = "0.7.3"
  • replacement in Cargo.lock at line 587
    [3.26618][3.12418:12571](),[3.12571][2.8554:8632]()
    "serde 1.0.83 (registry+https://github.com/rust-lang/crates.io-index)",
    "serde_derive 1.0.83 (registry+https://github.com/rust-lang/crates.io-index)",
    "serde_json 1.0.34 (registry+https://github.com/rust-lang/crates.io-index)",
    [3.26618]
    [3.26849]
    "serde 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)",
    "serde_derive 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)",
    "serde_json 1.0.33 (registry+https://github.com/rust-lang/crates.io-index)",
  • replacement in Cargo.lock at line 592
    [3.27015][3.12572:12646]()
    "tendril 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)",
    [3.27015]
    [3.27089]
    "tendril 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
  • replacement in Cargo.lock at line 602
    [3.27233][3.12647:12665]()
    version = "2.1.2"
    [3.27233]
    [3.27251]
    version = "2.1.1"
  • replacement in Cargo.lock at line 606
    [3.27406][3.12666:12738]()
    "libc 0.2.45 (registry+https://github.com/rust-lang/crates.io-index)",
    [3.27406]
    [3.27478]
    "libc 0.2.44 (registry+https://github.com/rust-lang/crates.io-index)",
  • replacement in Cargo.lock at line 635
    [3.28558][3.12739:12811]()
    "libc 0.2.45 (registry+https://github.com/rust-lang/crates.io-index)",
    [3.28558]
    [3.28630]
    "libc 0.2.44 (registry+https://github.com/rust-lang/crates.io-index)",
  • replacement in Cargo.lock at line 649
    [3.29191][3.12812:12884]()
    "libc 0.2.45 (registry+https://github.com/rust-lang/crates.io-index)",
    [3.29191]
    [3.29263]
    "libc 0.2.44 (registry+https://github.com/rust-lang/crates.io-index)",
  • replacement in Cargo.lock at line 670
    [3.29977][3.12885:12957]()
    "libc 0.2.45 (registry+https://github.com/rust-lang/crates.io-index)",
    [3.29977]
    [3.30049]
    "libc 0.2.44 (registry+https://github.com/rust-lang/crates.io-index)",
  • replacement in Cargo.lock at line 672
    [3.30119][3.12958:13034]()
    "openssl 0.10.16 (registry+https://github.com/rust-lang/crates.io-index)",
    [3.30119]
    [3.30195]
    "openssl 0.10.15 (registry+https://github.com/rust-lang/crates.io-index)",
  • replacement in Cargo.lock at line 674
    [3.30275][3.13035:13114]()
    "openssl-sys 0.9.40 (registry+https://github.com/rust-lang/crates.io-index)",
    [3.30275]
    [3.30354]
    "openssl-sys 0.9.39 (registry+https://github.com/rust-lang/crates.io-index)",
  • replacement in Cargo.lock at line 677
    [3.30515][3.13115:13204]()
    "security-framework-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
    [3.30515]
    [3.30604]
    "security-framework-sys 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
  • replacement in Cargo.lock at line 687
    [3.30882][3.13205:13277]()
    "libc 0.2.45 (registry+https://github.com/rust-lang/crates.io-index)",
    [3.30882]
    [3.30954]
    "libc 0.2.44 (registry+https://github.com/rust-lang/crates.io-index)",
  • replacement in Cargo.lock at line 719
    [3.31727][3.13278:13296]()
    version = "1.9.0"
    [3.31727]
    [3.31745]
    version = "1.8.0"
  • replacement in Cargo.lock at line 722
    [3.31827][3.13297:13369]()
    "libc 0.2.45 (registry+https://github.com/rust-lang/crates.io-index)",
    [3.31827]
    [3.31899]
    "libc 0.2.44 (registry+https://github.com/rust-lang/crates.io-index)",
  • replacement in Cargo.lock at line 727
    [3.31931][3.13370:13390]()
    version = "0.10.16"
    [3.31931]
    [3.31951]
    version = "0.10.15"
  • replacement in Cargo.lock at line 734
    [3.32339][3.13391:13542]()
    "libc 0.2.45 (registry+https://github.com/rust-lang/crates.io-index)",
    "openssl-sys 0.9.40 (registry+https://github.com/rust-lang/crates.io-index)",
    [3.32339]
    [3.32490]
    "libc 0.2.44 (registry+https://github.com/rust-lang/crates.io-index)",
    "openssl-sys 0.9.39 (registry+https://github.com/rust-lang/crates.io-index)",
  • replacement in Cargo.lock at line 745
    [3.32645][3.13543:13562]()
    version = "0.9.40"
    [3.32645]
    [3.32664]
    version = "0.9.39"
  • replacement in Cargo.lock at line 748
    [3.32746][3.13563:13705]()
    "cc 1.0.28 (registry+https://github.com/rust-lang/crates.io-index)",
    "libc 0.2.45 (registry+https://github.com/rust-lang/crates.io-index)",
    [3.32746]
    [3.32888]
    "cc 1.0.25 (registry+https://github.com/rust-lang/crates.io-index)",
    "libc 0.2.44 (registry+https://github.com/rust-lang/crates.io-index)",
  • replacement in Cargo.lock at line 776
    [3.33693][3.13706:13778]()
    "libc 0.2.45 (registry+https://github.com/rust-lang/crates.io-index)",
    [3.33693]
    [3.33765]
    "libc 0.2.44 (registry+https://github.com/rust-lang/crates.io-index)",
  • replacement in Cargo.lock at line 779
    [3.33916][3.13779:13854]()
    "smallvec 0.6.7 (registry+https://github.com/rust-lang/crates.io-index)",
    [3.33916]
    [3.33991]
    "smallvec 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)",
  • replacement in Cargo.lock at line 850
    [3.35895][3.13855:13934]()
    "encoding_rs 0.8.13 (registry+https://github.com/rust-lang/crates.io-index)",
    [3.35895]
    [3.8846]
    "encoding_rs 0.8.12 (registry+https://github.com/rust-lang/crates.io-index)",
  • replacement in Cargo.lock at line 853
    [3.36118][3.13935:14008]()
    "memchr 2.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
    [3.36118]
    [3.36191]
    "memchr 2.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
  • replacement in Cargo.lock at line 875
    [3.36723][3.14009:14081]()
    "libc 0.2.45 (registry+https://github.com/rust-lang/crates.io-index)",
    [3.36723]
    [3.36795]
    "libc 0.2.44 (registry+https://github.com/rust-lang/crates.io-index)",
  • replacement in Cargo.lock at line 886
    [3.37153][3.14082:14154]()
    "libc 0.2.45 (registry+https://github.com/rust-lang/crates.io-index)",
    [3.37153]
    [3.37225]
    "libc 0.2.44 (registry+https://github.com/rust-lang/crates.io-index)",
  • replacement in Cargo.lock at line 898
    [3.37648][3.14155:14227]()
    "libc 0.2.45 (registry+https://github.com/rust-lang/crates.io-index)",
    [3.37648]
    [3.37720]
    "libc 0.2.44 (registry+https://github.com/rust-lang/crates.io-index)",
  • replacement in Cargo.lock at line 966
    [3.39910][3.14228:14247]()
    version = "0.1.44"
    [3.39910]
    [3.39929]
    version = "0.1.43"
  • replacement in Cargo.lock at line 974
    [3.40130][3.14248:14329]()
    "redox_syscall 0.1.44 (registry+https://github.com/rust-lang/crates.io-index)",
    [3.40130]
    [3.40211]
    "redox_syscall 0.1.43 (registry+https://github.com/rust-lang/crates.io-index)",
  • replacement in Cargo.lock at line 979
    [3.40241][3.14330:14348]()
    version = "1.1.0"
    [3.40241]
    [3.40259]
    version = "1.0.6"
  • replacement in Cargo.lock at line 983
    [3.40420][3.14349:14501]()
    "memchr 2.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
    "regex-syntax 0.6.4 (registry+https://github.com/rust-lang/crates.io-index)",
    [3.40420]
    [3.40572]
    "memchr 2.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
    "regex-syntax 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)",
  • replacement in Cargo.lock at line 991
    [3.40766][3.14502:14520]()
    version = "0.6.4"
    [3.40766]
    [3.40784]
    version = "0.6.3"
  • replacement in Cargo.lock at line 1016
    [3.41481][3.14521:14540]()
    version = "0.1.11"
    [3.41481]
    [3.41499]
    version = "0.1.9"
  • replacement in Cargo.lock at line 1043
    [3.42197][3.14541:14617]()
    "openssl 0.10.16 (registry+https://github.com/rust-lang/crates.io-index)",
    [3.42197]
    [3.42273]
    "openssl 0.10.15 (registry+https://github.com/rust-lang/crates.io-index)",
  • replacement in Cargo.lock at line 1067
    [3.42985][3.14618:14779]()
    "libc 0.2.45 (registry+https://github.com/rust-lang/crates.io-index)",
    "security-framework-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
    [3.42985]
    [3.43146]
    "libc 0.2.44 (registry+https://github.com/rust-lang/crates.io-index)",
    "security-framework-sys 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
  • replacement in Cargo.lock at line 1073
    [3.43193][3.14780:14798]()
    version = "0.2.2"
    [3.43193]
    [3.43211]
    version = "0.2.1"
  • edit in Cargo.lock at line 1076
    [3.43293][3.14799:14878]()
    "MacTypes-sys 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
  • replacement in Cargo.lock at line 1077
    [3.43379][3.14879:14951]()
    "libc 0.2.45 (registry+https://github.com/rust-lang/crates.io-index)",
    [3.43379]
    [3.43451]
    "libc 0.2.44 (registry+https://github.com/rust-lang/crates.io-index)",
  • replacement in Cargo.lock at line 1100
    [3.9931][3.14952:15026]()
    "hyper 0.12.19 (registry+https://github.com/rust-lang/crates.io-index)",
    [3.9931]
    [3.44129]
    "hyper 0.12.17 (registry+https://github.com/rust-lang/crates.io-index)",
  • replacement in Cargo.lock at line 1103
    [3.44273][3.15097:15250]()
    "serde 1.0.83 (registry+https://github.com/rust-lang/crates.io-index)",
    "serde_derive 1.0.83 (registry+https://github.com/rust-lang/crates.io-index)",
    [3.44273]
    [3.44426]
    "serde 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)",
    "serde_derive 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)",
  • replacement in Cargo.lock at line 1108
    [3.44658][3.15251:15328]()
    "tokio-xmpp 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
    [3.44658]
    [3.44735]
    "tokio-xmpp 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
  • edit in Cargo.lock at line 1110
    [3.44807]
    [3.44807]
    "try_from 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
  • replacement in Cargo.lock at line 1116
    [3.44917][3.15405:15424]()
    version = "1.0.83"
    [3.44917]
    [3.44936]
    version = "1.0.80"
  • replacement in Cargo.lock at line 1121
    [3.45036][3.15425:15444]()
    version = "1.0.83"
    [3.45036]
    [3.45055]
    version = "1.0.80"
  • replacement in Cargo.lock at line 1126
    [3.45289][3.15445:15517]()
    "syn 0.15.23 (registry+https://github.com/rust-lang/crates.io-index)",
    [3.45289]
    [3.45361]
    "syn 0.15.22 (registry+https://github.com/rust-lang/crates.io-index)",
  • replacement in Cargo.lock at line 1131
    [3.45396][2.8633:8652]()
    version = "1.0.34"
    [3.45396]
    [3.45415]
    version = "1.0.33"
  • replacement in Cargo.lock at line 1136
    [3.45638][3.15518:15591]()
    "serde 1.0.83 (registry+https://github.com/rust-lang/crates.io-index)",
    [3.45638]
    [3.45711]
    "serde 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)",
  • replacement in Cargo.lock at line 1174
    [3.47047][3.15592:15610]()
    version = "0.1.7"
    [3.47047]
    [3.47065]
    version = "0.1.6"
  • replacement in Cargo.lock at line 1177
    [3.47147][3.15611:15758]()
    "arc-swap 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)",
    "libc 0.2.45 (registry+https://github.com/rust-lang/crates.io-index)",
    [3.47147]
    [3.47294]
    "arc-swap 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)",
    "libc 0.2.44 (registry+https://github.com/rust-lang/crates.io-index)",
  • replacement in Cargo.lock at line 1193
    [3.47552][3.15759:15777]()
    version = "0.6.7"
    [3.47552]
    [3.47570]
    version = "0.6.6"
  • replacement in Cargo.lock at line 1205
    [3.47935][3.15778:15931]()
    "libc 0.2.45 (registry+https://github.com/rust-lang/crates.io-index)",
    "redox_syscall 0.1.44 (registry+https://github.com/rust-lang/crates.io-index)",
    [3.47935]
    [3.48088]
    "libc 0.2.44 (registry+https://github.com/rust-lang/crates.io-index)",
    "redox_syscall 0.1.43 (registry+https://github.com/rust-lang/crates.io-index)",
  • replacement in Cargo.lock at line 1229
    [3.48861][3.15932:16005]()
    "serde 1.0.83 (registry+https://github.com/rust-lang/crates.io-index)",
    [3.48861]
    [3.48934]
    "serde 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)",
  • replacement in Cargo.lock at line 1268
    [3.50268][3.16006:16026]()
    version = "0.15.23"
    [3.50268]
    [3.50288]
    version = "0.15.22"
  • replacement in Cargo.lock at line 1291
    [3.51099][3.16027:16099]()
    "syn 0.15.23 (registry+https://github.com/rust-lang/crates.io-index)",
    [3.51099]
    [3.51171]
    "syn 0.15.22 (registry+https://github.com/rust-lang/crates.io-index)",
  • replacement in Cargo.lock at line 1301
    [3.51455][3.16100:16172]()
    "libc 0.2.45 (registry+https://github.com/rust-lang/crates.io-index)",
    [3.51455]
    [3.51527]
    "libc 0.2.44 (registry+https://github.com/rust-lang/crates.io-index)",
  • replacement in Cargo.lock at line 1303
    [3.51598][3.16173:16254]()
    "redox_syscall 0.1.44 (registry+https://github.com/rust-lang/crates.io-index)",
    [3.51598]
    [3.51679]
    "redox_syscall 0.1.43 (registry+https://github.com/rust-lang/crates.io-index)",
  • replacement in Cargo.lock at line 1310
    [3.51865][3.16255:16273]()
    version = "0.4.1"
    [3.51865]
    [3.51883]
    version = "0.4.0"
  • replacement in Cargo.lock at line 1331
    [3.52519][3.16274:16427]()
    "libc 0.2.45 (registry+https://github.com/rust-lang/crates.io-index)",
    "redox_syscall 0.1.44 (registry+https://github.com/rust-lang/crates.io-index)",
    [3.52519]
    [3.52672]
    "libc 0.2.44 (registry+https://github.com/rust-lang/crates.io-index)",
    "redox_syscall 0.1.43 (registry+https://github.com/rust-lang/crates.io-index)",
  • replacement in Cargo.lock at line 1354
    [3.53210][3.16428:16447]()
    version = "0.1.41"
    [3.53210]
    [3.53229]
    version = "0.1.40"
  • replacement in Cargo.lock at line 1357
    [3.53311][3.16448:16601]()
    "libc 0.2.45 (registry+https://github.com/rust-lang/crates.io-index)",
    "redox_syscall 0.1.44 (registry+https://github.com/rust-lang/crates.io-index)",
    [3.53311]
    [3.53464]
    "libc 0.2.44 (registry+https://github.com/rust-lang/crates.io-index)",
    "redox_syscall 0.1.43 (registry+https://github.com/rust-lang/crates.io-index)",
  • replacement in Cargo.lock at line 1370
    [3.53887][3.16602:16677]()
    "num_cpus 1.9.0 (registry+https://github.com/rust-lang/crates.io-index)",
    [3.53887]
    [3.53962]
    "num_cpus 1.8.0 (registry+https://github.com/rust-lang/crates.io-index)",
  • replacement in Cargo.lock at line 1444
    [3.56756][3.16678:16760]()
    "crossbeam-utils 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)",
    [3.56756]
    [3.56838]
    "crossbeam-utils 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)",
  • replacement in Cargo.lock at line 1449
    [3.57132][3.16761:16836]()
    "num_cpus 1.9.0 (registry+https://github.com/rust-lang/crates.io-index)",
    [3.57132]
    [3.57207]
    "num_cpus 1.8.0 (registry+https://github.com/rust-lang/crates.io-index)",
  • replacement in Cargo.lock at line 1462
    [3.57725][3.16837:16909]()
    "libc 0.2.45 (registry+https://github.com/rust-lang/crates.io-index)",
    [3.57725]
    [3.57797]
    "libc 0.2.44 (registry+https://github.com/rust-lang/crates.io-index)",
  • replacement in Cargo.lock at line 1465
    [3.57942][3.16910:16988]()
    "signal-hook 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)",
    [3.57942]
    [3.58020]
    "signal-hook 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)",
  • replacement in Cargo.lock at line 1490
    [3.59052][3.16989:17153]()
    "crossbeam-deque 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)",
    "crossbeam-utils 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)",
    [3.59052]
    [3.59216]
    "crossbeam-deque 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)",
    "crossbeam-utils 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)",
  • replacement in Cargo.lock at line 1494
    [3.59361][3.17154:17229]()
    "num_cpus 1.9.0 (registry+https://github.com/rust-lang/crates.io-index)",
    [3.59361]
    [3.59436]
    "num_cpus 1.8.0 (registry+https://github.com/rust-lang/crates.io-index)",
  • replacement in Cargo.lock at line 1504
    [3.59724][3.17230:17312]()
    "crossbeam-utils 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)",
    [3.59724]
    [3.59806]
    "crossbeam-utils 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)",
  • replacement in Cargo.lock at line 1542
    [3.61406][3.17313:17385]()
    "libc 0.2.45 (registry+https://github.com/rust-lang/crates.io-index)",
    [3.61406]
    [3.61478]
    "libc 0.2.44 (registry+https://github.com/rust-lang/crates.io-index)",
  • replacement in Cargo.lock at line 1553
    [3.61962][3.17386:17404]()
    version = "0.2.1"
    [3.61962]
    [3.61980]
    version = "0.2.0"
  • replacement in Cargo.lock at line 1581
    [3.63560][3.17405:17478]()
    "serde 1.0.83 (registry+https://github.com/rust-lang/crates.io-index)",
    [3.63560]
    [3.63633]
    "serde 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)",
  • replacement in Cargo.lock at line 1596
    [3.64293][3.17479:17554]()
    "smallvec 0.6.7 (registry+https://github.com/rust-lang/crates.io-index)",
    [3.64293]
    [3.64368]
    "smallvec 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)",
  • replacement in Cargo.lock at line 1620
    [3.65726][3.17555:17630]()
    "smallvec 0.6.7 (registry+https://github.com/rust-lang/crates.io-index)",
    [3.65726]
    [3.65801]
    "smallvec 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)",
  • replacement in Cargo.lock at line 1814
    [3.71090][3.17631:17781]()
    "markup5ever 0.7.5 (registry+https://github.com/rust-lang/crates.io-index)",
    "time 0.1.41 (registry+https://github.com/rust-lang/crates.io-index)",
    [3.71090]
    [3.71240]
    "markup5ever 0.7.3 (registry+https://github.com/rust-lang/crates.io-index)",
    "time 0.1.40 (registry+https://github.com/rust-lang/crates.io-index)",
  • edit in Cargo.lock at line 1836
    [3.72117][3.17782:17937]()
    "checksum MacTypes-sys 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "7dbbe033994ae2198a18517c7132d952a29fb1db44249a1234779da7c50f4698"
  • replacement in Cargo.lock at line 1838
    [3.72425][3.17938:18089]()
    "checksum arc-swap 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)" = "1025aeae2b664ca0ea726a89d574fe8f4e77dd712d443236ad1de00379450cf6"
    [3.72425]
    [3.72576]
    "checksum arc-swap 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)" = "5c5ed110e2537bdd3f5b9091707a8a5556a72ac49bbd7302ae0b28fdccb3246c"
  • replacement in Cargo.lock at line 1840
    [3.72727][3.18090:18242]()
    "checksum arrayvec 0.4.10 (registry+https://github.com/rust-lang/crates.io-index)" = "92c7fb76bc8826a8b33b4ee5bb07a247a81e76764ab4d55e8f73e3a4d8808c71"
    [3.72727]
    [3.72878]
    "checksum arrayvec 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)" = "f405cc4c21cd8b784f6c8fc2adf9bc00f59558f0049b5ec21517f875963040cc"
  • edit in Cargo.lock at line 1842
    [3.73026][3.18243:18393]()
    "checksum autocfg 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "4e5f34df7a019573fb8bdc7e24a2bfebe51a2a1d6bfdbaeccedb3c41fc574727"
  • replacement in Cargo.lock at line 1843
    [3.73178][3.18394:18704]()
    "checksum backtrace 0.3.13 (registry+https://github.com/rust-lang/crates.io-index)" = "b5b493b66e03090ebc4343eb02f94ff944e0cbc9ac6571491d170ba026741eb5"
    "checksum backtrace-sys 0.1.28 (registry+https://github.com/rust-lang/crates.io-index)" = "797c830ac25ccc92a7f8a7b9862bde440715531514594a6154e3d4a54dd769b6"
    [3.73178]
    [3.73487]
    "checksum backtrace 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)" = "89a47830402e9981c5c41223151efcced65a0510c13097c769cede7efb34782a"
    "checksum backtrace-sys 0.1.24 (registry+https://github.com/rust-lang/crates.io-index)" = "c66d56ac8dabd07f6aacdaf633f4b8262f5b3601a810a0dcddffd5c22c69daa0"
  • replacement in Cargo.lock at line 1853
    [3.74692][3.18705:18851]()
    "checksum cc 1.0.28 (registry+https://github.com/rust-lang/crates.io-index)" = "bb4a8b715cb4597106ea87c7c84b2f1d452c7492033765df7f32651e66fcf749"
    [3.74692]
    [3.74838]
    "checksum cc 1.0.25 (registry+https://github.com/rust-lang/crates.io-index)" = "f159dfd43363c4d08055a07703eb7a3406b0dac4d0584d96965a3262db3c9d16"
  • replacement in Cargo.lock at line 1861
    [3.75914][3.18852:19326]()
    "checksum crossbeam-deque 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)" = "05e44b8cf3e1a625844d1750e1f7820da46044ff6d28f4d43e455ba3e5bb2c13"
    "checksum crossbeam-epoch 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "f10a4f8f409aaac4b16a5474fb233624238fcdeefb9ba50d5ea059aab63ba31c"
    "checksum crossbeam-utils 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)" = "41ee4864f4797060e52044376f7d107429ce1fb43460021b126424b7180ee21a"
    [3.75914]
    [3.76388]
    "checksum crossbeam-deque 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)" = "4fe1b6f945f824c7a25afe44f62e25d714c0cc523f8e99d8db5cd1026e1269d3"
    "checksum crossbeam-epoch 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)" = "2449aaa4ec7ef96e5fb24db16024b935df718e9ae1cec0a1e68feeca2efca7b8"
    "checksum crossbeam-utils 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)" = "c55913cc2799171a550e307918c0a360e8c16004820291bf3b638969b4a01816"
  • replacement in Cargo.lock at line 1868
    [3.76999][3.19327:19482]()
    "checksum encoding_rs 0.8.13 (registry+https://github.com/rust-lang/crates.io-index)" = "1a8fa54e6689eb2549c4efed8d00d7f3b2b994a064555b0e8df4ae3764bcc4be"
    [3.76999]
    [3.77154]
    "checksum encoding_rs 0.8.12 (registry+https://github.com/rust-lang/crates.io-index)" = "ca20350a7cb5aab5b9034731123d6d412caf3e92d4985e739e411ba0955fd0eb"
  • replacement in Cargo.lock at line 1889
    [3.80218][3.19483:19633]()
    "checksum hyper 0.12.19 (registry+https://github.com/rust-lang/crates.io-index)" = "f1ebec079129e43af5e234ef36ee3d7e6085687d145b7ea653b262d16c6b65f1"
    [3.80218]
    [3.80368]
    "checksum hyper 0.12.17 (registry+https://github.com/rust-lang/crates.io-index)" = "c49a75385d35ff5e9202755f09beb0b878a05c4c363fcc52b23eeb5dcb6782cc"
  • replacement in Cargo.lock at line 1900
    [3.81867][3.19634:19782]()
    "checksum libc 0.2.45 (registry+https://github.com/rust-lang/crates.io-index)" = "2d2857ec59fadc0773853c664d2d18e7198e83883e7060b63c924cb077bd5c74"
    [3.81867]
    [3.82015]
    "checksum libc 0.2.44 (registry+https://github.com/rust-lang/crates.io-index)" = "10923947f84a519a45c8fefb7dd1b3e8c08747993381adee176d7a82b4195311"
  • replacement in Cargo.lock at line 1906
    [3.82768][3.19783:19937]()
    "checksum markup5ever 0.7.5 (registry+https://github.com/rust-lang/crates.io-index)" = "897636f9850c3eef4905a5540683ed53dc9393860f0846cab2c2ddf9939862ff"
    [3.82768]
    [3.82922]
    "checksum markup5ever 0.7.3 (registry+https://github.com/rust-lang/crates.io-index)" = "a87c4100d614080c8ab43334fb028ebe387f273fb61ed4ff0eae9189b94b6be8"
  • replacement in Cargo.lock at line 1908
    [3.83072][3.19938:20087]()
    "checksum memchr 2.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "db4c41318937f6e76648f42826b1d9ade5c09cafb5aef7e351240a70f39206e9"
    [3.83072]
    [3.83221]
    "checksum memchr 2.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "0a3eb002f0535929f1199681417029ebea04aadc0c7a4224b46be99c7f5d6a16"
  • replacement in Cargo.lock at line 1920
    [3.84890][3.20088:20391]()
    "checksum num_cpus 1.9.0 (registry+https://github.com/rust-lang/crates.io-index)" = "5a69d464bdc213aaaff628444e99578ede64e9c854025aa43b9796530afa9238"
    "checksum openssl 0.10.16 (registry+https://github.com/rust-lang/crates.io-index)" = "ec7bd7ca4cce6dbdc77e7c1230682740d307d1218a87fb0349a571272be749f9"
    [3.84890]
    [3.85193]
    "checksum num_cpus 1.8.0 (registry+https://github.com/rust-lang/crates.io-index)" = "c51a3322e4bca9d212ad9a158a02abc6934d005490c054a2778df73a70aa0a30"
    "checksum openssl 0.10.15 (registry+https://github.com/rust-lang/crates.io-index)" = "5e1309181cdcbdb51bc3b6bedb33dfac2a83b3d585033d3f6d9e22e8c1928613"
  • replacement in Cargo.lock at line 1923
    [3.85349][3.20392:20547]()
    "checksum openssl-sys 0.9.40 (registry+https://github.com/rust-lang/crates.io-index)" = "1bb974e77de925ef426b6bc82fce15fd45bdcbeb5728bffcfc7cdeeb7ce1c2d6"
    [3.85349]
    [3.85504]
    "checksum openssl-sys 0.9.39 (registry+https://github.com/rust-lang/crates.io-index)" = "278c1ad40a89aa1e741a1eed089a2f60b18fab8089c3139b542140fc7d674106"
  • replacement in Cargo.lock at line 1949
    [3.89324][3.20548:20705]()
    "checksum redox_syscall 0.1.44 (registry+https://github.com/rust-lang/crates.io-index)" = "a84bcd297b87a545980a2d25a0beb72a1f490c31f0a9fde52fca35bfbb1ceb70"
    [3.89324]
    [3.89481]
    "checksum redox_syscall 0.1.43 (registry+https://github.com/rust-lang/crates.io-index)" = "679da7508e9a6390aeaf7fbd02a800fdc64b73fe2204dd2c8ae66d22d9d5ad5d"
  • replacement in Cargo.lock at line 1951
    [3.89637][3.20706:21009]()
    "checksum regex 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "37e7cbbd370869ce2e8dff25c7018702d10b21a20ef7135316f8daecd6c25b7f"
    "checksum regex-syntax 0.6.4 (registry+https://github.com/rust-lang/crates.io-index)" = "4e47a2ed29da7a9e1960e1639e7a982e6edc6d49be308a3b02daf511504a16d1"
    [3.89637]
    [3.89940]
    "checksum regex 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)" = "ee84f70c8c08744ea9641a731c7fadb475bf2ecc52d7f627feb833e0b3990467"
    "checksum regex-syntax 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)" = "fbc557aac2b708fe84121caf261346cc2eed71978024337e42eb46b8a252ac6e"
  • replacement in Cargo.lock at line 1955
    [3.90251][3.21010:21168]()
    "checksum rustc-demangle 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)" = "01b90379b8664dd83460d59bdc5dd1fd3172b8913788db483ed1325171eab2f7"
    [3.90251]
    [3.90408]
    "checksum rustc-demangle 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)" = "bcfe5b13211b4d78e5c2cadfebd7769197d95c639c35a50057eb4c05de811395"
  • replacement in Cargo.lock at line 1963
    [3.91473][3.21169:21334]()
    "checksum security-framework-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "40d95f3d7da09612affe897f320d78264f0d2320f3e8eea27d12bd1bd94445e2"
    [3.91473]
    [3.91638]
    "checksum security-framework-sys 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "ab01dfbe5756785b5b4d46e0289e5a18071dfa9a7c2b24213ea00b9ef9b665bf"
  • replacement in Cargo.lock at line 1966
    [3.91943][3.21335:21640](),[3.21640][2.8653:8807]()
    "checksum serde 1.0.83 (registry+https://github.com/rust-lang/crates.io-index)" = "157e12af46859e968da75dea9845530e13d03bcab2009a41b9b7bb3cf4eb3ec2"
    "checksum serde_derive 1.0.83 (registry+https://github.com/rust-lang/crates.io-index)" = "9469829702497daf2daf3c190e130c3fa72f719920f73c86160d43e8f8d76951"
    "checksum serde_json 1.0.34 (registry+https://github.com/rust-lang/crates.io-index)" = "bdf540260cfee6da923831f4776ddc495ada940c30117977c70f1313a6130545"
    [3.91943]
    [3.92402]
    "checksum serde 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)" = "15c141fc7027dd265a47c090bf864cf62b42c4d228bbcf4e51a0c9e2b0d3f7ef"
    "checksum serde_derive 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)" = "225de307c6302bec3898c51ca302fc94a7a1697ef0845fcee6448f33c032249c"
    "checksum serde_json 1.0.33 (registry+https://github.com/rust-lang/crates.io-index)" = "c37ccd6be3ed1fdf419ee848f7c758eb31b054d7cd3ae3600e3bae0adf569811"
  • replacement in Cargo.lock at line 1972
    [3.92844][3.21641:21795]()
    "checksum signal-hook 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)" = "1f272d1b7586bec132ed427f532dd418d8beca1ca7f2caf7df35569b1415a4b4"
    [3.92844]
    [3.92998]
    "checksum signal-hook 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "8941ae94fa73d0f73b422774b3a40a7195cecd88d1c090f4b37ade7dc795ab66"
  • replacement in Cargo.lock at line 1975
    [3.93297][3.21796:21947]()
    "checksum smallvec 0.6.7 (registry+https://github.com/rust-lang/crates.io-index)" = "b73ea3738b47563803ef814925e69be00799a8c07420be8b996f8e98fb2336db"
    [3.93297]
    [3.93448]
    "checksum smallvec 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)" = "622df2d454c29a4d89b30dc3b27b42d7d90d6b9e587dbf8f67652eb7514da484"
  • replacement in Cargo.lock at line 1984
    [3.94685][3.21948:22096]()
    "checksum syn 0.15.23 (registry+https://github.com/rust-lang/crates.io-index)" = "9545a6a093a3f0bd59adb472700acc08cad3776f860f16a897dfce8c88721cbc"
    [3.94685]
    [3.94833]
    "checksum syn 0.15.22 (registry+https://github.com/rust-lang/crates.io-index)" = "ae8b29eb5210bc5cf63ed6149cbf9adfc82ac0be023d8735c176ee74a2db4da7"
  • replacement in Cargo.lock at line 1988
    [3.95289][3.22097:22247]()
    "checksum tendril 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)" = "707feda9f2582d5d680d733e38755547a3e8fb471e7ba11452ecfd9ce93a5d3b"
    [3.95289]
    [3.95439]
    "checksum tendril 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "9de21546595a0873061940d994bbbc5c35f024ae4fd61ec5c5b159115684f508"
  • replacement in Cargo.lock at line 1993
    [3.96048][3.22248:22396]()
    "checksum time 0.1.41 (registry+https://github.com/rust-lang/crates.io-index)" = "847da467bf0db05882a9e2375934a8a55cffdc9db0d128af1518200260ba1f6c"
    [3.96048]
    [3.96196]
    "checksum time 0.1.40 (registry+https://github.com/rust-lang/crates.io-index)" = "d825be0eb33fda1a7e68012d51e9c7f451dc1a69391e7fdc197060bb8c56667b"
  • replacement in Cargo.lock at line 2009
    [3.98510][3.22397:22550]()
    "checksum tokio-xmpp 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "f6583920d10a72bd1605adec50f5efb298e0ba5dcad1ff987560675a7280013b"
    [3.98510]
    [3.98663]
    "checksum tokio-xmpp 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "c27385c4781afc851c61ac66d79463c511bf073d3a5d71b8bfd13a816e475989"