From 882fa28116c84887be626a44ce031b739e45e3d5 Mon Sep 17 00:00:00 2001 From: Max Date: Wed, 25 Sep 2024 18:00:23 +0200 Subject: [PATCH] feat(ic-ledger-types): Add AccountIdentifier.as_bytes() (#520) --- library/ic-ledger-types/CHANGELOG.md | 3 +++ library/ic-ledger-types/src/lib.rs | 27 ++++++++++++++++++++++++++- 2 files changed, 29 insertions(+), 1 deletion(-) diff --git a/library/ic-ledger-types/CHANGELOG.md b/library/ic-ledger-types/CHANGELOG.md index b5d8be669..9a3df14ef 100644 --- a/library/ic-ledger-types/CHANGELOG.md +++ b/library/ic-ledger-types/CHANGELOG.md @@ -6,6 +6,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [unreleased] +### Added +- as_bytes method to AccountIdentifier in ic-ledger-types + ## [0.13.0] - 2024-08-27 ### Changed diff --git a/library/ic-ledger-types/src/lib.rs b/library/ic-ledger-types/src/lib.rs index f1a171e6d..53ae8a601 100644 --- a/library/ic-ledger-types/src/lib.rs +++ b/library/ic-ledger-types/src/lib.rs @@ -218,6 +218,11 @@ impl AccountIdentifier { hex::encode(self.0) } + /// Provide the account identifier as bytes. + pub fn as_bytes(&self) -> &[u8; 32] { + &self.0 + } + /// Returns the checksum of the account identifier. pub fn generate_checksum(&self) -> [u8; 4] { let mut hasher = crc32fast::Hasher::new(); @@ -883,8 +888,11 @@ mod tests { ) } + /// Verifies that these conversions yield the same result: + /// * bytes -> AccountIdentifier -> hex -> AccountIdentifier + /// * bytes -> AccountIdentifier #[test] - fn check_round_trip() { + fn check_hex_round_trip() { let bytes: [u8; 32] = [ 237, 196, 46, 168, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, @@ -899,6 +907,23 @@ mod tests { ) } + /// Verifies that this convertion yields the original data: + /// * bytes -> AccountIdentifier -> bytes + #[test] + fn check_bytes_round_trip() { + let bytes: [u8; 32] = [ + 237, 196, 46, 168, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, + ]; + assert_eq!( + AccountIdentifier::from_slice(&bytes) + .expect("Failed to parse bytes as principal") + .as_bytes(), + &bytes, + "The account identifier doesn't change after going back and forth between a string" + ) + } + #[test] fn test_account_id_from_slice() { let length_27 = b"123456789_123456789_1234567".to_vec();