1
0
Fork 0
mirror of https://codeberg.org/icewind/bitbuffer.git synced 2026-06-03 08:34:07 +02:00

add schemars_1 feature

This commit is contained in:
Robin Appelman 2025-09-16 23:11:07 +02:00
commit 25a28172ad
5 changed files with 74 additions and 8 deletions

52
Cargo.lock generated
View file

@ -19,14 +19,15 @@ dependencies = [
[[package]] [[package]]
name = "bitbuffer" name = "bitbuffer"
version = "0.11.2" version = "0.11.3"
dependencies = [ dependencies = [
"bitbuffer_derive", "bitbuffer_derive",
"iai-callgrind", "iai-callgrind",
"maplit", "maplit",
"memchr", "memchr",
"num-traits", "num-traits",
"schemars", "schemars 0.8.22",
"schemars 1.0.4",
"serde", "serde",
"serde_json", "serde_json",
"thiserror", "thiserror",
@ -195,6 +196,26 @@ dependencies = [
"proc-macro2", "proc-macro2",
] ]
[[package]]
name = "ref-cast"
version = "1.0.24"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4a0ae411dbe946a674d89546582cea4ba2bb8defac896622d6496f14c23ba5cf"
dependencies = [
"ref-cast-impl",
]
[[package]]
name = "ref-cast-impl"
version = "1.0.24"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1165225c21bff1f3bbce98f5a1f889949bc902d3575308cc7b0de30b4f6d27c7"
dependencies = [
"proc-macro2",
"quote",
"syn",
]
[[package]] [[package]]
name = "ryu" name = "ryu"
version = "1.0.19" version = "1.0.19"
@ -208,7 +229,20 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3fbf2ae1b8bc8e02df939598064d22402220cd5bbcca1c76f7d6a310974d5615" checksum = "3fbf2ae1b8bc8e02df939598064d22402220cd5bbcca1c76f7d6a310974d5615"
dependencies = [ dependencies = [
"dyn-clone", "dyn-clone",
"schemars_derive", "schemars_derive 0.8.22",
"serde",
"serde_json",
]
[[package]]
name = "schemars"
version = "1.0.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "82d20c4491bc164fa2f6c5d44565947a52ad80b9505d8e36f8d54c27c739fcd0"
dependencies = [
"dyn-clone",
"ref-cast",
"schemars_derive 1.0.4",
"serde", "serde",
"serde_json", "serde_json",
] ]
@ -225,6 +259,18 @@ dependencies = [
"syn", "syn",
] ]
[[package]]
name = "schemars_derive"
version = "1.0.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "33d020396d1d138dc19f1165df7545479dcd58d93810dc5d646a16e55abefa80"
dependencies = [
"proc-macro2",
"quote",
"serde_derive_internals",
"syn",
]
[[package]] [[package]]
name = "serde" name = "serde"
version = "1.0.218" version = "1.0.218"

View file

@ -1,12 +1,12 @@
[package] [package]
name = "bitbuffer" name = "bitbuffer"
version = "0.11.2" version = "0.11.3"
authors = ["Robin Appelman <robin@icewind.nl>"] authors = ["Robin Appelman <robin@icewind.nl>"]
edition = "2021" edition = "2021"
description = "Reading bit sequences from a byte slice" description = "Reading bit sequences from a byte slice"
license = "MIT OR Apache-2.0" license = "MIT OR Apache-2.0"
repository = "https://codeberg.org/icewind/bitbuffer" repository = "https://codeberg.org/icewind/bitbuffer"
rust-version = "1.70.0" rust-version = "1.74.0"
[dependencies] [dependencies]
num-traits = "0.2.19" num-traits = "0.2.19"
@ -15,6 +15,7 @@ bitbuffer_derive = { version = "0.11.0", path = "bitbuffer_derive" }
memchr = "2.7.4" memchr = "2.7.4"
serde = { version = "1.0.218", features = ["derive"], optional = true } serde = { version = "1.0.218", features = ["derive"], optional = true }
schemars = { version = "0.8.21", optional = true } schemars = { version = "0.8.21", optional = true }
schemars_1 = { package = "schemars", version = "1.0.4", optional = true }
[dev-dependencies] [dev-dependencies]
maplit = "1.0.2" maplit = "1.0.2"

View file

@ -882,3 +882,22 @@ impl<'a, E: Endianness> schemars::JsonSchema for BitReadStream<'a, E> {
StreamSchema::json_schema(gen) StreamSchema::json_schema(gen)
} }
} }
#[cfg(feature = "schemars_1")]
impl<'a, E: Endianness> schemars_1::JsonSchema for BitReadStream<'a, E> {
fn schema_name() -> std::borrow::Cow<'static, str> {
"BitReadStream".into()
}
fn json_schema(gen: &mut schemars_1::SchemaGenerator) -> schemars_1::Schema {
use schemars_1 as schemars;
#[derive(schemars_1::JsonSchema)]
#[allow(dead_code)]
struct StreamSchema {
data: Vec<u8>,
bit_length: usize,
}
StreamSchema::json_schema(gen)
}
}

View file

@ -154,7 +154,7 @@ impl<'a, E: Endianness> WriteBuffer<'a, E> {
} else { } else {
0 0
}; };
let merged_byte_count = (count + bit_offset + 7) / 8; let merged_byte_count = (count + bit_offset).div_ceil(8);
if E::is_le() { if E::is_le() {
let merged = last_written_byte as usize | (bits << bit_offset); let merged = last_written_byte as usize | (bits << bit_offset);
@ -174,7 +174,7 @@ impl<'a, E: Endianness> WriteBuffer<'a, E> {
let bit_offset = pos & 7; let bit_offset = pos & 7;
let byte_pos = pos / 8; let byte_pos = pos / 8;
let byte_count = (count + bit_offset + 7) / 8; let byte_count = (count + bit_offset).div_ceil(8);
let mut old = [0; 8]; let mut old = [0; 8];
old[0..byte_count].copy_from_slice(&self.bytes[byte_pos..byte_pos + byte_count]); old[0..byte_count].copy_from_slice(&self.bytes[byte_pos..byte_pos + byte_count]);

View file

@ -80,7 +80,7 @@ where
/// The number of written bytes in the buffer /// The number of written bytes in the buffer
pub fn byte_len(&self) -> usize { pub fn byte_len(&self) -> usize {
(self.buffer.bit_len() + 7) / 8 self.buffer.bit_len().div_ceil(8)
} }
fn push_non_fit_bits<I>(&mut self, bits: I, count: usize) fn push_non_fit_bits<I>(&mut self, bits: I, count: usize)