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
9pub use schema::{infer_json_schema_from_strings, SchemaInferenceConfig, SchemaInferenceResult};
11
12pub 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
43pub fn default_config() -> SchemaInferenceConfig {
45 SchemaInferenceConfig::default()
46}