diff --git a/path/to/contracts/events/src/errors.rs b/path/to/contracts/events/src/errors.rs new file mode 100644 index 0000000..2f85cf5 --- /dev/null +++ b/path/to/contracts/events/src/errors.rs @@ -0,0 +1,17 @@ +// Import necessary dependencies +use std::error::Error; + +// Define the Error enum +#[derive(Debug)] +pub enum Error { + EventIdOverflow, +} + +// Implement the Error trait for the Error enum +impl std::error::Error for Error { + fn description(&self) -> &str { + match self { + Error::EventIdOverflow => "Event ID overflow", + } + } +} \ No newline at end of file diff --git a/path/to/contracts/events/src/idempotency.rs b/path/to/contracts/events/src/idempotency.rs new file mode 100644 index 0000000..949bf2a --- /dev/null +++ b/path/to/contracts/events/src/idempotency.rs @@ -0,0 +1,19 @@ +// Import necessary dependencies +use std::ops::Add; +use std::result::Result; + +// Define the Error enum +#[derive(Debug)] +pub enum Error { + EventIdOverflow, +} + +// Modify the next_event_id function to use checked_add and handle overflows +pub fn next_event_id(current: u64, increment: u64) -> Result { + current.checked_add(increment).ok_or(Error::EventIdOverflow) +} + +// Update the stored_next_event_id function to use checked_add and handle overflows +pub fn stored_next_event_id(current: u64, increment: u64) -> Result { + current.checked_add(increment).ok_or(Error::EventIdOverflow) +} \ No newline at end of file diff --git a/path/to/contracts/events/src/tests/idempotency.rs b/path/to/contracts/events/src/tests/idempotency.rs new file mode 100644 index 0000000..fb84707 --- /dev/null +++ b/path/to/contracts/events/src/tests/idempotency.rs @@ -0,0 +1,26 @@ +// Import necessary dependencies +use super::*; + +// Write unit tests to verify that overflows are properly handled and revert with a typed error +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn test_next_event_id_overflow() { + let current = u64::MAX; + let increment = 1; + let result = next_event_id(current, increment); + assert!(result.is_err()); + assert_eq!(result.unwrap_err(), Error::EventIdOverflow); + } + + #[test] + fn test_stored_next_event_id_overflow() { + let current = u64::MAX; + let increment = 1; + let result = stored_next_event_id(current, increment); + assert!(result.is_err()); + assert_eq!(result.unwrap_err(), Error::EventIdOverflow); + } +} \ No newline at end of file diff --git a/path/to/contracts/profile/src/earnings.rs b/path/to/contracts/profile/src/earnings.rs new file mode 100644 index 0000000..f49aa18 --- /dev/null +++ b/path/to/contracts/profile/src/earnings.rs @@ -0,0 +1,14 @@ +// Import necessary dependencies +use std::ops::Add; +use std::result::Result; + +// Define the Error enum +#[derive(Debug)] +pub enum Error { + EarningsOverflow, +} + +// Modify the register function to use checked_add and handle overflows +pub fn register(current: i128, amount: i128) -> Result { + current.checked_add(amount).ok_or(Error::EarningsOverflow) +} \ No newline at end of file diff --git a/path/to/contracts/profile/src/errors.rs b/path/to/contracts/profile/src/errors.rs new file mode 100644 index 0000000..93eb763 --- /dev/null +++ b/path/to/contracts/profile/src/errors.rs @@ -0,0 +1,17 @@ +// Import necessary dependencies +use std::error::Error; + +// Define the Error enum +#[derive(Debug)] +pub enum Error { + EarningsOverflow, +} + +// Implement the Error trait for the Error enum +impl std::error::Error for Error { + fn description(&self) -> &str { + match self { + Error::EarningsOverflow => "Earnings overflow", + } + } +} \ No newline at end of file diff --git a/path/to/contracts/profile/src/tests/earnings.rs b/path/to/contracts/profile/src/tests/earnings.rs new file mode 100644 index 0000000..371b30a --- /dev/null +++ b/path/to/contracts/profile/src/tests/earnings.rs @@ -0,0 +1,17 @@ +// Import necessary dependencies +use super::*; + +// Write unit tests to verify that overflows are properly handled and revert with a typed error +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn test_register_overflow() { + let current = i128::MAX; + let amount = 1; + let result = register(current, amount); + assert!(result.is_err()); + assert_eq!(result.unwrap_err(), Error::EarningsOverflow); + } +} \ No newline at end of file