//! [![ci](https://github.com/macisamuele/json-schema-test-suite-rs/workflows/ci/badge.svg)](https://github.com/macisamuele/json-schema-test-suite-rs/actions)
//! [![codecov](https://codecov.io/gh/macisamuele/json-schema-test-suite-rs/branch/master/graph/badge.svg)](https://codecov.io/gh/macisamuele/json-schema-test-suite-rs)
//! [![Crates.io](https://img.shields.io/crates/v/json-schema-test-suite.svg)](https://crates.io/crates/json-schema-test-suite)
//! [![docs.rs](https://docs.rs/json_schema_test_suite/badge.svg)](https://docs.rs/json-schema-test-suite/)
//!
//! The crate provides a procedural macro attribute that allow to generate all the test cases
//! described by [JSON-Schema-Test-Suite](https://github.com/json-schema-org/JSON-Schema-Test-Suite).
//!
//! The main objective is to ensure that for each test a mock server is started and will be able to
//! capture all the requests, ensuring that tests can be ran only interacting with `cargo test`
//!
//! In order to ude the procedural macro attribute there are few assumptions that are made:
//!
//! * [`lazy_static`](https://crates.io/crates/lazy_static) dependency is added into your `[dev-dependencies]`
//!   section of the `Cargo.toml` file
//! * [`mockito`](https://crates.io/crates/mockito) dependency is added into your `[dev-dependencies]`
//!   section of the `Cargo.toml` file
//! * [`serde-json`](https://crates.io/crates/serde-json) dependency is added into your `[dev-dependencies]`
//!   section of the `Cargo.toml` file
//! * the annotated method signature should be: `fn (&str, json_schema_test_suite::TestCase) -> ()`
//!
//! # How to use
//!
//! ## Cargo.toml
//!
//! ```toml
//! # Ensure that the following lines are present into your Cargo.toml file
//! [dev-dependencies]
//! json_schema_test_suite = "0"
//! # Be careful with dependencies version (using `*` version is never recommended).
//! # The proc-macro uses nothing fancy with the dependencies, so any version should work well :)
//! lazy_static = "*"
//! mockito = "*"
//! serde_json = "*"
//! ```
//!
//! ## Rust test file example
//!
//! ```rust
//! use json_schema_test_suite::{json_schema_test_suite, TestCase};
//!
//! // If no tests should be ignored
//! #[json_schema_test_suite(
//!     // path separator is assumed to be `/` (regardless of the run platform)
//!     "path/to/JSON-Schema-Test-Suite/repository",
//!     // test directory (in <JSON-Schema-Test-Suite>/tests/<test_directory>)
//!     "draft7"
//! )]
//! // If some tests needs to be ignored, just defined them into `{ ... }` as follow
//! #[json_schema_test_suite(
//!     // path separator is assumed to be `/` (regardless of the run platform)
//!     "path/to/JSON-Schema-Test-Suite/repository",
//!     // test directory (in <JSON-Schema-Test-Suite>/tests/<test_directory>)
//!     "draft6",
//!     {   // Names, as generated by the macro, of the tests to ignore
//!         // NOTE: They can be regular expression as well.
//!         "name of the tests to ignore",
//!     }
//! )]
//! fn my_simple_test(
//!     // address of the HTTP server providing the remote files of JSON-Schema-Test-Suite.
//!     // The format will be: `hostname:port`.
//!     // This parameter is passed because by starting a mock server we might not start it
//!     // into `localhost:1234` as expected by JSON-Schema-Test-Suite
//!     server_address: &str,
//!     // Representation of the test case
//!     test_case: TestCase,
//! ) {
//!     // TODO: Add here your testing logic
//! }
//! ```
#![warn(
    clippy::cast_possible_truncation,
    clippy::doc_markdown,
    clippy::explicit_iter_loop,
    clippy::match_same_arms,
    clippy::needless_borrow,
    clippy::needless_pass_by_value,
    clippy::option_map_unwrap_or,
    clippy::option_map_unwrap_or_else,
    clippy::option_unwrap_used,
    clippy::pedantic,
    clippy::print_stdout,
    clippy::redundant_closure,
    clippy::result_map_unwrap_or_else,
    clippy::result_unwrap_used,
    clippy::trivially_copy_pass_by_ref,
    missing_debug_implementations,
    missing_docs,
    trivial_casts,
    unreachable_pub,
    unsafe_code,
    unused_extern_crates,
    unused_import_braces,
    unused_qualifications,
    unused_results,
    variant_size_differences
)]

pub use json_schema_test_suite_proc_macro::json_schema_test_suite;
pub use json_schema_test_suite_test_case::TestCase;
