Implement some persistency features

This commit is contained in:
2019-04-30 19:08:40 +02:00
parent 450ecbccad
commit 39b2a2c442
4 changed files with 113 additions and 17 deletions

View File

@ -1,20 +1,29 @@
use serde::{Deserialize, Deserializer, Serialize, Serializer};
#[derive(Clone, Debug, Deserialize, Serialize, Eq, PartialEq)]
#[derive(Clone, Debug, Deserialize, Serialize, Eq, Hash, PartialEq)]
pub struct Sha256(#[serde(serialize_with = "as_hex", deserialize_with = "from_hex")] pub [u8; 32]);
fn hash_to_hex_string(hash: &[u8; 32]) -> String {
use std::fmt::*;
let mut hex_string = String::with_capacity(64);
for digit in hash.iter() {
write!(hex_string, "{:02X}", digit).unwrap();
}
hex_string
}
impl Sha256 {
pub fn create_hex_string(&self) -> String {
hash_to_hex_string(&self.0)
}
}
fn as_hex<S>(hash: &[u8; 32], serializer: S) -> Result<S::Ok, S::Error>
where
S: Serializer,
{
use std::fmt::*;
let mut hex_string = String::new();
for digit in hash {
write!(hex_string, "{:02X}", digit).unwrap();
}
serializer.serialize_str(&hex_string)
serializer.serialize_str(&hash_to_hex_string(hash))
}
fn from_hex<'de, D>(deserializer: D) -> Result<[u8; 32], D::Error>

View File

@ -1,6 +1,6 @@
use serde::{Deserialize, Deserializer, Serialize, Serializer};
#[derive(Clone, Debug, Deserialize, Serialize, Eq, PartialEq)]
#[derive(Clone, Debug, Deserialize, Serialize, Eq, Hash, PartialEq)]
pub enum TextureFormat {
#[serde(rename = "png")]
PNG,