src: add Checksum::from_bytes
This commit is contained in:
parent
6f05869713
commit
86897a520c
|
|
@ -37,6 +37,15 @@ pub struct Checksum {
|
||||||
unsafe impl Send for Checksum {}
|
unsafe impl Send for Checksum {}
|
||||||
|
|
||||||
impl Checksum {
|
impl Checksum {
|
||||||
|
/// Create a `Checksum` from a byte array.
|
||||||
|
///
|
||||||
|
/// This copies the array.
|
||||||
|
pub fn from_bytes(bytes: &[u8; BYTES_LEN]) -> Checksum {
|
||||||
|
let mut checksum = Checksum::zeroed();
|
||||||
|
checksum.as_mut().copy_from_slice(bytes);
|
||||||
|
checksum
|
||||||
|
}
|
||||||
|
|
||||||
/// Create a `Checksum` from a hexadecimal SHA256 string.
|
/// Create a `Checksum` from a hexadecimal SHA256 string.
|
||||||
pub fn from_hex(hex_checksum: &str) -> Result<Checksum, ChecksumError> {
|
pub fn from_hex(hex_checksum: &str) -> Result<Checksum, ChecksumError> {
|
||||||
let mut checksum = Checksum::zeroed();
|
let mut checksum = Checksum::zeroed();
|
||||||
|
|
@ -161,21 +170,27 @@ mod tests {
|
||||||
use glib::translate::from_glib_full;
|
use glib::translate::from_glib_full;
|
||||||
use glib_sys::g_malloc0;
|
use glib_sys::g_malloc0;
|
||||||
|
|
||||||
const CHECKSUM_STRING: &str =
|
const CHECKSUM_BYTES: &[u8; BYTES_LEN] = b"\xbf\x87S\x06x>\xfd\xc5\xbc\xab7\xea\x10\xb6\xcaN\x9bj\xea\x8b\x94X\r\x0c\xa9J\xf1 V\\\x0e\x8a";
|
||||||
"bf875306783efdc5bcab37ea10b6ca4e9b6aea8b94580d0ca94af120565c0e8a";
|
const CHECKSUM_HEX: &str = "bf875306783efdc5bcab37ea10b6ca4e9b6aea8b94580d0ca94af120565c0e8a";
|
||||||
const CHECKSUM_BASE64: &str = "v4dTBng+_cW8qzfqELbKTptq6ouUWA0MqUrxIFZcDoo";
|
const CHECKSUM_BASE64: &str = "v4dTBng+_cW8qzfqELbKTptq6ouUWA0MqUrxIFZcDoo";
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn should_create_checksum_from_bytes() {
|
fn should_create_checksum_from_bytes_taking_ownership() {
|
||||||
let bytes = unsafe { g_malloc0(BYTES_LEN) } as *mut u8;
|
let bytes = unsafe { g_malloc0(BYTES_LEN) } as *mut u8;
|
||||||
let checksum: Checksum = unsafe { from_glib_full(bytes) };
|
let checksum: Checksum = unsafe { from_glib_full(bytes) };
|
||||||
assert_eq!(checksum.to_string(), "00".repeat(BYTES_LEN));
|
assert_eq!(checksum.to_string(), "00".repeat(BYTES_LEN));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn should_create_checksum_from_bytes() {
|
||||||
|
let checksum = Checksum::from_bytes(CHECKSUM_BYTES);
|
||||||
|
assert_eq!(checksum.to_hex(), CHECKSUM_HEX);
|
||||||
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn should_parse_checksum_string_to_bytes() {
|
fn should_parse_checksum_string_to_bytes() {
|
||||||
let csum = Checksum::from_hex(CHECKSUM_STRING).unwrap();
|
let csum = Checksum::from_hex(CHECKSUM_HEX).unwrap();
|
||||||
assert_eq!(csum.to_string(), CHECKSUM_STRING);
|
assert_eq!(csum.to_string(), CHECKSUM_HEX);
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
|
|
@ -186,7 +201,7 @@ mod tests {
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn should_convert_checksum_to_base64() {
|
fn should_convert_checksum_to_base64() {
|
||||||
let csum = Checksum::from_hex(CHECKSUM_STRING).unwrap();
|
let csum = Checksum::from_hex(CHECKSUM_HEX).unwrap();
|
||||||
assert_eq!(csum.to_base64(), CHECKSUM_BASE64);
|
assert_eq!(csum.to_base64(), CHECKSUM_BASE64);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -194,7 +209,7 @@ mod tests {
|
||||||
fn should_convert_base64_string_to_checksum() {
|
fn should_convert_base64_string_to_checksum() {
|
||||||
let csum = Checksum::from_base64(CHECKSUM_BASE64).unwrap();
|
let csum = Checksum::from_base64(CHECKSUM_BASE64).unwrap();
|
||||||
assert_eq!(csum.to_base64(), CHECKSUM_BASE64);
|
assert_eq!(csum.to_base64(), CHECKSUM_BASE64);
|
||||||
assert_eq!(csum.to_string(), CHECKSUM_STRING);
|
assert_eq!(csum.to_string(), CHECKSUM_HEX);
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
|
|
@ -211,15 +226,15 @@ mod tests {
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn should_compare_checksums() {
|
fn should_compare_checksums() {
|
||||||
let csum = Checksum::from_hex(CHECKSUM_STRING).unwrap();
|
let csum = Checksum::from_hex(CHECKSUM_HEX).unwrap();
|
||||||
assert_eq!(csum, csum);
|
assert_eq!(csum, csum);
|
||||||
let csum2 = Checksum::from_hex(CHECKSUM_STRING).unwrap();
|
let csum2 = Checksum::from_hex(CHECKSUM_HEX).unwrap();
|
||||||
assert_eq!(csum2, csum);
|
assert_eq!(csum2, csum);
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn should_clone_value() {
|
fn should_clone_value() {
|
||||||
let csum = Checksum::from_hex(CHECKSUM_STRING).unwrap();
|
let csum = Checksum::from_hex(CHECKSUM_HEX).unwrap();
|
||||||
let csum2 = csum.clone();
|
let csum2 = csum.clone();
|
||||||
assert_eq!(csum2, csum);
|
assert_eq!(csum2, csum);
|
||||||
let csum3 = csum2.clone();
|
let csum3 = csum2.clone();
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue