Merge pull request 'Add Error impls if std feature is used' (#2) from add_error_impls_for_std_feature into main
All checks were successful
Rust/spacepackets/pipeline/head This commit looks good
All checks were successful
Rust/spacepackets/pipeline/head This commit looks good
Reviewed-on: #2
This commit is contained in:
commit
66d77fda36
@ -11,7 +11,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/).
|
|||||||
## Changed
|
## Changed
|
||||||
|
|
||||||
- `serde` support is now optional and behind the `serde` feature.
|
- `serde` support is now optional and behind the `serde` feature.
|
||||||
- `PusTcSecondaryHeaderT` trait renamed to `GenericPusTcSecondaryHeader`
|
- `PusTcSecondaryHeaderT` trait renamed to `GenericPusTcSecondaryHeader`.
|
||||||
- `PusTmSecondaryHeaderT` trait renamed to `GenericPusTmSecondaryHeader`.
|
- `PusTmSecondaryHeaderT` trait renamed to `GenericPusTmSecondaryHeader`.
|
||||||
- `SpHeader`: Former `tc` and `tm` methods now named `tc_unseg` and `tm_unseg`.
|
- `SpHeader`: Former `tc` and `tm` methods now named `tc_unseg` and `tm_unseg`.
|
||||||
Former `new` method now called `new_from_single_fields`.
|
Former `new` method now called `new_from_single_fields`.
|
||||||
@ -20,6 +20,9 @@ and this project adheres to [Semantic Versioning](http://semver.org/).
|
|||||||
|
|
||||||
## Added
|
## Added
|
||||||
|
|
||||||
|
- Added `std::error::Error` implementation for all error enumerations if the `std` feature
|
||||||
|
is enabled.
|
||||||
|
- ACII timestamps as specified in CCSDS 301.0-B-4.
|
||||||
- Added MSRV in `Cargo.toml` with the `rust-version` field set to Rust 1.60.
|
- Added MSRV in `Cargo.toml` with the `rust-version` field set to Rust 1.60.
|
||||||
- ACII timestamps as specified in CCSDS 301.0-B-4
|
- ACII timestamps as specified in CCSDS 301.0-B-4
|
||||||
- `serde` `Serialize` and `Deserialize` added to all types.
|
- `serde` `Serialize` and `Deserialize` added to all types.
|
||||||
|
43
src/ecss.rs
43
src/ecss.rs
@ -1,11 +1,13 @@
|
|||||||
//! Common definitions and helpers required to create PUS TMTC packets according to
|
//! Common definitions and helpers required to create PUS TMTC packets according to
|
||||||
//! [ECSS-E-ST-70-41C](https://ecss.nl/standard/ecss-e-st-70-41c-space-engineering-telemetry-and-telecommand-packet-utilization-15-april-2016/)
|
//! [ECSS-E-ST-70-41C](https://ecss.nl/standard/ecss-e-st-70-41c-space-engineering-telemetry-and-telecommand-packet-utilization-15-april-2016/)
|
||||||
use crate::{ByteConversionError, CcsdsPacket, SizeMissmatch};
|
use crate::{ByteConversionError, CcsdsPacket, SizeMissmatch};
|
||||||
use core::fmt::Debug;
|
use core::fmt::{Debug, Display, Formatter};
|
||||||
use core::mem::size_of;
|
use core::mem::size_of;
|
||||||
use crc::{Crc, CRC_16_IBM_3740};
|
use crc::{Crc, CRC_16_IBM_3740};
|
||||||
#[cfg(feature = "serde")]
|
#[cfg(feature = "serde")]
|
||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
|
#[cfg(feature = "std")]
|
||||||
|
use std::error::Error;
|
||||||
|
|
||||||
pub type CrcType = u16;
|
pub type CrcType = u16;
|
||||||
|
|
||||||
@ -65,6 +67,45 @@ pub enum PusError {
|
|||||||
ByteConversionError(ByteConversionError),
|
ByteConversionError(ByteConversionError),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl Display for PusError {
|
||||||
|
fn fmt(&self, f: &mut Formatter<'_>) -> core::fmt::Result {
|
||||||
|
match self {
|
||||||
|
PusError::VersionNotSupported(v) => {
|
||||||
|
write!(f, "PUS version {:?} not supported", v)
|
||||||
|
}
|
||||||
|
PusError::IncorrectCrc(crc) => {
|
||||||
|
write!(f, "crc16 {:#04x} is incorrect", crc)
|
||||||
|
}
|
||||||
|
PusError::RawDataTooShort(size) => {
|
||||||
|
write!(
|
||||||
|
f,
|
||||||
|
"deserialization error, provided raw data with size {} too short",
|
||||||
|
size
|
||||||
|
)
|
||||||
|
}
|
||||||
|
PusError::NoRawData => {
|
||||||
|
write!(f, "no raw data provided")
|
||||||
|
}
|
||||||
|
PusError::CrcCalculationMissing => {
|
||||||
|
write!(f, "crc16 was not calculated")
|
||||||
|
}
|
||||||
|
PusError::ByteConversionError(e) => {
|
||||||
|
write!(f, "low level byte conversion error: {}", e)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[cfg(feature = "std")]
|
||||||
|
impl Error for PusError {
|
||||||
|
fn source(&self) -> Option<&(dyn Error + 'static)> {
|
||||||
|
if let PusError::ByteConversionError(e) = self {
|
||||||
|
return Some(e);
|
||||||
|
}
|
||||||
|
None
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
impl From<ByteConversionError> for PusError {
|
impl From<ByteConversionError> for PusError {
|
||||||
fn from(e: ByteConversionError) -> Self {
|
fn from(e: ByteConversionError) -> Self {
|
||||||
PusError::ByteConversionError(e)
|
PusError::ByteConversionError(e)
|
||||||
|
33
src/lib.rs
33
src/lib.rs
@ -55,7 +55,10 @@ extern crate alloc;
|
|||||||
extern crate std;
|
extern crate std;
|
||||||
|
|
||||||
use crate::ecss::CCSDS_HEADER_LEN;
|
use crate::ecss::CCSDS_HEADER_LEN;
|
||||||
|
use core::fmt::{Display, Formatter};
|
||||||
use delegate::delegate;
|
use delegate::delegate;
|
||||||
|
#[cfg(feature = "std")]
|
||||||
|
use std::error::Error;
|
||||||
|
|
||||||
#[cfg(feature = "serde")]
|
#[cfg(feature = "serde")]
|
||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
@ -87,6 +90,36 @@ pub enum ByteConversionError {
|
|||||||
ZeroCopyFromError,
|
ZeroCopyFromError,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl Display for ByteConversionError {
|
||||||
|
fn fmt(&self, f: &mut Formatter<'_>) -> core::fmt::Result {
|
||||||
|
match self {
|
||||||
|
ByteConversionError::ToSliceTooSmall(missmatch) => {
|
||||||
|
write!(
|
||||||
|
f,
|
||||||
|
"target slice with size {} is too small, expected size of at least {}",
|
||||||
|
missmatch.found, missmatch.expected
|
||||||
|
)
|
||||||
|
}
|
||||||
|
ByteConversionError::FromSliceTooSmall(missmatch) => {
|
||||||
|
write!(
|
||||||
|
f,
|
||||||
|
"source slice with size {} too small, expected at least {} bytes",
|
||||||
|
missmatch.found, missmatch.expected
|
||||||
|
)
|
||||||
|
}
|
||||||
|
ByteConversionError::ZeroCopyToError => {
|
||||||
|
write!(f, "zerocopy serialization error")
|
||||||
|
}
|
||||||
|
ByteConversionError::ZeroCopyFromError => {
|
||||||
|
write!(f, "zerocopy deserialization error")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[cfg(feature = "std")]
|
||||||
|
impl Error for ByteConversionError {}
|
||||||
|
|
||||||
#[derive(Debug, PartialEq, Eq, Copy, Clone)]
|
#[derive(Debug, PartialEq, Eq, Copy, Clone)]
|
||||||
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
|
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
|
||||||
pub enum PacketType {
|
pub enum PacketType {
|
||||||
|
Loading…
Reference in New Issue
Block a user