Crates.io | fillet |
lib.rs | fillet |
version | 0.1.0 |
created_at | 2025-07-29 20:43:35.649407+00 |
updated_at | 2025-07-29 20:43:35.649407+00 |
description | An efficient thin pointer based contiguous collection. |
homepage | |
repository | https://github.com/xorgy/fillet |
max_upload_size | |
id | 1772788 |
size | 120,930 |
Fillet is null/zero when empty, making it ideal for scenarios where most collections are empty and you're storing many references to them.
It handles zero-sized types (ZSTs) without heap allocations, using usize
for length.
Fillet is always pointer-sized and zero when empty.
Fillet does not reserve capacity, so repeated push
operations can be slow as they always invoke the allocator and compute layouts.
However, Extend
and FromIterator
use amortized growth and perform similarly to Vec
.
This crate is no_std
.
from_iter
/collect
and extend
, without reserved capacity.Vec
in most cases.core
and alloc
.use fillet::Fillet;
let mut f: Fillet<i32> = Fillet::from([1, 2, 3]);
assert_eq!(f.len(), 3);
assert_eq!(*f, [1, 2, 3]);
f.push(4);
assert_eq!(*f, [1, 2, 3, 4]);
f.truncate(2);
assert_eq!(*f, [1, 2]);
use fillet::Fillet;
use core::iter::repeat_n;
use core::mem::size_of;
let mut f: Fillet<()> = repeat_n((), 5).collect();
assert_eq!(f.len(), 5);
// No heap allocation
f.push(());
assert_eq!(f.len(), 6);
assert_eq!(size_of::<Fillet<()>>(), size_of::<usize>());
use fillet::Fillet;
let mut f = Fillet::from([1, 2]);
f.extend_from_within(..);
assert_eq!(*f, [1, 2, 1, 2]);
Fillet has been verified to compile with Rust 1.85 and later.
Future versions might increase the Rust version requirement. It will not be treated as a breaking change, and as such can even happen with small patch releases.
Triple licensed, at your option:
ISC license (LICENSE-ISC)
Apache License, Version 2.0 (LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0)
MIT license (LICENSE-MIT or http://opensource.org/licenses/MIT)
Contributions are welcome by pull request or email. Please feel free to add your name to the AUTHORS file in any substantive pull request.
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be licensed as above, without any additional terms or conditions.