use crate::{
proof::PathProof,
trie::{KeyPath, ValueHash},
trie_pos::TriePosition,
};
#[cfg(not(feature = "std"))]
use alloc::vec::Vec;
#[cfg_attr(
feature = "borsh",
derive(borsh::BorshDeserialize, borsh::BorshSerialize)
)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct Witness {
pub path_proofs: Vec<WitnessedPath>,
pub operations: WitnessedOperations,
}
#[cfg_attr(
feature = "borsh",
derive(borsh::BorshDeserialize, borsh::BorshSerialize)
)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct WitnessedOperations {
pub reads: Vec<WitnessedRead>,
pub writes: Vec<WitnessedWrite>,
}
#[cfg_attr(
feature = "borsh",
derive(borsh::BorshDeserialize, borsh::BorshSerialize)
)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct WitnessedPath {
pub inner: PathProof,
pub path: TriePosition,
}
#[cfg_attr(
feature = "borsh",
derive(borsh::BorshDeserialize, borsh::BorshSerialize)
)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct WitnessedRead {
pub key: KeyPath,
pub value: Option<ValueHash>,
pub path_index: usize,
}
#[cfg_attr(
feature = "borsh",
derive(borsh::BorshDeserialize, borsh::BorshSerialize)
)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct WitnessedWrite {
pub key: KeyPath,
pub value: Option<ValueHash>,
pub path_index: usize,
}