|
@@ -564,30 +564,44 @@ impl Data {
|
|
pub fn is_nested(&self) -> bool {
|
|
pub fn is_nested(&self) -> bool {
|
|
matches!(self, Self::Vec(_) | Self::Map(_))
|
|
matches!(self, Self::Vec(_) | Self::Map(_))
|
|
}
|
|
}
|
|
- // socks, blue, bed
|
|
|
|
|
|
+ /// Is Data the Data::Vec variant (Vec<Data>)
|
|
pub fn is_vec(&self) -> bool {
|
|
pub fn is_vec(&self) -> bool {
|
|
matches!(self, Self::Vec(_))
|
|
matches!(self, Self::Vec(_))
|
|
}
|
|
}
|
|
|
|
+ /// Is Data the Data::Map variant (HashMap<String, Data>)
|
|
pub fn is_map(&self) -> bool {
|
|
pub fn is_map(&self) -> bool {
|
|
matches!(self, Self::Map(_))
|
|
matches!(self, Self::Map(_))
|
|
}
|
|
}
|
|
- pub fn push(&mut self, v: Data) {
|
|
|
|
|
|
+ /// Push a value into the Data
|
|
|
|
+ ///
|
|
|
|
+ /// Must be a Vec or no-op
|
|
|
|
+ pub fn vec_push(&mut self, v: Data) {
|
|
if let Self::Vec(vec) = self {
|
|
if let Self::Vec(vec) = self {
|
|
vec.push(v);
|
|
vec.push(v);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
- pub fn insert(&mut self, k: String, v: Data) {
|
|
|
|
|
|
+ /// Assigns/Reassigns a key the value into the Data
|
|
|
|
+ ///
|
|
|
|
+ /// Must be a Map or no-op
|
|
|
|
+ pub fn map_insert(&mut self, k: String, v: Data) {
|
|
if let Self::Map(hm) = self {
|
|
if let Self::Map(hm) = self {
|
|
hm.insert(k, v);
|
|
hm.insert(k, v);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
+ /// Obtains the length of String, Vec or Map
|
|
|
|
+ ///
|
|
|
|
+ /// All other variants of Data will return 0
|
|
pub fn len(&self) -> usize {
|
|
pub fn len(&self) -> usize {
|
|
match self {
|
|
match self {
|
|
|
|
+ Self::String(s) => s.len(),
|
|
Self::Vec(v) => v.len(),
|
|
Self::Vec(v) => v.len(),
|
|
Self::Map(m) => m.len(),
|
|
Self::Map(m) => m.len(),
|
|
_ => 0,
|
|
_ => 0,
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
+ /// Obtains the capacity of Vec or Map
|
|
|
|
+ ///
|
|
|
|
+ /// All other variants of Data return 0
|
|
pub fn capacity(&self) -> usize {
|
|
pub fn capacity(&self) -> usize {
|
|
match self {
|
|
match self {
|
|
Self::Vec(v) => v.capacity(),
|
|
Self::Vec(v) => v.capacity(),
|
|
@@ -595,6 +609,9 @@ impl Data {
|
|
_ => 0,
|
|
_ => 0,
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
+ /// Reserve {additional} in a Vec or Map
|
|
|
|
+ ///
|
|
|
|
+ /// This no-op's if the Data variants are not Vec or Map
|
|
pub fn reserve(&mut self, additional: usize) {
|
|
pub fn reserve(&mut self, additional: usize) {
|
|
match self {
|
|
match self {
|
|
Self::Vec(v) => v.reserve(additional),
|
|
Self::Vec(v) => v.reserve(additional),
|
|
@@ -602,6 +619,7 @@ impl Data {
|
|
_ => (),
|
|
_ => (),
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
+ /// Shrinks a Vec or Map to fit all that is within it
|
|
pub fn shrink_to_fit(&mut self) {
|
|
pub fn shrink_to_fit(&mut self) {
|
|
match self {
|
|
match self {
|
|
Self::Vec(v) => v.shrink_to_fit(),
|
|
Self::Vec(v) => v.shrink_to_fit(),
|
|
@@ -609,6 +627,7 @@ impl Data {
|
|
_ => (),
|
|
_ => (),
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
+ /// Shrinks to a given minimum length for Vec or Map
|
|
pub fn shrink_to(&mut self, min: usize) {
|
|
pub fn shrink_to(&mut self, min: usize) {
|
|
match self {
|
|
match self {
|
|
Self::Vec(v) => v.shrink_to(min),
|
|
Self::Vec(v) => v.shrink_to(min),
|
|
@@ -616,28 +635,36 @@ impl Data {
|
|
_ => (),
|
|
_ => (),
|
|
}
|
|
}
|
|
}
|
|
}
|
|
- pub fn truncate(&mut self, len: usize) {
|
|
|
|
|
|
+ /// Truncates Vec to a set length, see [Vec::truncate]
|
|
|
|
+ pub fn vec_truncate(&mut self, len: usize) {
|
|
if let Self::Vec(v) = self { v.truncate(len) }
|
|
if let Self::Vec(v) = self { v.truncate(len) }
|
|
}
|
|
}
|
|
- pub fn remove(&mut self, index: usize) -> Data {
|
|
|
|
|
|
+ /// Removes Vec at given index, see [Vec::remove]
|
|
|
|
+ pub fn vec_remove(&mut self, index: usize) -> Data {
|
|
match self {
|
|
match self {
|
|
Self::Vec(v) => v.remove(index),
|
|
Self::Vec(v) => v.remove(index),
|
|
_ => Data::None,
|
|
_ => Data::None,
|
|
}
|
|
}
|
|
}
|
|
}
|
|
- pub fn pop(&mut self) -> Option<Data> {
|
|
|
|
|
|
+ /// Removes the last item in the Vec, see [Vec::pop]
|
|
|
|
+ ///
|
|
|
|
+ /// This will return None also if the Data isn't a Vec
|
|
|
|
+ pub fn vec_pop(&mut self) -> Option<Data> {
|
|
match self {
|
|
match self {
|
|
Self::Vec(v) => v.pop(),
|
|
Self::Vec(v) => v.pop(),
|
|
_ => None,
|
|
_ => None,
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
+ /// Clears all in a String, Vec or Map
|
|
pub fn clear(&mut self) {
|
|
pub fn clear(&mut self) {
|
|
match self {
|
|
match self {
|
|
|
|
+ Self::String(s) => s.clear(),
|
|
Self::Vec(v) => v.clear(),
|
|
Self::Vec(v) => v.clear(),
|
|
Self::Map(m) => m.clear(),
|
|
Self::Map(m) => m.clear(),
|
|
_ => (),
|
|
_ => (),
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
+ /// Returns if String, Vec or Map is empty (has no elements)
|
|
pub fn is_empty(&self) -> bool {
|
|
pub fn is_empty(&self) -> bool {
|
|
match self {
|
|
match self {
|
|
Self::String(s) => s.is_empty(),
|
|
Self::String(s) => s.is_empty(),
|
|
@@ -646,34 +673,40 @@ impl Data {
|
|
_ => false,
|
|
_ => false,
|
|
}
|
|
}
|
|
}
|
|
}
|
|
- pub fn resize(&mut self, len: usize, value: Data) {
|
|
|
|
|
|
+ /// Resizes the Vec with the given length, assigning new with value
|
|
|
|
+ pub fn vec_resize(&mut self, len: usize, value: Data) {
|
|
if let Self::Vec(v) = self { v.resize(len, value) }
|
|
if let Self::Vec(v) = self { v.resize(len, value) }
|
|
}
|
|
}
|
|
- pub fn first(&self) -> Option<&Data> {
|
|
|
|
|
|
+ /// Obtains the first element in Vec
|
|
|
|
+ pub fn vec_first(&self) -> Option<&Data> {
|
|
match self {
|
|
match self {
|
|
Self::Vec(v) => v.first(),
|
|
Self::Vec(v) => v.first(),
|
|
_ => None,
|
|
_ => None,
|
|
}
|
|
}
|
|
}
|
|
}
|
|
- pub fn first_mut(&mut self) -> Option<&mut Data> {
|
|
|
|
|
|
+ /// Similar to [Data::vec_first] except it obtains as mutable
|
|
|
|
+ pub fn vec_first_mut(&mut self) -> Option<&mut Data> {
|
|
match self {
|
|
match self {
|
|
Self::Vec(v) => v.first_mut(),
|
|
Self::Vec(v) => v.first_mut(),
|
|
_ => None,
|
|
_ => None,
|
|
}
|
|
}
|
|
}
|
|
}
|
|
- pub fn last(&self) -> Option<&Data> {
|
|
|
|
|
|
+ /// Similar to [Data::vec_first] except obtains the last element of Vec
|
|
|
|
+ pub fn vec_last(&self) -> Option<&Data> {
|
|
match self {
|
|
match self {
|
|
Self::Vec(v) => v.last(),
|
|
Self::Vec(v) => v.last(),
|
|
_ => None,
|
|
_ => None,
|
|
}
|
|
}
|
|
}
|
|
}
|
|
- pub fn last_mut(&mut self) -> Option<&mut Data> {
|
|
|
|
|
|
+ /// Similar to [Data::vec_last] except obtains as mutable
|
|
|
|
+ pub fn vec_last_mut(&mut self) -> Option<&mut Data> {
|
|
match self {
|
|
match self {
|
|
Self::Vec(v) => v.last_mut(),
|
|
Self::Vec(v) => v.last_mut(),
|
|
_ => None,
|
|
_ => None,
|
|
}
|
|
}
|
|
}
|
|
}
|
|
- pub fn get<I>(&self, index: I) -> Option<&I::Output>
|
|
|
|
|
|
+ /// Gets by index or range for a Vec, see [Vec::get]
|
|
|
|
+ pub fn vec_get<I>(&self, index: I) -> Option<&I::Output>
|
|
where
|
|
where
|
|
I: SliceIndex<[Data]>,
|
|
I: SliceIndex<[Data]>,
|
|
{
|
|
{
|
|
@@ -682,6 +715,7 @@ impl Data {
|
|
_ => None,
|
|
_ => None,
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
+ /// Gets like [Data::vec_get] except as mutable
|
|
pub fn get_mut<I>(&mut self, index: I) -> Option<&mut I::Output>
|
|
pub fn get_mut<I>(&mut self, index: I) -> Option<&mut I::Output>
|
|
where
|
|
where
|
|
I: SliceIndex<[Data]>,
|
|
I: SliceIndex<[Data]>,
|
|
@@ -691,18 +725,26 @@ impl Data {
|
|
_ => None,
|
|
_ => None,
|
|
}
|
|
}
|
|
}
|
|
}
|
|
- pub fn swap(&mut self, a: usize, b: usize) {
|
|
|
|
|
|
+ /// Swaps a with b in a Vec, see [Vec::swap]
|
|
|
|
+ pub fn vec_swap(&mut self, a: usize, b: usize) {
|
|
if let Self::Vec(v) = self { v.swap(a, b) }
|
|
if let Self::Vec(v) = self { v.swap(a, b) }
|
|
}
|
|
}
|
|
- pub fn reverse(&mut self) {
|
|
|
|
|
|
+ /// Reverses the order of a Vec, see [Vec::reverse]
|
|
|
|
+ pub fn vec_reverse(&mut self) {
|
|
if let Self::Vec(v) = self { v.reverse() }
|
|
if let Self::Vec(v) = self { v.reverse() }
|
|
}
|
|
}
|
|
|
|
+ /// Attempts to form an iterator for Vec
|
|
|
|
+ ///
|
|
|
|
+ /// This can fail if Data isn't a Vec
|
|
pub fn vec_iter(&self) -> Option<Iter<'_, Data>> {
|
|
pub fn vec_iter(&self) -> Option<Iter<'_, Data>> {
|
|
match self {
|
|
match self {
|
|
Self::Vec(v) => Some(v.iter()),
|
|
Self::Vec(v) => Some(v.iter()),
|
|
_ => None,
|
|
_ => None,
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
+ /// Attempts to form a mutable iterator for Vec
|
|
|
|
+ ///
|
|
|
|
+ /// This can fail if Data isn't a Vec
|
|
pub fn vec_iter_mut(&mut self) -> Option<IterMut<'_, Data>> {
|
|
pub fn vec_iter_mut(&mut self) -> Option<IterMut<'_, Data>> {
|
|
match self {
|
|
match self {
|
|
Self::Vec(v) => Some(v.iter_mut()),
|
|
Self::Vec(v) => Some(v.iter_mut()),
|
|
@@ -722,4 +764,4 @@ impl Data {
|
|
_ => 0
|
|
_ => 0
|
|
}
|
|
}
|
|
}
|
|
}
|
|
-}
|
|
|
|
|
|
+}
|