# unicode-truncate

Unicode-aware algorithm to pad or truncate `str` in terms of displayed width.

[![crates.io](https://img.shields.io/crates/v/unicode-truncate.svg)](https://crates.io/crates/unicode-truncate)
[![Documentation](https://docs.rs/unicode-truncate/badge.svg)](https://docs.rs/unicode-truncate)
[![Build Status](https://github.com/aetf/unicode-truncate/actions/workflows/rust.yml/badge.svg)](https://github.com/Aetf/unicode-truncate/actions)

## Examples

Safely truncate string to display width even not at character boundaries.

```rust
use unicode_truncate::UnicodeTruncateStr;

fn main() {
    assert_eq!("你好吗".unicode_truncate(5), ("你好", 4));
}
```

Making sure the string is displayed in exactly number of columns by combining padding and
truncating.

```rust
use unicode_truncate::UnicodeTruncateStr;
use unicode_truncate::Alignment;
use unicode_width::UnicodeWidthStr;

fn main() {
    let str = "你好吗".unicode_pad(5, Alignment::Left, true);
    assert_eq!(str, "你好 ");
    assert_eq!(str.width(), 5);
}
```

## Features

`unicode-truncate` can be built without `std` by disabling the default feature `std`. However, in
that case `unicode_truncate::UnicodeTruncateStr::unicode_pad` won't be available because it depends
on `std::string::String` and `std::borrow::Cow`.

## Compatibility

The Minimum Supported Rust Version (MSRV) is specified in the `rust-version` field of `Cargo.toml`.
This version requirement applies only to using the library. Development workflows (such as running benchmarks) require a more recent Rust toolchain, primarily to satisfy the stricter MSRV of dev-dependencies like `criterion`.
