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

add schemars_1 feature

This commit is contained in:
Robin Appelman 2025-09-16 23:11:07 +02:00
commit e71107b079
6 changed files with 73 additions and 50 deletions

88
Cargo.lock generated
View file

@ -19,14 +19,14 @@ dependencies = [
[[package]] [[package]]
name = "bitbuffer" name = "bitbuffer"
version = "0.11.2" version = "0.11.3"
dependencies = [ dependencies = [
"bitbuffer_derive", "bitbuffer_derive",
"compact_str",
"iai-callgrind", "iai-callgrind",
"maplit", "maplit",
"num-traits", "num-traits",
"schemars", "schemars 0.8.22",
"schemars 1.0.4",
"serde", "serde",
"serde_json", "serde_json",
"thiserror", "thiserror",
@ -44,35 +44,6 @@ dependencies = [
"syn", "syn",
] ]
[[package]]
name = "castaway"
version = "0.2.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "dec551ab6e7578819132c713a93c022a05d60159dc86e7a7050223577484c55a"
dependencies = [
"rustversion",
]
[[package]]
name = "cfg-if"
version = "1.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9555578bc9e57714c812a1f84e4fc5b4d21fcb063490c624de019f7464c91268"
[[package]]
name = "compact_str"
version = "0.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3fdb1325a1cece981e8a296ab8f0f9b63ae357bd0784a9faaf548cc7b480707a"
dependencies = [
"castaway",
"cfg-if",
"itoa",
"rustversion",
"ryu",
"static_assertions",
]
[[package]] [[package]]
name = "derive_more" name = "derive_more"
version = "2.0.1" version = "2.0.1"
@ -225,10 +196,24 @@ dependencies = [
] ]
[[package]] [[package]]
name = "rustversion" name = "ref-cast"
version = "1.0.21" version = "1.0.24"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8a0d197bd2c9dc6e53b84da9556a69ba4cdfab8619eb41a8bd1cc2027a0f6b1d" 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"
@ -243,7 +228,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",
] ]
@ -260,6 +258,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"
@ -303,12 +313,6 @@ dependencies = [
"serde", "serde",
] ]
[[package]]
name = "static_assertions"
version = "1.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f"
[[package]] [[package]]
name = "structmeta" name = "structmeta"
version = "0.3.0" version = "0.3.0"

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"
@ -14,7 +14,7 @@ thiserror = "2.0.11"
bitbuffer_derive = { version = "0.11.0", path = "bitbuffer_derive" } bitbuffer_derive = { version = "0.11.0", path = "bitbuffer_derive" }
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 }
compact_str = "0.9.0" schemars_1 = { package = "schemars", version = "1.0.4", optional = true }
[dev-dependencies] [dev-dependencies]
maplit = "1.0.2" maplit = "1.0.2"

View file

@ -646,7 +646,7 @@ where
Some(byte_len) => { Some(byte_len) => {
self.bounds_check(position, byte_len * 8)?; self.bounds_check(position, byte_len * 8)?;
let bytes = unsafe { self.slice.get_unchecked(byte_pos..byte_pos + byte_len) }; let bytes = unsafe { self.slice.get_unchecked(byte_pos..byte_pos + byte_len) };
str::from_utf8(bytes) std::str::from_utf8(bytes)
.map_err(|err| BitError::Utf8Error(err, byte_len))? .map_err(|err| BitError::Utf8Error(err, byte_len))?
.trim_end_matches(char::from(0)) .trim_end_matches(char::from(0))
} }
@ -665,7 +665,7 @@ where
.unwrap_or(self.byte_len() - byte_pos); .unwrap_or(self.byte_len() - byte_pos);
let bytes = unsafe { self.slice.get_unchecked(byte_pos..byte_pos + byte_len) }; let bytes = unsafe { self.slice.get_unchecked(byte_pos..byte_pos + byte_len) };
str::from_utf8(bytes).map_err(|err| BitError::Utf8Error(err, byte_len))? std::str::from_utf8(bytes).map_err(|err| BitError::Utf8Error(err, byte_len))?
} }
}; };

View file

@ -872,3 +872,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)