Widestring Rs Versions Save

A wide string Rust library for converting to and from wide-character strings, including UTF-16 and UTF-32 encoding.

v1.1.0

1 month ago

Added

  • Utf32String::into_char_vec and missing conversion to Vec<char> for Utf32String. Fixes #37.
  • include_utf16str! macro to include UTF-16 file at compile-time as Utf16Str. By @daxpedda.

Fixed

  • U16String::pop_char panics with surrogate string. Fixes #38.
  • Various import warnings and new clippy warnings, plus stabilized debugger visualizer warnings.

v1.0.2

1 year ago

Fixed

  • Correctly check for and error on nul values in C-string macros u16cstr!, u32cstr!, and widecstr!. Fixes #28.

v1.0.1

1 year ago

Fixed

  • Reduce collision potential for macros. By @OpenByteDev.

v1.0.0

1 year ago

Changed

  • Breaking Change Minimum supported Rust version is now 1.58.
  • Added #[must_use] attributes to many crate functions, as appropriate.
  • Remove unsafe qualifiers from as_mut_ptr and as_mut_ptr_range to match standard library. By @yescallop.

Added

  • Added new function that creates and empty string to U16CString and U32CString to match other string types.
  • Additional From implementations for conversion to OsString.

Also see the changes in 1.0.0-beta.1 if upgrading from 0.5.1 or earlier.

v1.0.0-beta.1

2 years ago

Changed

  • Breaking Change Minimum supported Rust version is now 1.56.
  • Breaking Change The following methods on U16String and U32String have been renamed and replaced by functions with different semantics:
    • pop is now pop_char
    • remove is now remove_char
    • insert is now insert_char
  • Breaking Change Moved and renamed the following iterator types:
    • iter::Utf16Chars renamed to CharsUtf16 and moved to ustr and ucstr
    • iter::Utf32Chars renamed to CharsUtf32 and moved to ustr and ucstr
    • iter::CharsLossy split and renamed to CharsLossyUtf16 and CharsLossyUtf32 and moved to ustr and ucstr
    • iter::Utf16CharIndices renamed to CharIndicesUtf16 and moved to ustr and ucstr
    • iter::Utf16CharIndicesLossy renamed to CharIndicesLossyUtf16 and moved to ustr and ucstr
  • Breaking Change error::FromUtf16Error and error::FromUtf32Error has been renamed to Utf16Error and Utf32Error respectively and expanded with more details about the error.
  • Migrated crate to Rust 2021 edition.
  • The following methods on U16Str and U32Str are now const:
    • from_slice
    • as_slice
    • as_ptr
    • len
    • is_empty
  • The following methods on U16CStr and U32CStr are now const:
    • from_slice_unchecked
    • as_slice_with_nul
    • as_ptr
    • len
    • is_empty
  • The following methods on U16String and U32String are now const:
    • new

Added

  • Added new UTF-encoded string types and associated types:
    • Utf16Str
    • Utf32Str
    • Utf16String
    • Utf32String
  • Added macros to convert string literals into const wide string slices:
    • u16str!
    • u16cstr!
    • u32str!
    • u32cstr!
    • widestr!
    • widecstr!
    • utf16str!
    • utf32str!
  • Added NUL_TERMINATOR associated constant to U16CStr, U32CStr, U16CString, and U32CString.
  • Added DoubleEndedIterator and ExactSizeIterator implementations to a number of iterator types.
  • Added new UTF encoding functions alongside existing decode functions:
    • encode_utf8
    • encode_utf16
    • encode_utf32
  • Added various methods:
    • repeat on U16Str, U32Str, U16CStr, and U32CStr
    • shrink_to on U16String and U32String
    • retain on U16String and U32String
    • drain on U16String and U32String
    • replace_range on U16String and U32String
    • get, get_mut, get_unchecked, and get_unchecked_mut on U16CStr and U32CStr
    • split_at and split_at_mut on U16CStr and U32CStr
  • Added more trait implementations.

Removed

  • Breaking Change Functions and types deprecated in 0.5 have been removed.
  • Breaking Change The following types and traits, which were implementation details, have been removed. Use the existing non-generic types instead (e.g. use U16Str instead of UStr<u16>).
    • UChar
    • UStr
    • UCStr
    • UString
    • UCString
  • Breaking Change Removed IndexMut<RangeFull> trait implementation of U16CString and U32CString. Use the unsafe get_mut method instead, which also supports more ranges.

Fixed

  • Breaking Change The iterator returned by U16Str::char_indices and U16CStr::char_indices is now over (usize, Result<char, DecodeUtf16Error>) tuples instead of the reverse order, to better match standard library string iterators. The same is true of U16Str::char_indices_lossy and U16CStr::char_indices_lossy. This matches what was stated in original documentation.
  • U32Str::to_string and U32CStr::to_string now only allocate once instead of twice.

v0.5.1

2 years ago

Fixed

  • Fixed a regression in 0.5.0 where zero-length vectors and strings were incorrectly causing panics in UCString::from_vec and UCString::from_str. Fixes #22.
  • Modified an implentation detail in ustr::to_string & ustr::to_string_lossy to remove possibly unsafe behaviour.

v0.5.0

2 years ago

Changed

  • Breaking Change Renamed a number of types and functions to increase consistency and clarity. This also meant renaming errors to more clearly convey error and trying to be more consistent with name conventions and functionality across types. Check renamed function docs for any changes in functionality, as there have been some minor tweaks (mostly relaxing/removing error conditions and reducing panics). Old names have been deprecated to ease transition and will be removed in a future release. Fixes #18.
    • MissingNulError => error::MissingNulTerminator
    • FromUtf32Error => error::FromUtf32Error
    • NulError => error::ContainsNul
    • UCStr::from_ptr_with_nul => from_ptr_unchecked
    • UCStr::from_slice_with_nul => from_slice_truncate
    • UCStr::from_slice_with_nul_unchecked => from_slice_unchecked
    • U32CStr::from_char_ptr_with_nul => from_char_ptr_unchecked
    • U32CStr::from_char_slice_with_nul => from_char_slice_truncate
    • U32CStr::from_char_slice_with_nul_unchecked => from_char_slice_unchecked
    • UCString::new => from_vec
    • UCString::from_vec_with_nul => from_vec_truncate
    • UCString::from_ustr_with_nul => from_ustr_truncate
    • UCString::from_ptr_with_nul => from_ptr_truncate
    • UCString::from_str_with_nul => from_str_truncate
    • UCString::from_os_str_with_nul => from_os_str_truncate
    • U32CString::from_chars_with_nul => from_chars_truncate
    • U32CString::from_char_ptr_with_nul => from_char_ptr_truncate
  • Deprecated error types in the crate root. Use the errors directly from error module instead.
  • Improved implementations in some areas to reduce unncessary double allocations.
  • Improved Debug implementations. No more debugging lists of raw integer values.
  • Migrated crate to Rust 2018 edition.
  • Minimum supported Rust version is now 1.48.
  • Made crate package REUSE compliant.
  • Improved documentation and used intra-doc links.

Added

  • Added crate-level functions decode_utf16, decode_utf16_lossy, decode_utf32, and decode_utf32_lossy and associated iterators. Note that decode_utf16 is an alias of core::char::decode_utf16, but provided for consistency.
  • Added display method to to both UStr and UCStr to display strings in formatting without heap allocations, similar to Path::display. Fixes #20.
  • Added more trait implementations, including more index operations and string formatting via Write trait. Fixes #19.
  • Added new functions:
    • UStr::from_ptr_mut
    • UStr::from_slice_mut
    • UStr::as_mut_slice
    • UStr::as_mut_ptr
    • UStr::as_ptr_range
    • UStr::as_mut_ptr_range
    • UStr::get
    • UStr::get_mut
    • UStr::get_unchecked
    • UStr::get_unchecked_mut
    • UStr::split_at
    • UStr::split_at_mut
    • UStr::chars
    • UStr::chars_lossy
    • U16Str::char_indices
    • U16Str::char_indices_lossy
    • U32Str::from_char_ptr_mut
    • U32Str::from_char_slice_mut
    • UCStr::from_ptr
    • UCStr::from_ptr_truncate
    • UCStr::from_slice
    • UCStr::as_ustr
    • UCStr::from_ptr_str_mut
    • UCStr::from_ptr_mut
    • UCStr::from_ptr_truncate_mut
    • UCStr::from_ptr_unchecked_mut
    • UCStr::from_slice_mut
    • UCStr::from_slice_truncate_mut
    • UCStr::from_slice_unchecked_mut
    • UCStr::as_mut_slice
    • UCStr::as_mut_ptr
    • UCStr::as_ustr_with_nul
    • UCStr::as_mut_ustr
    • UCStr::as_ptr_range
    • UCStr::as_mut_ptr_range
    • UCStr::chars
    • UCStr::chars_lossy
    • U16CStr::char_indices
    • U16CStr::char_indices_lossy
    • U32CStr::from_char_ptr_str_mut
    • U32CStr::from_char_ptr_mut
    • U32CStr::from_char_ptr_truncate_mut
    • U32CStr::from_char_ptr_unchecked_mut
    • U32CStr::from_char_slice_mut
    • U32CStr::from_char_slice_truncate_mut
    • U32CStr::from_char_slice_unchecked_mut
    • U32CStr::from_char_ptr
    • U32CStr::from_char_ptr_truncate
    • U32CStr::from_char_slice
    • UString::as_vec
    • UString::as_mut_vec
    • UString::push_char
    • UString::truncate
    • UString::pop
    • UString::remove
    • UString::insert
    • UString::insert_ustr
    • UString::split_off
    • UCString::as_mut_ucstr
    • UCString::into_ustring
    • UCString::into_ustring_with_nul
    • U32CString::from_char_ptr_str

Deprecated

  • Deprecated functions as part of simplifying to increase clarity. These will be removed entirely in a future release.
    • UCString::from_vec_with_nul_unchecked. Use from_vec_unchecked instead.
    • UCString::from_ustr_with_nul_unchecked. Use from_ustr_unchecked instead.
    • UCString::from_ptr_with_nul_unchecked. Use from_ptr_unchecked instead.
    • UCString::from_str_with_nul_unchecked. Use from_str_unchecked instead.
    • UCString::from_os_str_with_nul_unchecked. Use from_os_str_unchecked instead.
    • U32CString::from_chars_with_nul_unchecked. Use from_chars_unchecked instead.
    • U32CString::from_char_ptr_with_nul_unchecked. Use from_char_ptr_unchecked instead.

v0.4.2

3 years ago

Fixed

  • Fixed compile errors on pre-1.36.0 Rust due to unstable alloc crate. Minimum supported version is Rust 1.34.2, the rust version for Debian stable. Fixes #14

v0.4.1

3 years ago

Changed

  • Now supports no_std. Added the std and alloc features, enabled by default. U16String, U32String, U16CString, and U32CString and their aliases all require the alloc or std feature. By @nicbn.

v0.4.0

5 years ago

Added

  • New U32String, U32Str, U32CString, and U32CStr types for dealing with UTF-32 FFI. These new types are roughly equivalent to the existing UTF-16 types.
  • WideChar is a type alias to u16 on Windows but u32 on non-Windows platforms.
  • The generic types UString, UStr, UCString and UCStr are used to implement the string types.

Changed

  • Breaking Change Existing wide string types have been renamed to U16String, U16Str, U16CString, and U16CStr (previously WideString, WideStr, etc.). Some function have also been renamed to reflect this change (wide_str to u16_str, etc.).
  • Breaking Change WideString, WideStr, WideCString, and WideCStr are now type aliases that vary between platforms. On Windows, these are aliases to the U16 types and are equivalent to the previous version, but on non-Windows platforms these alias the new U32 types instead. See crate documentation for more details.