cairo_proof_parser/
lib.rs

1use 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}