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:
parent
b71925baad
commit
25a28172ad
5 changed files with 74 additions and 8 deletions
52
Cargo.lock
generated
52
Cargo.lock
generated
|
|
@ -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"
|
||||||
|
|
|
||||||
|
|
@ -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"
|
||||||
|
|
|
||||||
|
|
@ -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)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -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