1 //! **arrayvec** provides the types [`ArrayVec`] and [`ArrayString`]:
2 //! array-backed vector and string types, which store their contents inline.
3 //!
4 //! The arrayvec package has the following cargo features:
5 //!
6 //! - `std`
7 //!   - Optional, enabled by default
8 //!   - Use libstd; disable to use `no_std` instead.
9 //!
10 //! - `serde`
11 //!   - Optional
12 //!   - Enable serialization for ArrayVec and ArrayString using serde 1.x
13 //!
14 //! - `zeroize`
15 //!   - Optional
16 //!   - Implement `Zeroize` for ArrayVec and ArrayString
17 //!
18 //! ## Rust Version
19 //!
20 //! This version of arrayvec requires Rust 1.51 or later.
21 //!
22 #![doc(html_root_url="https://docs.rs/arrayvec/0.7/")]
23 #![cfg_attr(not(feature="std"), no_std)]
24 
25 #[cfg(feature="serde")]
26 extern crate serde;
27 
28 #[cfg(not(feature="std"))]
29 extern crate core as std;
30 
31 pub(crate) type LenUint = u32;
32 
33 macro_rules! assert_capacity_limit {
34     ($cap:expr) => {
35         if std::mem::size_of::<usize>() > std::mem::size_of::<LenUint>() {
36             if $cap > LenUint::MAX as usize {
37                 panic!("ArrayVec: largest supported capacity is u32::MAX")
38             }
39         }
40     }
41 }
42 
43 macro_rules! assert_capacity_limit_const {
44     ($cap:expr) => {
45         if std::mem::size_of::<usize>() > std::mem::size_of::<LenUint>() {
46             if $cap > LenUint::MAX as usize {
47                 [/*ArrayVec: largest supported capacity is u32::MAX*/][$cap]
48             }
49         }
50     }
51 }
52 
53 mod arrayvec_impl;
54 mod arrayvec;
55 mod array_string;
56 mod char;
57 mod errors;
58 mod utils;
59 
60 pub use crate::array_string::ArrayString;
61 pub use crate::errors::CapacityError;
62 
63 pub use crate::arrayvec::{ArrayVec, IntoIter, Drain};
64