#![no_std]
#![doc(html_root_url = "https://docs.rs/form-net")]
#![cfg_attr(docsrs, feature(doc_cfg))]
#![forbid(unsafe_code)]
#![deny(missing_docs)]
#![cfg_attr(
not(test),
deny(
clippy::unwrap_used,
clippy::expect_used,
clippy::panic,
clippy::indexing_slicing,
clippy::arithmetic_side_effects,
clippy::todo,
clippy::unimplemented,
clippy::unreachable,
clippy::dbg_macro,
clippy::print_stdout,
clippy::print_stderr
)
)]
#[cfg(any(feature = "alloc", test))]
extern crate alloc;
#[cfg(any(feature = "std", test))]
extern crate std;
mod error;
mod hook;
mod kind;
mod limits;
mod multipart;
mod scan;
mod urlencoded;
mod wipe;
pub use error::{
EncodingError, ExtractError, FormError, Limit, Location, PolicyRefusal, SyntaxError,
};
pub use hook::Refusal;
pub use kind::FormKind;
pub use limits::{
EmptyFilePolicy, ExtendedFilenamePolicy, HeaderPolicy, Limits, PercentPolicy, Policy,
TokenField, TokenPlacement,
};
pub use multipart::boundary::{Boundary, MAX_BOUNDARY_LEN, MAX_DELIMITER_LEN};
pub use multipart::filename::{FileName, FileNameSource};
pub use multipart::parser::{
Charset, ContentType, Event, Headers, MultipartParser, PartHead, PartKind, PartSummary, Step,
};
#[cfg(feature = "alloc")]
#[cfg_attr(docsrs, doc(cfg(feature = "alloc")))]
pub use multipart::{Multipart, Part, parse_multipart, parse_multipart_with};
pub use urlencoded::decode::decode_into;
pub use urlencoded::encode::encode_into;
#[cfg(feature = "alloc")]
#[cfg_attr(docsrs, doc(cfg(feature = "alloc")))]
pub use urlencoded::encode::{Serializer, serialize_urlencoded};
pub use urlencoded::raw::{RawPair, RawPairs, raw_pairs};
#[cfg(feature = "alloc")]
#[cfg_attr(docsrs, doc(cfg(feature = "alloc")))]
pub use urlencoded::{Form, Pairs, pairs, parse_query, parse_urlencoded, parse_urlencoded_with};
pub const VERSION: &str = env!("CARGO_PKG_VERSION");
#[cfg(test)]
mod tests {
use super::VERSION;
#[test]
fn test_version_matches_manifest() {
assert_eq!(VERSION, env!("CARGO_PKG_VERSION"));
assert_eq!(VERSION.split('.').count(), 3, "expected MAJOR.MINOR.PATCH");
}
#[test]
fn test_public_types_are_send_and_sync() {
fn send_sync<T: Send + Sync>() {}
send_sync::<super::Limits>();
send_sync::<super::Policy>();
send_sync::<super::Boundary>();
send_sync::<super::FormError>();
send_sync::<super::MultipartParser<&mut [u8]>>();
#[cfg(feature = "alloc")]
{
send_sync::<super::MultipartParser<alloc::vec::Vec<u8>>>();
send_sync::<super::Form>();
send_sync::<super::Multipart<'static>>();
}
}
}