diff --git a/backend/canisters/community/impl/src/updates/claim_prize.rs b/backend/canisters/community/impl/src/updates/claim_prize.rs index ca6d58dbb3..af1f8c4967 100644 --- a/backend/canisters/community/impl/src/updates/claim_prize.rs +++ b/backend/canisters/community/impl/src/updates/claim_prize.rs @@ -27,7 +27,7 @@ async fn claim_prize(args: Args) -> Response { match result { Ok(Ok(completed_transaction)) => { - // Claim the prize and send a message to the group + // Claim the prize and send a message to the community if let Some(error_message) = mutate_state(|state| commit(args, prepare_result.user_id, completed_transaction.clone(), state)) { diff --git a/backend/libraries/types/src/channel_id.rs b/backend/libraries/types/src/channel_id.rs index 8022164229..ed10bbd887 100644 --- a/backend/libraries/types/src/channel_id.rs +++ b/backend/libraries/types/src/channel_id.rs @@ -39,21 +39,56 @@ impl Visitor<'_> for ChannelIdVisitor { type Value = ChannelId; fn expecting(&self, formatter: &mut Formatter) -> std::fmt::Result { - formatter.write_str("a u32, u128 or string") + formatter.write_str("a positive integer") } - fn visit_u32(self, v: u32) -> Result { + fn visit_i8(self, v: i8) -> Result { + self.visit_i32(v.into()) + } + + fn visit_i16(self, v: i16) -> Result { + self.visit_i32(v.into()) + } + + fn visit_i32(self, v: i32) -> Result { + match u32::try_from(v) { + Ok(v) => self.visit_u32(v), + Err(_) => Err(E::custom(format!("ChannelId cannot be negative: {v}"))), + } + } + + fn visit_i64(self, v: i64) -> Result { + self.visit_i128(v.into()) + } + + fn visit_i128(self, v: i128) -> Result { + match u128::try_from(v) { + Ok(v) => self.visit_u128(v), + Err(_) => Err(E::custom(format!("ChannelId cannot be negative: {v}"))), + } + } + + fn visit_u8(self, v: u8) -> Result { + self.visit_u64(v.into()) + } + + fn visit_u16(self, v: u16) -> Result { + self.visit_u64(v.into()) + } + + fn visit_u32(self, v: u32) -> Result { Ok(v.into()) } - fn visit_u128(self, v: u128) -> Result { + fn visit_u64(self, v: u64) -> Result { + self.visit_u128(v.into()) + } + + fn visit_u128(self, v: u128) -> Result { Ok(v.into()) } - fn visit_str(self, v: &str) -> Result - where - E: Error, - { + fn visit_str(self, v: &str) -> Result { match u128::from_str(v) { Ok(value) => Ok(value.into()), Err(error) => Err(E::custom(format!("invalid channel id: {v}. Error: {error}"))), diff --git a/backend/libraries/types/src/message_id.rs b/backend/libraries/types/src/message_id.rs index b21c9d09e9..0935ea2086 100644 --- a/backend/libraries/types/src/message_id.rs +++ b/backend/libraries/types/src/message_id.rs @@ -48,21 +48,56 @@ impl Visitor<'_> for MessageIdVisitor { type Value = MessageId; fn expecting(&self, formatter: &mut Formatter) -> std::fmt::Result { - formatter.write_str("a u64, u128 or string") + formatter.write_str("a positive integer") } - fn visit_u64(self, v: u64) -> Result { + fn visit_i8(self, v: i8) -> Result { + self.visit_i64(v.into()) + } + + fn visit_i16(self, v: i16) -> Result { + self.visit_i64(v.into()) + } + + fn visit_i32(self, v: i32) -> Result { + self.visit_i64(v.into()) + } + + fn visit_i64(self, v: i64) -> Result { + match u64::try_from(v) { + Ok(v) => self.visit_u64(v), + Err(_) => Err(E::custom(format!("MessageId cannot be negative: {v}"))), + } + } + + fn visit_i128(self, v: i128) -> Result { + match u128::try_from(v) { + Ok(v) => self.visit_u128(v), + Err(_) => Err(E::custom(format!("MessageId cannot be negative: {v}"))), + } + } + + fn visit_u8(self, v: u8) -> Result { + self.visit_u64(v.into()) + } + + fn visit_u16(self, v: u16) -> Result { + self.visit_u64(v.into()) + } + + fn visit_u32(self, v: u32) -> Result { + self.visit_u64(v.into()) + } + + fn visit_u64(self, v: u64) -> Result { Ok(v.into()) } - fn visit_u128(self, v: u128) -> Result { + fn visit_u128(self, v: u128) -> Result { Ok(v.into()) } - fn visit_str(self, v: &str) -> Result - where - E: Error, - { + fn visit_str(self, v: &str) -> Result { match u128::from_str(v) { Ok(value) => Ok(value.into()), Err(error) => Err(E::custom(format!("invalid message id: {v}. Error: {error}"))),