The format is based on Keep a Changelog and this project adheres to Semantic Versioning.
1.0.2 - 2022-07-15
- Correctly check for and error on nul values in C-string macros
u16cstr!
,u32cstr!
, andwidecstr!
. Fixes #28.
1.0.1 - 2022-06-24
- Reduce collision potential for macros. By @OpenByteDev.
1.0.0 - 2022-06-21
- Breaking Change Minimum supported Rust version is now 1.58.
- Added
#[must_use]
attributes to many crate functions, as appropriate. - Remove
unsafe
qualifiers fromas_mut_ptr
andas_mut_ptr_range
to match standard library. By @yescallop.
- Added
new
function that creates and empty string toU16CString
andU32CString
to match other string types. - Additional
From
implementations for conversion toOsString
.
1.0.0-beta.1 - 2021-11-08
- Breaking Change Minimum supported Rust version is now 1.56.
- Breaking Change The following methods on
U16String
andU32String
have been renamed and replaced by functions with different semantics:pop
is nowpop_char
remove
is nowremove_char
insert
is nowinsert_char
- Breaking Change Moved and renamed the following iterator types:
iter::Utf16Chars
renamed toCharsUtf16
and moved toustr
anducstr
iter::Utf32Chars
renamed toCharsUtf32
and moved toustr
anducstr
iter::CharsLossy
split and renamed toCharsLossyUtf16
andCharsLossyUtf32
and moved toustr
anducstr
iter::Utf16CharIndices
renamed toCharIndicesUtf16
and moved toustr
anducstr
iter::Utf16CharIndicesLossy
renamed toCharIndicesLossyUtf16
and moved toustr
anducstr
- Breaking Change
error::FromUtf16Error
anderror::FromUtf32Error
has been renamed toUtf16Error
andUtf32Error
respectively and expanded with more details about the error. - Migrated crate to Rust 2021 edition.
- The following methods on
U16Str
andU32Str
are nowconst
:from_slice
as_slice
as_ptr
len
is_empty
- The following methods on
U16CStr
andU32CStr
are nowconst
:from_slice_unchecked
as_slice_with_nul
as_ptr
len
is_empty
- The following methods on
U16String
andU32String
are nowconst
:new
- 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 toU16CStr
,U32CStr
,U16CString
, andU32CString
. - Added
DoubleEndedIterator
andExactSizeIterator
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
onU16Str
,U32Str
,U16CStr
, andU32CStr
shrink_to
onU16String
andU32String
retain
onU16String
andU32String
drain
onU16String
andU32String
replace_range
onU16String
andU32String
get
,get_mut
,get_unchecked
, andget_unchecked_mut
onU16CStr
andU32CStr
split_at
andsplit_at_mut
onU16CStr
andU32CStr
- Added more trait implementations.
- 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 ofUStr<u16>
).UChar
UStr
UCStr
UString
UCString
- Breaking Change Removed
IndexMut<RangeFull>
trait implementation ofU16CString
andU32CString
. Use the unsafeget_mut
method instead, which also supports more ranges.
- Breaking Change The iterator returned by
U16Str::char_indices
andU16CStr::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 ofU16Str::char_indices_lossy
andU16CStr::char_indices_lossy
. This matches what was stated in original documentation. U32Str::to_string
andU32CStr::to_string
now only allocate once instead of twice.
0.5.1 - 2021-10-23
- Fixed a regression in 0.5.0 where zero-length vectors and strings were incorrectly causing panics
in
UCString::from_vec
andUCString::from_str
. Fixes #22. - Modified an implentation detail in
ustr::to_string
&ustr::to_string_lossy
to remove possibly unsafe behaviour.
0.5.0 - 2021-10-12
- Breaking Change Minimum supported Rust version is now 1.48.
- 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
- 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.
- Made crate package REUSE compliant.
- Improved documentation and used intra-doc links.
- Added crate-level functions
decode_utf16
,decode_utf16_lossy
,decode_utf32
, anddecode_utf32_lossy
and associated iterators. Note thatdecode_utf16
is an alias ofcore::char::decode_utf16
, but provided for consistency. - Added
display
method to to bothUStr
andUCStr
to display strings in formatting without heap allocations, similar toPath::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 functions as part of simplifying to increase clarity. These will be removed entirely
in a future release.
MissingNulError
. Useerror::MissingNulTerminator
instead.FromUtf32Error
. Useerror::FromUtf32Error
instead.NulError
. Useerror::ContainsNul
instead.UCStr::from_ptr_with_nul
. Usefrom_ptr_unchecked
instead.UCStr::from_slice_with_nul
. Usefrom_slice_truncate
instead.UCStr::from_slice_with_nul_unchecked
. Usefrom_slice_unchecked
instead.U32CStr::from_char_ptr_with_nul
. Usefrom_char_ptr_unchecked
instead.U32CStr::from_char_slice_with_nul
. Usefrom_char_slice_truncate
instead.U32CStr::from_char_slice_with_nul_unchecked
. Usefrom_char_slice_unchecked
instead.UCString::new
. Usefrom_vec
instead.UCString::from_vec_with_nul_unchecked
. Usefrom_vec_unchecked
instead.UCString::from_ustr_with_nul_unchecked
. Usefrom_ustr_unchecked
instead.UCString::from_ptr_with_nul_unchecked
. Usefrom_ptr_unchecked
instead.UCString::from_str_with_nul_unchecked
. Usefrom_str_unchecked
instead.UCString::from_os_str_with_nul_unchecked
. Usefrom_os_str_unchecked
instead.UCString::from_vec_with_nul
. Usefrom_vec_truncate
instead.UCString::from_ustr_with_nul
. Usefrom_ustr_truncate
instead.UCString::from_ptr_with_nul
. Usefrom_ptr_truncate
instead.UCString::from_str_with_nul
. Usefrom_str_truncate
instead.UCString::from_os_str_with_nul
. Usefrom_os_str_truncate
instead.U32CString::from_chars_with_nul_unchecked
. Usefrom_chars_unchecked
instead.U32CString::from_char_ptr_with_nul_unchecked
. Usefrom_char_ptr_unchecked
instead.U32CString::from_chars_with_nul
. Usefrom_chars_truncate
instead.U32CString::from_char_ptr_with_nul
. Usefrom_char_ptr_truncate
instead.
- Deprecated error types in the crate root. Use the errors directly from
error
module instead.
0.4.3 - 2020-10-05
- Fixed undefined behaviours and cleaned up clippy warnings. By @joshwd36.
0.4.2 - 2020-06-09
- 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.
0.4.1 - 2020-06-08
- Now supports
no_std
. Added thestd
andalloc
features, enabled by default.U16String
,U32String
,U16CString
, andU32CString
and their aliases all require thealloc
orstd
feature. By @nicbn.
0.4.0 - 2018-08-18
- New
U32String
,U32Str
,U32CString
, andU32CStr
types for dealing with UTF-32 FFI. These new types are roughly equivalent to the existing UTF-16 types. WideChar
is a type alias tou16
on Windows butu32
on non-Windows platforms.- The generic types
UString
,UStr
,UCString
andUCStr
are used to implement the string types.
- Breaking Change Existing wide string types have been renamed to
U16String
,U16Str
,U16CString
, andU16CStr
(previouslyWideString
,WideStr
, etc.). Some function have also been renamed to reflect this change (wide_str
tou16_str
, etc.). - Breaking Change
WideString
,WideStr
,WideCString
, andWideCStr
are now type aliases that vary between platforms. On Windows, these are aliases to theU16
types and are equivalent to the previous version, but on non-Windows platforms these alias the newU32
types instead. See crate documentation for more details.
0.3.0 - 2018-03-17
- Additional unchecked functions on
WideCString
. - All types now implement
Default
. WideString::shrink_to_fit
WideString::into_boxed_wide_str
andBox<WideStr>::into_wide_string
.WideCString::into_boxed_wide_c_str
andBox<WideCStr>::into_wide_c_string
.From
andDefault
implementations for boxedWideStr
and boxedWideCStr
.
- Renamed
WideCString::from_vec
to replaceWideCString::new
. To create empty string, useWideCString::default()
now. WideCString
now implementsDrop
, which sets the string to an empty string to prevent invalid unsafe code from working correctly when it should otherwise break. Also seeDrop
implementation ofCString
.- Writing changelog manually.
- Upgraded winapi dev dependency.
- Now requires at least Rust 1.17+ to compile (previously, was Rust 1.8).
0.2.2 - 2016-09-09
- Make
WideCString::into_raw
correctly forget the original self.
0.2.1 - 2016-08-12
into_raw
/from_raw
onWideCString
. Closes #2.
0.2.0 - 2016-05-31
Default
trait to wide strings.- Traits for conversion of strings to
Cow
.
- Methods & traits to bring to parity with Rust 1.9 string APIs.
- Initial release.