Implement FromProto trait for OrderBy enums.

This commit is contained in:
Orne Brocaar 2025-02-07 11:42:41 +00:00
parent 666f34f6a2
commit 1a8e3238e9
3 changed files with 24 additions and 17 deletions

View File

@ -9,7 +9,6 @@ use tonic::{Request, Response, Status};
use uuid::Uuid;
use chirpstack_api::api::device_service_server::DeviceService;
use chirpstack_api::api::list_devices_request::OrderBy;
use chirpstack_api::{api, common, internal};
use lrwn::{AES128Key, DevAddr, EUI64};
@ -278,19 +277,12 @@ impl DeviceService for Device {
},
};
let order_by = match req.order_by() {
OrderBy::Name => device::OrderBy::Name,
OrderBy::DevEui => device::OrderBy::DevEui,
OrderBy::LastSeenAt => device::OrderBy::LastSeenAt,
OrderBy::DeviceProfileName => device::OrderBy::DeviceProfileName,
};
let count = device::get_count(&filters).await.map_err(|e| e.status())?;
let items = device::list(
req.limit as i64,
req.offset as i64,
&filters,
order_by,
req.order_by().from_proto(),
req.order_by_desc,
)
.await

View File

@ -7,7 +7,6 @@ use tonic::{Request, Response, Status};
use uuid::Uuid;
use chirpstack_api::api::gateway_service_server::GatewayService;
use chirpstack_api::api::list_gateways_request::OrderBy;
use chirpstack_api::{api, common};
use lrwn::EUI64;
@ -237,18 +236,13 @@ impl GatewayService for Gateway {
Some(req.search.to_string())
},
};
let order_by = match req.order_by() {
OrderBy::Name => gateway::OrderBy::Name,
OrderBy::GatewayId => gateway::OrderBy::GatewayId,
OrderBy::LastSeenAt => gateway::OrderBy::LastSeenAt,
};
let count = gateway::get_count(&filters).await.map_err(|e| e.status())?;
let result = gateway::list(
req.limit as i64,
req.offset as i64,
&filters,
order_by,
req.order_by().from_proto(),
req.order_by_desc,
)
.await

View File

@ -2,7 +2,7 @@ use chrono::{DateTime, Utc};
use crate::codec::Codec;
use crate::storage::fields::{MeasurementKind, MulticastGroupSchedulingType};
use crate::storage::{device::DeviceClass, metrics::Aggregation};
use crate::storage::{device, device::DeviceClass, gateway, metrics::Aggregation};
use chirpstack_api::{api, common};
use lrwn::region::{CommonName, MacVersion, Revision};
@ -263,6 +263,27 @@ impl ToProto<common::DeviceClass> for DeviceClass {
}
}
impl FromProto<device::OrderBy> for api::list_devices_request::OrderBy {
fn from_proto(self) -> device::OrderBy {
match self {
Self::Name => device::OrderBy::Name,
Self::DevEui => device::OrderBy::DevEui,
Self::LastSeenAt => device::OrderBy::LastSeenAt,
Self::DeviceProfileName => device::OrderBy::DeviceProfileName,
}
}
}
impl FromProto<gateway::OrderBy> for api::list_gateways_request::OrderBy {
fn from_proto(self) -> gateway::OrderBy {
match self {
Self::Name => gateway::OrderBy::Name,
Self::GatewayId => gateway::OrderBy::GatewayId,
Self::LastSeenAt => gateway::OrderBy::LastSeenAt,
}
}
}
pub fn datetime_to_prost_timestamp(dt: &DateTime<Utc>) -> prost_types::Timestamp {
let ts = dt.timestamp_nanos_opt().unwrap_or_default();