Revert to 2018 edition to support older Rust versions.

This commit is contained in:
Orne Brocaar
2022-04-11 14:55:36 +01:00
parent 35d3e6bc92
commit ad49c29592
17 changed files with 278 additions and 211 deletions

3
.gitignore vendored
View File

@ -17,3 +17,6 @@
# API # API
/api/js/node_modules /api/js/node_modules
# Bitbake recipes
*.bb

View File

@ -1,9 +1,10 @@
[package] [package]
name = "chirpstack" name = "chirpstack"
description = "ChirpStack is an open-source LoRaWAN(TM) Network Server" description = "ChirpStack is an open-source LoRaWAN(TM) Network Server"
repository="https://github.com/chirpstack/chirpstack/"
version = "4.0.0-test.1" version = "4.0.0-test.1"
authors = ["Orne Brocaar <info@brocaar.com>"] authors = ["Orne Brocaar <info@brocaar.com>"]
edition = "2021" edition = "2018"
publish = false publish = false
license = "MIT" license = "MIT"

View File

@ -1,3 +1,4 @@
use std::convert::TryFrom;
use std::str::FromStr; use std::str::FromStr;
use std::time::SystemTime; use std::time::SystemTime;

View File

@ -1,3 +1,4 @@
use std::convert::TryFrom;
use std::str::FromStr; use std::str::FromStr;
use std::time::SystemTime; use std::time::SystemTime;

View File

@ -1,3 +1,4 @@
use std::convert::TryInto;
use std::ops::Add; use std::ops::Add;
use std::time::{SystemTime, UNIX_EPOCH}; use std::time::{SystemTime, UNIX_EPOCH};

View File

@ -1,4 +1,5 @@
use std::collections::HashMap; use std::collections::HashMap;
use std::convert::TryInto;
use std::sync::Arc; use std::sync::Arc;
use std::time::Duration; use std::time::Duration;

View File

@ -1,4 +1,5 @@
use std::collections::HashMap; use std::collections::HashMap;
use std::convert::TryFrom;
use std::time::{Duration, SystemTime, UNIX_EPOCH}; use std::time::{Duration, SystemTime, UNIX_EPOCH};
use anyhow::Result; use anyhow::Result;

View File

@ -1,4 +1,5 @@
use std::collections::HashMap; use std::collections::HashMap;
use std::convert::TryFrom;
use std::time::Duration; use std::time::Duration;
use anyhow::Result; use anyhow::Result;

View File

@ -1,3 +1,4 @@
use std::convert::TryInto;
use std::io::Cursor; use std::io::Cursor;
use anyhow::{Context, Result}; use anyhow::{Context, Result};

View File

@ -1,3 +1,4 @@
use std::convert::TryFrom;
use std::fmt; use std::fmt;
use std::time::Duration; use std::time::Duration;

View File

@ -1,4 +1,5 @@
use std::collections::HashMap; use std::collections::HashMap;
use std::convert::TryInto;
use std::str::FromStr; use std::str::FromStr;
use anyhow::{Context, Result}; use anyhow::{Context, Result};

View File

@ -341,6 +341,7 @@ pub async fn enqueue(
qi: MulticastGroupQueueItem, qi: MulticastGroupQueueItem,
gateway_ids: &[EUI64], gateway_ids: &[EUI64],
) -> Result<(Vec<Uuid>, u32), Error> { ) -> Result<(Vec<Uuid>, u32), Error> {
let mg_id = qi.multicast_group_id;
let (ids, f_cnt) = task::spawn_blocking({ let (ids, f_cnt) = task::spawn_blocking({
let gateway_ids = gateway_ids.to_vec(); let gateway_ids = gateway_ids.to_vec();
move || -> Result<(Vec<Uuid>, u32), Error> { move || -> Result<(Vec<Uuid>, u32), Error> {
@ -503,7 +504,7 @@ pub async fn enqueue(
} }
}) })
.await??; .await??;
info!(multicast_group_id = %qi.multicast_group_id, f_cnt = f_cnt, "Multicast-group queue item created"); info!(multicast_group_id = %mg_id, f_cnt = f_cnt, "Multicast-group queue item created");
Ok((ids, f_cnt)) Ok((ids, f_cnt))
} }

View File

@ -1421,21 +1421,25 @@ async fn test_lorawan_10_uplink() {
Test { Test {
name: "uplink of class-c device sets lock".into(), name: "uplink of class-c device sets lock".into(),
device_queue_items: vec![], device_queue_items: vec![],
before_func: Some(Box::new(move || { before_func: Some(Box::new({
let dp_id = dp.id.clone(); let dp_id = dp.id.clone();
Box::pin(async move { move || {
let mut dp = device_profile::get(&dp_id).await.unwrap(); Box::pin(async move {
dp.supports_class_c = true; let mut dp = device_profile::get(&dp_id).await.unwrap();
device_profile::update(dp.clone()).await.unwrap(); dp.supports_class_c = true;
}) device_profile::update(dp.clone()).await.unwrap();
})
}
})), })),
after_func: Some(Box::new(move || { after_func: Some(Box::new({
let dp_id = dp.id.clone(); let dp_id = dp.id.clone();
Box::pin(async move { move || {
let mut dp = device_profile::get(&dp_id).await.unwrap(); Box::pin(async move {
dp.supports_class_c = false; let mut dp = device_profile::get(&dp_id).await.unwrap();
device_profile::update(dp).await.unwrap(); dp.supports_class_c = false;
}) device_profile::update(dp).await.unwrap();
})
}
})), })),
device_session: Some(ds.clone()), device_session: Some(ds.clone()),
tx_info: tx_info.clone(), tx_info: tx_info.clone(),
@ -2012,21 +2016,25 @@ async fn test_lorawan_10_mac_commands() {
Test { Test {
name: "unconfirmed uplink + device-status request downlink (FOpts)".into(), name: "unconfirmed uplink + device-status request downlink (FOpts)".into(),
device_queue_items: vec![], device_queue_items: vec![],
before_func: Some(Box::new(move || { before_func: Some(Box::new({
let dp_id = dp.id.clone(); let dp_id = dp.id.clone();
Box::pin(async move { move || {
let mut dp = device_profile::get(&dp_id).await.unwrap(); Box::pin(async move {
dp.device_status_req_interval = 1; let mut dp = device_profile::get(&dp_id).await.unwrap();
device_profile::update(dp.clone()).await.unwrap(); dp.device_status_req_interval = 1;
}) device_profile::update(dp.clone()).await.unwrap();
})
}
})), })),
after_func: Some(Box::new(move || { after_func: Some(Box::new({
let dp_id = dp.id.clone(); let dp_id = dp.id.clone();
Box::pin(async move { move || {
let mut dp = device_profile::get(&dp_id).await.unwrap(); Box::pin(async move {
dp.device_status_req_interval = 0; let mut dp = device_profile::get(&dp_id).await.unwrap();
device_profile::update(dp.clone()).await.unwrap(); dp.device_status_req_interval = 0;
}) device_profile::update(dp.clone()).await.unwrap();
})
}
})), })),
device_session: Some(ds.clone()), device_session: Some(ds.clone()),
tx_info: tx_info.clone(), tx_info: tx_info.clone(),
@ -2110,21 +2118,25 @@ async fn test_lorawan_10_mac_commands() {
data: vec![1, 2, 3, 4], data: vec![1, 2, 3, 4],
..Default::default() ..Default::default()
}], }],
before_func: Some(Box::new(move || { before_func: Some(Box::new({
let dp_id = dp.id.clone(); let dp_id = dp.id.clone();
Box::pin(async move { move || {
let mut dp = device_profile::get(&dp_id).await.unwrap(); Box::pin(async move {
dp.device_status_req_interval = 1; let mut dp = device_profile::get(&dp_id).await.unwrap();
device_profile::update(dp.clone()).await.unwrap(); dp.device_status_req_interval = 1;
}) device_profile::update(dp.clone()).await.unwrap();
})
}
})), })),
after_func: Some(Box::new(move || { after_func: Some(Box::new({
let dp_id = dp.id.clone(); let dp_id = dp.id.clone();
Box::pin(async move { move || {
let mut dp = device_profile::get(&dp_id).await.unwrap(); Box::pin(async move {
dp.device_status_req_interval = 0; let mut dp = device_profile::get(&dp_id).await.unwrap();
device_profile::update(dp.clone()).await.unwrap(); dp.device_status_req_interval = 0;
}) device_profile::update(dp.clone()).await.unwrap();
})
}
})), })),
device_session: Some(ds.clone()), device_session: Some(ds.clone()),
tx_info: tx_info.clone(), tx_info: tx_info.clone(),
@ -3670,30 +3682,32 @@ async fn test_lorawan_10_adr() {
Test { Test {
name: "acknowledgement of pending adr request".into(), name: "acknowledgement of pending adr request".into(),
device_queue_items: vec![], device_queue_items: vec![],
before_func: Some(Box::new(move || { before_func: Some(Box::new({
let dev_eui = dev.dev_eui.clone(); let dev_eui = dev.dev_eui.clone();
Box::pin(async move { move || {
mac_command::set_pending( Box::pin(async move {
&dev_eui, mac_command::set_pending(
lrwn::CID::LinkADRReq, &dev_eui,
&lrwn::MACCommandSet::new(vec![lrwn::MACCommand::LinkADRReq( lrwn::CID::LinkADRReq,
lrwn::LinkADRReqPayload { &lrwn::MACCommandSet::new(vec![lrwn::MACCommand::LinkADRReq(
dr: 0, lrwn::LinkADRReqPayload {
tx_power: 3, dr: 0,
ch_mask: lrwn::ChMask::new([ tx_power: 3,
true, true, true, false, false, false, false, false, false, ch_mask: lrwn::ChMask::new([
false, false, false, false, false, false, false, true, true, true, false, false, false, false, false, false,
]), false, false, false, false, false, false, false,
redundancy: lrwn::Redundancy { ]),
ch_mask_cntl: 0, redundancy: lrwn::Redundancy {
nb_rep: 1, ch_mask_cntl: 0,
nb_rep: 1,
},
}, },
}, )]),
)]), )
) .await
.await .unwrap();
.unwrap(); })
}) }
})), })),
after_func: None, after_func: None,
device_session: Some(ds.clone()), device_session: Some(ds.clone()),
@ -3737,30 +3751,32 @@ async fn test_lorawan_10_adr() {
Test { Test {
name: "negative acknowledgement of pending adr request".into(), name: "negative acknowledgement of pending adr request".into(),
device_queue_items: vec![], device_queue_items: vec![],
before_func: Some(Box::new(move || { before_func: Some(Box::new({
let dev_eui = dev.dev_eui.clone(); let dev_eui = dev.dev_eui.clone();
Box::pin(async move { move || {
mac_command::set_pending( Box::pin(async move {
&dev_eui, mac_command::set_pending(
lrwn::CID::LinkADRReq, &dev_eui,
&lrwn::MACCommandSet::new(vec![lrwn::MACCommand::LinkADRReq( lrwn::CID::LinkADRReq,
lrwn::LinkADRReqPayload { &lrwn::MACCommandSet::new(vec![lrwn::MACCommand::LinkADRReq(
dr: 0, lrwn::LinkADRReqPayload {
tx_power: 3, dr: 0,
ch_mask: lrwn::ChMask::new([ tx_power: 3,
true, true, true, false, false, false, false, false, false, ch_mask: lrwn::ChMask::new([
false, false, false, false, false, false, false, true, true, true, false, false, false, false, false, false,
]), false, false, false, false, false, false, false,
redundancy: lrwn::Redundancy { ]),
ch_mask_cntl: 0, redundancy: lrwn::Redundancy {
nb_rep: 1, ch_mask_cntl: 0,
nb_rep: 1,
},
}, },
}, )]),
)]), )
) .await
.await .unwrap();
.unwrap(); })
}) }
})), })),
after_func: None, after_func: None,
device_session: Some(ds.clone()), device_session: Some(ds.clone()),
@ -3978,30 +3994,32 @@ async fn test_lorawan_10_adr() {
Test { Test {
name: "new channel re-configuration ack-ed".into(), name: "new channel re-configuration ack-ed".into(),
device_queue_items: vec![], device_queue_items: vec![],
before_func: Some(Box::new(move || { before_func: Some(Box::new({
let dev_eui = dev.dev_eui.clone(); let dev_eui = dev.dev_eui.clone();
Box::pin(async move { move || {
mac_command::set_pending( Box::pin(async move {
&dev_eui, mac_command::set_pending(
lrwn::CID::LinkADRReq, &dev_eui,
&lrwn::MACCommandSet::new(vec![lrwn::MACCommand::LinkADRReq( lrwn::CID::LinkADRReq,
lrwn::LinkADRReqPayload { &lrwn::MACCommandSet::new(vec![lrwn::MACCommand::LinkADRReq(
dr: 0, lrwn::LinkADRReqPayload {
tx_power: 1, dr: 0,
ch_mask: lrwn::ChMask::new([ tx_power: 1,
true, true, true, false, false, false, false, false, false, ch_mask: lrwn::ChMask::new([
false, false, false, false, false, false, false, true, true, true, false, false, false, false, false, false,
]), false, false, false, false, false, false, false,
redundancy: lrwn::Redundancy { ]),
ch_mask_cntl: 0, redundancy: lrwn::Redundancy {
nb_rep: 0, ch_mask_cntl: 0,
nb_rep: 0,
},
}, },
}, )]),
)]), )
) .await
.await .unwrap();
.unwrap(); })
}) }
})), })),
after_func: None, after_func: None,
device_session: Some(ds_7chan.clone()), device_session: Some(ds_7chan.clone()),
@ -4043,30 +4061,32 @@ async fn test_lorawan_10_adr() {
Test { Test {
name: "new channel re-configuration not ack-ed".into(), name: "new channel re-configuration not ack-ed".into(),
device_queue_items: vec![], device_queue_items: vec![],
before_func: Some(Box::new(move || { before_func: Some(Box::new({
let dev_eui = dev.dev_eui.clone(); let dev_eui = dev.dev_eui.clone();
Box::pin(async move { move || {
mac_command::set_pending( Box::pin(async move {
&dev_eui, mac_command::set_pending(
lrwn::CID::LinkADRReq, &dev_eui,
&lrwn::MACCommandSet::new(vec![lrwn::MACCommand::LinkADRReq( lrwn::CID::LinkADRReq,
lrwn::LinkADRReqPayload { &lrwn::MACCommandSet::new(vec![lrwn::MACCommand::LinkADRReq(
dr: 0, lrwn::LinkADRReqPayload {
tx_power: 1, dr: 0,
ch_mask: lrwn::ChMask::new([ tx_power: 1,
true, true, true, false, false, false, false, false, false, ch_mask: lrwn::ChMask::new([
false, false, false, false, false, false, false, true, true, true, false, false, false, false, false, false,
]), false, false, false, false, false, false, false,
redundancy: lrwn::Redundancy { ]),
ch_mask_cntl: 0, redundancy: lrwn::Redundancy {
nb_rep: 0, ch_mask_cntl: 0,
nb_rep: 0,
},
}, },
}, )]),
)]), )
) .await
.await .unwrap();
.unwrap(); })
}) }
})), })),
after_func: None, after_func: None,
device_session: Some(ds_7chan.clone()), device_session: Some(ds_7chan.clone()),

View File

@ -150,11 +150,13 @@ async fn test_gateway_filtering() {
let tests = vec![ let tests = vec![
Test { Test {
name: "private gateway of same tenant".into(), name: "private gateway of same tenant".into(),
before_func: Some(Box::new(move || { before_func: Some(Box::new({
let dev_eui = dev.dev_eui.clone(); let dev_eui = dev.dev_eui.clone();
Box::pin(async move { move || {
device_keys::reset_nonces(&dev_eui).await.unwrap(); Box::pin(async move {
}) device_keys::reset_nonces(&dev_eui).await.unwrap();
})
}
})), })),
after_func: None, after_func: None,
rx_info: rx_info_a.clone(), rx_info: rx_info_a.clone(),
@ -194,11 +196,13 @@ async fn test_gateway_filtering() {
}, },
Test { Test {
name: "private gateway other tenant".into(), name: "private gateway other tenant".into(),
before_func: Some(Box::new(move || { before_func: Some(Box::new({
let dev_eui = dev.dev_eui.clone(); let dev_eui = dev.dev_eui.clone();
Box::pin(async move { move || {
device_keys::reset_nonces(&dev_eui).await.unwrap(); Box::pin(async move {
}) device_keys::reset_nonces(&dev_eui).await.unwrap();
})
}
})), })),
after_func: None, after_func: None,
rx_info: rx_info_b.clone(), rx_info: rx_info_b.clone(),
@ -383,11 +387,13 @@ async fn test_lorawan_10() {
}, },
Test { Test {
name: "join-request accepted".into(), name: "join-request accepted".into(),
before_func: Some(Box::new(move || { before_func: Some(Box::new({
let dev_eui = dev.dev_eui.clone(); let dev_eui = dev.dev_eui.clone();
Box::pin(async move { move || {
device_keys::reset_nonces(&dev_eui).await.unwrap(); Box::pin(async move {
}) device_keys::reset_nonces(&dev_eui).await.unwrap();
})
}
})), })),
after_func: None, after_func: None,
rx_info: rx_info.clone(), rx_info: rx_info.clone(),
@ -567,23 +573,27 @@ async fn test_lorawan_10() {
}, },
Test { Test {
name: "join-request accepted + skip fcnt check".into(), name: "join-request accepted + skip fcnt check".into(),
before_func: Some(Box::new(move || { before_func: Some(Box::new({
let dev_eui = dev.dev_eui.clone(); let dev_eui = dev.dev_eui.clone();
Box::pin(async move { move || {
device_keys::reset_nonces(&dev_eui).await.unwrap(); Box::pin(async move {
device_keys::reset_nonces(&dev_eui).await.unwrap();
let mut dev = device::get(&dev_eui).await.unwrap(); let mut dev = device::get(&dev_eui).await.unwrap();
dev.skip_fcnt_check = true; dev.skip_fcnt_check = true;
let _ = device::update(dev).await.unwrap(); let _ = device::update(dev).await.unwrap();
}) })
}
})), })),
after_func: Some(Box::new(move || { after_func: Some(Box::new({
let dev_eui = dev.dev_eui.clone(); let dev_eui = dev.dev_eui.clone();
Box::pin(async move { move || {
let mut dev = device::get(&dev_eui).await.unwrap(); Box::pin(async move {
dev.skip_fcnt_check = false; let mut dev = device::get(&dev_eui).await.unwrap();
let _ = device::update(dev).await.unwrap(); dev.skip_fcnt_check = false;
}) let _ = device::update(dev).await.unwrap();
})
}
})), })),
rx_info: rx_info.clone(), rx_info: rx_info.clone(),
tx_info: tx_info.clone(), tx_info: tx_info.clone(),
@ -623,11 +633,13 @@ async fn test_lorawan_10() {
}, },
Test { Test {
name: "join-request accepted + cflist".into(), name: "join-request accepted + cflist".into(),
before_func: Some(Box::new(move || { before_func: Some(Box::new({
let dev_eui = dev.dev_eui.clone(); let dev_eui = dev.dev_eui.clone();
Box::pin(async move { move || {
device_keys::reset_nonces(&dev_eui).await.unwrap(); Box::pin(async move {
}) device_keys::reset_nonces(&dev_eui).await.unwrap();
})
}
})), })),
after_func: None, after_func: None,
rx_info: rx_info.clone(), rx_info: rx_info.clone(),
@ -775,24 +787,28 @@ async fn test_lorawan_10() {
}, },
Test { Test {
name: "join-request accepted + class-b supported".into(), name: "join-request accepted + class-b supported".into(),
before_func: Some(Box::new(move || { before_func: Some(Box::new({
let dev_eui = dev.dev_eui.clone(); let dev_eui = dev.dev_eui.clone();
let dp_id = dp.id.clone(); let dp_id = dp.id.clone();
Box::pin(async move { move || {
device_keys::reset_nonces(&dev_eui).await.unwrap(); Box::pin(async move {
device_keys::reset_nonces(&dev_eui).await.unwrap();
let mut dp = device_profile::get(&dp_id).await.unwrap(); let mut dp = device_profile::get(&dp_id).await.unwrap();
dp.supports_class_b = true; dp.supports_class_b = true;
let _ = device_profile::update(dp).await.unwrap(); let _ = device_profile::update(dp).await.unwrap();
}) })
}
})), })),
after_func: Some(Box::new(move || { after_func: Some(Box::new({
let dp_id = dp.id.clone(); let dp_id = dp.id.clone();
Box::pin(async move { move || {
let mut dp = device_profile::get(&dp_id).await.unwrap(); Box::pin(async move {
dp.supports_class_b = false; let mut dp = device_profile::get(&dp_id).await.unwrap();
let _ = device_profile::update(dp).await.unwrap(); dp.supports_class_b = false;
}) let _ = device_profile::update(dp).await.unwrap();
})
}
})), })),
rx_info: rx_info.clone(), rx_info: rx_info.clone(),
tx_info: tx_info.clone(), tx_info: tx_info.clone(),
@ -802,24 +818,28 @@ async fn test_lorawan_10() {
}, },
Test { Test {
name: "join-request accepted + class-c supported".into(), name: "join-request accepted + class-c supported".into(),
before_func: Some(Box::new(move || { before_func: Some(Box::new({
let dev_eui = dev.dev_eui.clone(); let dev_eui = dev.dev_eui.clone();
let dp_id = dp.id.clone(); let dp_id = dp.id.clone();
Box::pin(async move { move || {
device_keys::reset_nonces(&dev_eui).await.unwrap(); Box::pin(async move {
device_keys::reset_nonces(&dev_eui).await.unwrap();
let mut dp = device_profile::get(&dp_id).await.unwrap(); let mut dp = device_profile::get(&dp_id).await.unwrap();
dp.supports_class_c = true; dp.supports_class_c = true;
let _ = device_profile::update(dp).await.unwrap(); let _ = device_profile::update(dp).await.unwrap();
}) })
}
})), })),
after_func: Some(Box::new(move || { after_func: Some(Box::new({
let dp_id = dp.id.clone(); let dp_id = dp.id.clone();
Box::pin(async move { move || {
let mut dp = device_profile::get(&dp_id).await.unwrap(); Box::pin(async move {
dp.supports_class_c = false; let mut dp = device_profile::get(&dp_id).await.unwrap();
let _ = device_profile::update(dp).await.unwrap(); dp.supports_class_c = false;
}) let _ = device_profile::update(dp).await.unwrap();
})
}
})), })),
rx_info: rx_info.clone(), rx_info: rx_info.clone(),
tx_info: tx_info.clone(), tx_info: tx_info.clone(),
@ -829,23 +849,27 @@ async fn test_lorawan_10() {
}, },
Test { Test {
name: "device disabled".into(), name: "device disabled".into(),
before_func: Some(Box::new(move || { before_func: Some(Box::new({
let dev_eui = dev.dev_eui.clone(); let dev_eui = dev.dev_eui.clone();
Box::pin(async move { move || {
device_keys::reset_nonces(&dev_eui).await.unwrap(); Box::pin(async move {
device_keys::reset_nonces(&dev_eui).await.unwrap();
let mut dev = device::get(&dev_eui).await.unwrap(); let mut dev = device::get(&dev_eui).await.unwrap();
dev.is_disabled = true; dev.is_disabled = true;
let _ = device::update(dev).await.unwrap(); let _ = device::update(dev).await.unwrap();
}) })
}
})), })),
after_func: Some(Box::new(move || { after_func: Some(Box::new({
let dev_eui = dev.dev_eui.clone(); let dev_eui = dev.dev_eui.clone();
Box::pin(async move { move || {
let mut dev = device::get(&dev_eui).await.unwrap(); Box::pin(async move {
dev.is_disabled = false; let mut dev = device::get(&dev_eui).await.unwrap();
let _ = device::update(dev).await.unwrap(); dev.is_disabled = false;
}) let _ = device::update(dev).await.unwrap();
})
}
})), })),
rx_info: rx_info.clone(), rx_info: rx_info.clone(),
tx_info: tx_info.clone(), tx_info: tx_info.clone(),
@ -998,11 +1022,13 @@ async fn test_lorawan_11() {
}, },
Test { Test {
name: "join-request accepted".into(), name: "join-request accepted".into(),
before_func: Some(Box::new(move || { before_func: Some(Box::new({
let dev_eui = dev.dev_eui.clone(); let dev_eui = dev.dev_eui.clone();
Box::pin(async move { move || {
device_keys::reset_nonces(&dev_eui).await.unwrap(); Box::pin(async move {
}) device_keys::reset_nonces(&dev_eui).await.unwrap();
})
}
})), })),
after_func: None, after_func: None,
rx_info: rx_info.clone(), rx_info: rx_info.clone(),
@ -1177,24 +1203,28 @@ async fn test_lorawan_11() {
}, },
Test { Test {
name: "join-request accepted + class-c supported".into(), name: "join-request accepted + class-c supported".into(),
before_func: Some(Box::new(move || { before_func: Some(Box::new({
let dev_eui = dev.dev_eui.clone(); let dev_eui = dev.dev_eui.clone();
let dp_id = dp.id.clone(); let dp_id = dp.id.clone();
Box::pin(async move { move || {
device_keys::reset_nonces(&dev_eui).await.unwrap(); Box::pin(async move {
device_keys::reset_nonces(&dev_eui).await.unwrap();
let mut dp = device_profile::get(&dp_id).await.unwrap(); let mut dp = device_profile::get(&dp_id).await.unwrap();
dp.supports_class_c = true; dp.supports_class_c = true;
let _ = device_profile::update(dp).await.unwrap(); let _ = device_profile::update(dp).await.unwrap();
}) })
}
})), })),
after_func: Some(Box::new(move || { after_func: Some(Box::new({
let dp_id = dp.id.clone(); let dp_id = dp.id.clone();
Box::pin(async move { move || {
let mut dp = device_profile::get(&dp_id).await.unwrap(); Box::pin(async move {
dp.supports_class_c = false; let mut dp = device_profile::get(&dp_id).await.unwrap();
let _ = device_profile::update(dp).await.unwrap(); dp.supports_class_c = false;
}) let _ = device_profile::update(dp).await.unwrap();
})
}
})), })),
rx_info: rx_info.clone(), rx_info: rx_info.clone(),
tx_info: tx_info.clone(), tx_info: tx_info.clone(),

View File

@ -1,4 +1,5 @@
use std::collections::HashMap; use std::collections::HashMap;
use std::convert::TryInto;
use anyhow::{Context, Result}; use anyhow::{Context, Result};
use chrono::{DateTime, Duration, Local, Utc}; use chrono::{DateTime, Duration, Local, Utc};

View File

@ -1,3 +1,4 @@
use std::convert::TryInto;
use std::time::{Duration, SystemTime}; use std::time::{Duration, SystemTime};
use anyhow::Result; use anyhow::Result;

View File

@ -1,5 +1,6 @@
use std::collections::hash_map::DefaultHasher; use std::collections::hash_map::DefaultHasher;
use std::collections::HashMap; use std::collections::HashMap;
use std::convert::TryFrom;
use std::hash::{Hash, Hasher}; use std::hash::{Hash, Hasher};
use anyhow::{Context, Result}; use anyhow::{Context, Result};