use crate::{Identifier, Node, NodeID, ProgramId, Type};
use leo_span::Span;
use serde::{Deserialize, Serialize};
use snarkvm::prelude::{Mapping as MappingCore, Network};
use std::fmt;
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct Mapping {
pub identifier: Identifier,
pub key_type: Type,
pub value_type: Type,
pub span: Span,
pub id: NodeID,
}
impl Mapping {
pub fn from_snarkvm<N: Network>(mapping: &MappingCore<N>, program_id: ProgramId) -> Self {
Self {
identifier: Identifier::from(mapping.name()),
key_type: Type::from_snarkvm(mapping.key().plaintext_type(), program_id),
value_type: Type::from_snarkvm(mapping.value().plaintext_type(), program_id),
span: Default::default(),
id: Default::default(),
}
}
}
impl fmt::Display for Mapping {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
write!(f, "mapping {}: {} => {}", self.identifier, self.key_type, self.value_type)
}
}
crate::simple_node_impl!(Mapping);