//! Typed Rust bindings for an embedded Ghidra JVM.
//!
//! This crate owns the Ghidra bridge and exposes lifecycle handles plus typed
//! program, listing, decompiler, and metadata models. It deliberately stops at
//! Ghidra primitives - higher-level extraction or schema mapping belongs in
//! consumer crates.

mod bridge;
mod decompilation;
mod error;
mod facts;
mod handles;
mod loading;
mod model;
mod monitor;
mod runtime;
mod type_index;

pub use bridge::{start, started};
pub use decompilation::DecompileOptions;
pub use error::{Error, Result};
pub use facts::{
    ExportInfo, ExportKind, FunctionControlFlowGraph, FunctionDescriptor, FunctionSummary,
    ImportInfo, ImportKind, SourceMapInfo,
};
pub use handles::{Decompiler, Ghidra, LoadedProgram, Program, ProgramTransaction, Project};
pub use loading::{
    AnalysisMode, AnalysisOptions, AnalysisReport, LoaderArgument, ProgramLoadInfo,
    ProgramLoadOptions, ProgramOpenOptions, ProgramPath,
};
pub use model::{
    Address, AddressRange, BasicBlockInfo, CallGraphEdge, CallGraphNode, ControlFlowEdgeInfo,
    ControlFlowGraph, DataFlowEdge, DataFlowGraph, DataFlowOp, DataFlowVariable, DataFlowVarnode,
    DataInfo, DecompileResult, DecompileStatus, FunctionPrototype, HighPcodeBlock, HighPcodeGraph,
    HighSymbol, InstructionInfo, MemoryBlockInfo, NamedCount, OperandInfo, PcodeOpInfo,
    PcodeSummary, ProgramCallGraph, ProgramEnumValue, ProgramFunction, ProgramFunctionSignature,
    ProgramMetadata, ProgramParameter, ProgramSymbol, ProgramType, ProgramTypeComponent,
    ProgramTypeDetails, ReferenceInfo, SymbolInfo, SymbolKind, SymbolSource, VarnodeInfo,
};
pub use monitor::{TaskMonitorOptions, TaskMonitorReport};
pub use runtime::{Error as RuntimeError, GhidraRuntime, LaunchOptions};
pub use type_index::{ProgramTypeIndex, ProgramTypeIndexError};
