Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
42 changes: 42 additions & 0 deletions .github/workflows/CI.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
name: CI pipeline

on:
push:
branches: [master]
pull_request:
branches: [master]

env:
CARGO_TERM_COLOR: always

jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Install Rust
uses: actions-rust-lang/setup-rust-toolchain@v1
- name: Build and test
run: cargo test --verbose

clippy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Install Rust
uses: actions-rust-lang/setup-rust-toolchain@v1
with:
components: clippy
- name: Run clippy
run: cargo clippy --all-targets -- -D warnings

fmt:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Install Rust
uses: actions-rust-lang/setup-rust-toolchain@v1
with:
components: rustfmt
- name: Run rustfmt
run: cargo fmt --all -- --check
53 changes: 53 additions & 0 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
name: Release-plz

on:
push:
branches:
- master

jobs:

# Release unpublished packages.
release:
name: Release-plz release
runs-on: ubuntu-latest
permissions:
contents: write
steps:
- &checkout
name: Checkout repository
uses: actions/checkout@v6
with:
fetch-depth: 0
persist-credentials: false
- &install-rust
name: Install Rust toolchain
uses: dtolnay/rust-toolchain@stable
- name: Run release-plz
uses: release-plz/action@v0.5
with:
command: release
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
CARGO_REGISTRY_TOKEN: ${{ secrets.CARGO_REGISTRY_TOKEN }}

# Create a PR with the new versions and changelog, preparing the next release.
release-plz-pr:
name: Release-plz PR
runs-on: ubuntu-latest
permissions:
contents: write
pull-requests: write
concurrency:
group: release-plz-${{ github.ref }}
cancel-in-progress: false
steps:
- *checkout
- *install-rust
- name: Run release-plz
uses: release-plz/action@v0.5
with:
command: release-pr
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
CARGO_REGISTRY_TOKEN: ${{ secrets.CARGO_REGISTRY_TOKEN }}
2 changes: 1 addition & 1 deletion Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

11 changes: 10 additions & 1 deletion Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,9 +1,18 @@
[package]
name = "minivec"
name = "lessvec"
version = "0.1.0"
edition = "2024"
description = "A custom Vec implementation using the Rust standard library."
authors = ["Ayush Chauhan (bakayu) <mail@ayuch.dev>"]
readme = "README.md"
categories = ["data-structures", "collections"]
license = "MIT"
repository = "https://github.com/bakayu/lessvec.git"
exclude = ["target", ".github"]
homepage = "https://github.com/bakayu/lessvec"
documentation = "https://docs.rs/lessvec"

[dependencies]

[package.metadata.docs.rs]
all-features = true
20 changes: 20 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
# lessvec

A minimal, educational Vec-like collection implemented with only the Rust standard library.

[![crates.io](https://img.shields.io/crates/v/lessvec.svg)](https://crates.io/crates/lessvec) [![docs.rs](https://docs.rs/lessvec/badge.svg)](https://docs.rs/lessvec) [![License: MIT](https://img.shields.io/badge/license-MIT-blue.svg)](LICENSE) [![Build Status](https://github.com/OWNER/REPO/actions/workflows/CI.yml/badge.svg)](https://github.com/OWNER/REPO/actions/workflows/CI.yml) [![GitHub tag](https://img.shields.io/github/v/tag/OWNER/REPO.svg)](https://github.com/OWNER/REPO/releases)

## Quick example

```rust
use lessvec::LessVec;

let mut v = LessVec::new();
v.push(1);
v.push(2);
assert_eq!(v.as_slice(), &[1, 2]);
```

## License

[MIT LICENSE](./LICENSE)
52 changes: 52 additions & 0 deletions examples/basics.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
use lessvec::LessVec;

fn main() {
// Basic push/pop
println!(">>> Executing: push(1); push(2)");
let mut v = LessVec::new();
v.push(1);
v.push(2);
println!("initial: {:?}", v.as_slice());
println!();

// Reserve capacity
println!(">>> Executing: reserve(8) and then print len/capacity");
v.reserve(8);
println!("len = {}, capacity = {}", v.len(), v.capacity());
println!();

// Insert / remove
println!(">>> Executing: insert(1, 5); remove(1)");
v.insert(1, 5);
println!("after insert: {:?}", v.as_slice());
let removed = v.remove(1);
println!("removed element = {}", removed);
println!();

// Mutate via as_mut_slice
println!(">>> Executing: as_mut_slice()[0] = 42");
v.as_mut_slice()[0] = 42;
println!("after mutation: {:?}", v.as_slice());
println!();

// Drain elements
println!(">>> Executing: push(100); drain()");
v.push(100);
let drained: Vec<_> = v.drain().collect();
println!("drained: {:?}", drained);
println!(
"after drain: len = {}, capacity = {}",
v.len(),
v.capacity()
);
println!();

// Consume via into_iter
println!(">>> Executing: into_iter()");
let mut v2 = LessVec::new();
v2.push(10);
v2.push(20);
let collected: Vec<_> = v2.into_iter().collect();
println!("into_iter collected: {:?}", collected);
println!();
}
Loading