7 releases

Uses new Rust 2024

new 0.3.3 Jul 8, 2025
0.3.2 Jul 8, 2025
0.2.1 Mar 16, 2025
0.1.0 Mar 10, 2025

#4 in #foxtive

Download history 65/week @ 2025-03-18 30/week @ 2025-03-25 27/week @ 2025-04-01 3/week @ 2025-04-08 11/week @ 2025-04-15 9/week @ 2025-04-22 17/week @ 2025-04-29 33/week @ 2025-05-06 22/week @ 2025-05-13 7/week @ 2025-05-20 1/week @ 2025-05-27 2/week @ 2025-06-10 5/week @ 2025-06-24 169/week @ 2025-07-01

176 downloads per month
Used in foxtive-ntex

MIT license

87KB
2K SLoC

Foxtive Ntex Multipart

This is a simple multipart parser built for Ntex.rs

A powerful and flexible multipart form data parser with support for:

  • File uploads with validation (size, type, count)
  • Custom types that implement FromStr
  • Optional UUID support via feature flags
  • Type-safe parsing for all primitive types
  • Option support for optional fields
  • Comprehensive error handling

Installation

Basic Installation

cargo add foxtive-ntex-multipart

With UUID Support

cargo add foxtive-ntex-multipart --features uuid

Cargo.toml Configuration

[dependencies]
# Basic installation
foxtive-ntex-multipart = "0.3"

# With UUID support
foxtive-ntex-multipart = { version = "0.3", features = ["uuid"] }

Features

Optional Features

  • uuid - Enables support for parsing uuid::Uuid from multipart data

Usage

Basic Type Parsing

use foxtive_ntex_multipart::Multipart;

// Parse various types from multipart data
let user_id: i32 = multipart.post("user_id")?;
let username: String = multipart.post("username")?;
let is_active: bool = multipart.post("is_active")?;
let price: f64 = multipart.post("price")?;

Optional Fields

// Optional fields return None if missing or empty
let optional_age: Option<i32> = multipart.post("age")?;
let optional_email: Option<String> = multipart.post("email")?;

Default Values

// Provide default values for missing fields
let priority = multipart.post_or("priority", false);
let timeout = multipart.post_or("timeout", 30);

UUID Support (with uuid feature)

use uuid::Uuid;

// Parse UUIDs from multipart data
let user_id: Uuid = multipart.post("user_id")?;
let optional_session: Option<Uuid> = multipart.post("session_id")?;
let default_id = multipart.post_or("missing_id", Uuid::new_v4());

Custom Types

use foxtive_ntex_multipart::impl_post_parseable_for_custom_type;
use std::str::FromStr;

#[derive(Debug, PartialEq)]
struct UserId(u64);

impl FromStr for UserId {
    type Err = std::num::ParseIntError;
    fn from_str(s: &str) -> Result<Self, Self::Err> {
        Ok(UserId(s.parse()?))
    }
}

// Enable multipart parsing for your custom type
impl_post_parseable_for_custom_type!(UserId);

// Now you can use it in multipart parsing
let user_id: UserId = multipart.post("user_id")?;
let optional_id: Option<UserId> = multipart.post("optional_id")?;

Supported Types

The library automatically supports all types that implement FromStr:

Primitive Types:

  • Integers: i8, i16, i32, i64, i128, isize, u8, u16, u32, u64, u128, usize
  • Floats: f32, f64
  • Other: bool, char, String

Standard Library Types:

  • Network: IpAddr, Ipv4Addr, Ipv6Addr, SocketAddr, SocketAddrV4, SocketAddrV6
  • Path: PathBuf
  • NonZero: All NonZero* integer types

Optional Types:

  • uuid::Uuid (with uuid feature)

Custom Types:

  • Any type implementing FromStr via the impl_post_parseable_for_custom_type! macro

🙌 Contributing

Contributions, bug reports, and feature requests are welcome! Feel free to open issues or PRs.

License

This project is licensed under the MIT License.

Dependencies

~16–30MB
~543K SLoC