cairo_proof_parser/
lib.rs1use std::{convert::TryFrom, fmt::Display};
2
3use crate::{json_parser::ProofJSON, stark_proof::StarkProof};
4
5mod annotations;
6mod ast;
7mod builtins;
8mod json_parser;
9mod layout;
10pub mod output;
11pub mod program;
12mod stark_proof;
13mod utils;
14
15extern crate itertools;
16extern crate num_bigint;
17extern crate regex;
18extern crate serde;
19extern crate starknet_crypto;
20
21pub use ast::{Expr, Exprs};
22use itertools::chain;
23
24#[derive(Debug)]
25pub struct ParseStarkProof {
26 pub config: Exprs,
27 pub public_input: Exprs,
28 pub unsent_commitment: Exprs,
29 pub witness: Exprs,
30}
31
32impl Display for ParseStarkProof {
33 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
34 let result = chain![
35 self.config.iter(),
36 self.public_input.iter(),
37 self.unsent_commitment.iter(),
38 self.witness.iter()
39 ];
40
41 for (i, expr) in result.enumerate() {
42 if i != 0 {
43 write!(f, " ")?;
44 }
45 write!(f, "{expr}")?;
46 }
47
48 Ok(())
49 }
50}
51
52pub fn parse(input: &str) -> anyhow::Result<ParseStarkProof> {
53 let proof_json = serde_json::from_str::<ProofJSON>(input)?;
54 let stark_proof = StarkProof::try_from(proof_json)?;
55 Ok(ParseStarkProof {
56 config: Exprs::from(stark_proof.config),
57 public_input: Exprs::from(stark_proof.public_input),
58 unsent_commitment: Exprs::from(stark_proof.unsent_commitment),
59 witness: Exprs::from(stark_proof.witness),
60 })
61}
62
63pub fn parse_raw(input: &str) -> anyhow::Result<StarkProof> {
64 let proof_json = serde_json::from_str::<ProofJSON>(input)?;
65 let stark_proof = StarkProof::try_from(proof_json)?;
66 Ok(stark_proof)
67}