use super::cairo_runner::ExecutionResources;
use crate::felt::Felt252;
use crate::stdlib::{collections::HashMap, prelude::*};
use crate::types::program::StrippedProgram;
use crate::types::relocatable::{MaybeRelocatable, Relocatable};
#[derive(Clone, Debug, PartialEq, Eq)]
pub struct SegmentInfo {
pub index: isize,
pub size: usize,
}
impl From<(isize, usize)> for SegmentInfo {
fn from(value: (isize, usize)) -> Self {
SegmentInfo {
index: value.0,
size: value.1,
}
}
}
pub type CairoPieMemory = Vec<((usize, usize), MaybeRelocatable)>;
#[derive(Clone, Debug, PartialEq, Eq)]
pub struct PublicMemoryPage {
pub start: usize,
pub size: usize,
}
pub type Attributes = HashMap<String, Vec<usize>>;
pub type Pages = HashMap<usize, PublicMemoryPage>;
#[derive(Clone, Debug, PartialEq, Eq)]
pub struct OutputBuiltinAdditionalData {
pub pages: Pages,
pub attributes: Attributes,
}
#[derive(Clone, Debug, PartialEq, Eq)]
pub enum BuiltinAdditionalData {
Hash(Vec<Relocatable>),
Output(OutputBuiltinAdditionalData),
Signature(HashMap<Relocatable, (Felt252, Felt252)>),
None,
}
#[derive(Clone, Debug, PartialEq, Eq)]
pub struct CairoPie {
pub metadata: CairoPieMetadata,
pub memory: CairoPieMemory,
pub execution_resources: ExecutionResources,
pub additional_data: HashMap<String, BuiltinAdditionalData>,
}
#[derive(Clone, Debug, PartialEq, Eq)]
pub struct CairoPieMetadata {
pub program: StrippedProgram,
pub program_segment: SegmentInfo,
pub execution_segment: SegmentInfo,
pub ret_fp_segment: SegmentInfo,
pub ret_pc_segment: SegmentInfo,
pub builtin_segments: HashMap<String, SegmentInfo>,
pub extra_segments: Vec<SegmentInfo>,
}