genson_core/
lib.rs

1#[cfg(not(panic = "unwind"))]
2compile_error!("genson-core requires panic=unwind to catch genson-rs panics. Set [profile.*].panic = \"unwind\" in Cargo.toml.");
3
4pub mod genson_rs;
5#[cfg(feature = "avro")]
6pub mod normalise;
7pub mod schema;
8
9// Re-export commonly used items
10pub use schema::{infer_json_schema_from_strings, SchemaInferenceConfig, SchemaInferenceResult};
11
12/// Helper function to infer JSON schema from a collection of JSON strings
13pub fn infer_json_schema(
14    json_strings: &[String],
15    config: Option<SchemaInferenceConfig>,
16) -> Result<SchemaInferenceResult, String> {
17    #[cfg(feature = "trace")]
18    {
19        use crustrace_mermaid::{GroupingMode, MermaidLayer};
20        use tracing_subscriber::filter::LevelFilter;
21        use tracing_subscriber::prelude::*;
22
23        let mmd_layer = MermaidLayer::new()
24            .with_mode(GroupingMode::MergeByName)
25            .with_params_mode(crustrace_mermaid::ParamRenderMode::SingleNodeGrouped);
26
27        tracing_subscriber::registry()
28            .with(
29                tracing_subscriber::fmt::layer()
30                    .with_span_events(
31                        tracing_subscriber::fmt::format::FmtSpan::ENTER
32                            | tracing_subscriber::fmt::format::FmtSpan::EXIT,
33                    )
34                    .with_filter(LevelFilter::INFO),
35            )
36            .with(mmd_layer)
37            .init();
38    }
39
40    infer_json_schema_from_strings(json_strings, config.unwrap_or_default())
41}
42
43/// Create a default schema inference configuration
44pub fn default_config() -> SchemaInferenceConfig {
45    SchemaInferenceConfig::default()
46}