cl_aux/traits/
dyn_string.rs

1use crate::{Capacity, Clear, Push, Truncate, WithCapacity};
2use core::{
3  fmt::Write,
4  ops::{Deref, DerefMut},
5};
6
7/// Dynamic String
8///
9/// Any owned growing string-like structure that `cl-aux` knows should implement this trait.
10///
11#[cfg_attr(feature = "alloc", doc = "```rust")]
12#[cfg_attr(not(feature = "alloc"), doc = "```ignore")]
13/// fn stuff<S>(s: &mut S)
14/// where
15///     S: cl_aux::DynString
16/// {
17///     s.clear();
18///     s.push("World").unwrap();
19///     s.truncate(1);
20/// }
21///
22/// let mut s = String::from("Hello");
23/// stuff(&mut s);
24/// assert_eq!(s, "W");
25/// ```
26pub trait DynString:
27  AsRef<str>
28  + Capacity
29  + Clear
30  + Default
31  + Deref<Target = str>
32  + DerefMut
33  + crate::Extend<char, Error = crate::Error>
34  + Push<char, Error = crate::Error>
35  + for<'str> Push<&'str str, Error = crate::Error>
36  + Truncate<Input = usize>
37  + WithCapacity<Input = usize>
38  + Write
39{
40}
41
42impl<T> DynString for T where
43  T: AsRef<str>
44    + Capacity
45    + Clear
46    + Default
47    + Deref<Target = str>
48    + DerefMut
49    + crate::Extend<char, Error = crate::Error>
50    + Push<char, Error = crate::Error>
51    + for<'str> Push<&'str str, Error = crate::Error>
52    + Truncate<Input = usize>
53    + WithCapacity<Input = usize>
54    + Write
55{
56}