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:
parent
b87a6fb209
commit
e71107b079
6 changed files with 73 additions and 50 deletions
88
Cargo.lock
generated
88
Cargo.lock
generated
|
|
@ -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"
|
||||||
|
|
|
||||||
|
|
@ -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"
|
||||||
|
|
|
||||||
|
|
@ -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))?
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -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]);
|
||||||
|
|
|
||||||
|
|
@ -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)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue