#[cfg(feature = "base64")]
mod base64_tests {
use byte_wrapper::{Base64Slice, Base64Vec};
use schemars08::{self as schemars, JsonSchema, schema_for};
use std::borrow::Cow;
#[expect(dead_code)]
#[derive(JsonSchema)]
struct HasBase64Direct {
data: Base64Vec,
}
#[test]
fn base64_direct() {
let code = super::typify_output(&schema_for!(HasBase64Direct));
expectorate::assert_contents(
"tests/output/typify-base64-direct.rs",
&code,
);
}
#[expect(dead_code)]
#[derive(JsonSchema)]
struct HasBase64WithAttr {
#[schemars(with = "Base64Vec")]
data: Vec<u8>,
}
#[test]
fn base64_with_attr() {
let code = super::typify_output(&schema_for!(HasBase64WithAttr));
expectorate::assert_contents(
"tests/output/typify-base64-with-attr.rs",
&code,
);
}
#[expect(dead_code)]
#[derive(JsonSchema)]
struct HasBase64SliceCow {
data: Cow<'static, Base64Slice>,
}
#[test]
fn base64_slice_cow() {
let code = super::typify_output(&schema_for!(HasBase64SliceCow));
expectorate::assert_contents(
"tests/output/typify-base64-slice-cow.rs",
&code,
);
}
}
#[cfg(feature = "hex")]
mod hex_tests {
use byte_wrapper::{HexArray, HexSlice, HexVec};
use schemars08::{self as schemars, JsonSchema, schema_for};
use std::borrow::Cow;
#[expect(dead_code)]
#[derive(JsonSchema)]
struct HasHexDirect {
checksum: HexArray<32>,
}
#[test]
fn hex_direct() {
let code = super::typify_output(&schema_for!(HasHexDirect));
expectorate::assert_contents(
"tests/output/typify-hex-direct.rs",
&code,
);
}
#[expect(dead_code)]
#[derive(JsonSchema)]
struct HasHexWithAttr {
#[schemars(with = "HexArray<32>")]
checksum: [u8; 32],
}
#[test]
fn hex_with_attr() {
let code = super::typify_output(&schema_for!(HasHexWithAttr));
expectorate::assert_contents(
"tests/output/typify-hex-with-attr.rs",
&code,
);
}
#[expect(dead_code)]
#[derive(JsonSchema)]
struct HasHexVecDirect {
data: HexVec,
}
#[test]
fn hex_vec_direct() {
let code = super::typify_output(&schema_for!(HasHexVecDirect));
expectorate::assert_contents(
"tests/output/typify-hex-vec-direct.rs",
&code,
);
}
#[expect(dead_code)]
#[derive(JsonSchema)]
struct HasHexVecWithAttr {
#[schemars(with = "HexVec")]
data: Vec<u8>,
}
#[test]
fn hex_vec_with_attr() {
let code = super::typify_output(&schema_for!(HasHexVecWithAttr));
expectorate::assert_contents(
"tests/output/typify-hex-vec-with-attr.rs",
&code,
);
}
#[expect(dead_code)]
#[derive(JsonSchema)]
struct HasHexSliceCow {
data: Cow<'static, HexSlice>,
}
#[test]
fn hex_slice_cow() {
let code = super::typify_output(&schema_for!(HasHexSliceCow));
expectorate::assert_contents(
"tests/output/typify-hex-slice-cow.rs",
&code,
);
}
}
#[cfg(any(feature = "base64", feature = "hex"))]
fn typify_output(root_schema: &schemars08::schema::RootSchema) -> String {
use typify_impl::{CrateVers, TypeSpace, TypeSpaceSettings};
let mut settings = TypeSpaceSettings::default();
settings.with_crate(
"byte-wrapper",
CrateVers::Version("0.2.0".parse().unwrap()),
None,
);
let mut type_space = TypeSpace::new(&settings);
type_space.add_root_schema(root_schema.clone()).expect("added root schema");
let tokens = quote::quote! { #type_space };
let file = syn::parse2(tokens).expect("parsed token stream");
prettyplease::unparse(&file)
}