#![forbid(unsafe_code)]
#![warn(unused_crate_dependencies, unused_extern_crates)]
use serde::{Deserializer, Serializer, de::Visitor};
pub mod contract;
pub mod debug;
mod debug_vars;
pub mod program;
pub mod ssa;
fn serialize_hash<S>(hash: &u64, s: S) -> Result<S::Ok, S::Error>
where
S: Serializer,
{
s.serialize_str(&hash.to_string())
}
fn deserialize_hash<'de, D>(deserializer: D) -> Result<u64, D::Error>
where
D: Deserializer<'de>,
{
use serde::de::Error;
struct StringOrU64;
impl Visitor<'_> for StringOrU64 {
type Value = u64;
fn expecting(&self, formatter: &mut std::fmt::Formatter) -> std::fmt::Result {
formatter.write_str("String or u64")
}
fn visit_str<E>(self, value: &str) -> Result<u64, E>
where
E: Error,
{
value.parse().map_err(E::custom)
}
fn visit_u64<E>(self, value: u64) -> Result<Self::Value, E> {
Ok(value)
}
}
deserializer.deserialize_any(StringOrU64)
}