1#![recursion_limit = "256"]
16#![expect(incomplete_features)]
17#![feature(assert_matches)]
18#![feature(box_patterns)]
19#![feature(deref_patterns)]
20#![feature(deref_pure_trait)]
21#![feature(if_let_guard)]
22#![feature(impl_trait_in_assoc_type)]
23#![feature(iterator_try_collect)]
24#![feature(register_tool)]
25#![feature(trait_alias)]
26#![feature(trivial_bounds)]
27#![register_tool(charon)]
29
30#[macro_use]
31pub mod ids;
32#[macro_use]
33pub mod logger;
34pub mod ast;
35pub mod common;
36pub mod errors;
37pub mod export;
38pub mod name_matcher;
39pub mod options;
40pub mod pretty;
41pub mod transform;
42
43pub use ast::{builtins, expressions, gast, llbc_ast, meta, names, types, ullbc_ast, values};
45pub use pretty::formatter;
46
47pub const VERSION: &str = env!("CARGO_PKG_VERSION");
49
50pub fn deserialize_llbc(path: &std::path::Path) -> anyhow::Result<ast::TranslatedCrate> {
52 use crate::export::CrateData;
53 use anyhow::Context;
54 use serde::Deserialize;
55 use std::fs::File;
56 use std::io::BufReader;
57 let file = File::open(&path)
58 .with_context(|| format!("Failed to read llbc file {}", path.display()))?;
59 let reader = BufReader::new(file);
60 let mut deserializer = serde_json::Deserializer::from_reader(reader);
61 deserializer.disable_recursion_limit();
63 let deserializer = serde_stacker::Deserializer::new(&mut deserializer);
65 Ok(CrateData::deserialize(deserializer)?.translated)
66}