#operator #comparison #relational #string-parser

later_operator

Parsable, storable, printable comparison operators, w/ optional serde support

8 unstable releases (3 breaking)

new 0.4.1 Nov 5, 2024
0.4.0 Sep 5, 2024
0.3.0 Jul 29, 2024
0.2.0 Feb 8, 2024
0.1.0 Feb 10, 2023

#414 in Encoding

WTFPL license

20KB
327 lines

Later Operator

docs.rs changelog
crates.io ci deps.rs
license contributions welcome

This library provides a ComparisonOperator enum that can be used to parse, store, evaluate, and/or print Rust's relational operators: !=, <, <=, ==, >=, >.

Examples

use later_operator::ComparisonOperator;

// Parse from a string, then compare two arbitrary values.
let op = ComparisonOperator::try_from("<=").unwrap();
assert!(op.compare(&3_u8, &u8::MAX)); // 3 <= 255

// Re-stringify the operator for printing or whatever.
assert_eq!(
    format!("3 {op} 255"),
    "3 <= 255",
);

// Leading/trailing whitespace is ignored when parsing.
assert_eq!(
    ComparisonOperator::try_from("==").unwrap(),
    ComparisonOperator::try_from(" ==\n").unwrap(),
);

// But the value has to make sense or it will fail.
assert!(ComparisonOperator::try_from("~").is_err());

When the optional serde crate feature is enabled, ComparisonOperator can be de/serialized as a string too:

use later_operator::ComparisonOperator;
use serde::{Deserialize, Serialize};

#[derive(Debug, Clone, Deserialize, Serialize)]
struct AffectedVersion {
    operator: ComparisonOperator,
    version: String,
}

Installation

Add later_operator to your dependencies in Cargo.toml, like:

[dependencies]
later_operator = "0.4.*"

Dependencies

~165KB