Skip to content

itsfoxstudio/value-extra

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

value-extra

Crates.io Documentation License CI

Extended value types for Rust — practical primitives beyond the standard library.

Installation

[dependencies]
value-extra = "0.1"

# With serde support
value-extra = { version = "0.1", features = ["serde"] }

Types

Patch<T>

A tri-state type for partial update semantics — distinguishing between "has value", "absent", and "explicitly null".

The Problem

When handling partial updates (PATCH requests, config merging, etc.), Option<T> conflates two distinct states:

  • Field is absent → don't touch the existing value
  • Field is explicitly null → clear/reset the value

The Solution

Patch<T> provides three states:

JSON Input Patch State Meaning
{ "name": "Alice" } Patch::Some("Alice") Set to value
{ "name": null } Patch::None Explicitly clear
{ } Patch::Empty Leave unchanged
use value_extra::Patch;

fn apply_name_patch(current: &mut Option<String>, patch: Patch<String>) {
    match patch {
        Patch::Some(new) => *current = Some(new),
        Patch::None => *current = None,  // explicitly clear
        Patch::Empty => {}               // no change
    }
}

Features

  • Option-like APImap, and_then, unwrap_or, filter, zip, and more
  • Serde support — feature-gated serialization with tri-state JSON handling
  • no_std compatible — works in embedded and WASM environments

See the full documentation for API details and serde usage examples.

License

MIT — see LICENSE for details.

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Packages

No packages published