use crate::{Identifier, Node, NodeID, ProgramId, TypeKind};
use leo_span::Span;
use serde::Serialize;
use snarkvm::prelude::{Mapping as MappingCore, Network};
use std::fmt;
#[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize)]
pub struct Mapping {
pub identifier: Identifier,
pub key_type: TypeKind,
pub value_type: TypeKind,
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: TypeKind::from_snarkvm(mapping.key().plaintext_type(), program_id),
value_type: TypeKind::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);