owned_str

Crates.ioowned_str
lib.rsowned_str
version0.1.2
created_at2025-01-29 23:26:41.848848+00
updated_at2025-04-03 22:25:39.137985+00
descriptionProvide a stack allocated String for no-std or const environement
homepage
repositoryhttps://github.com/Baptistemontan/owned_str
max_upload_size
id1535891
size60,153
Baptiste (Baptistemontan)

documentation

README

Owned Str

This crate offers a stack equivalent to a String where you can choose the buffer size.

This as 2 benefits:

  • No allocation, so it is 100% #![no_std].
  • A lot of functions can be marked const, so you can create/manipulate strings at compile time.
use owned_str::{OwnedStr, UnsizedStr};

const fn make_str() -> OwnedStr<16> {
    let mut buff = OwnedStr::new();
    // you can use `unsize_mut` to get a size erased handle
    let s: &mut UnsizedStr = buff.unsize_mut();
    s.push_str("hello");
    push_world(s);
    buff
}

const fn push_world(s: &mut UnsizedStr) {
    s.push(' ');
    s.push_str("world");
    s.pop();
}

const S: &str = make_str().as_str();

fn main() {
    assert_eq!(S, "hello worl");

    // allow stack based string formatting
    use std::fmt::Write;
    let mut buff = OwnedStr::<32>::new();
    write!(&mut buff, "format {} arguments", "some").unwrap();
    assert_eq!(buff, "format some arguments");
}

If you would like to see a String method not already implemented, or a str method that could be made const, feel free to open an issue on github and PR are welcome!

Commit count: 20

cargo fmt