Expand description

Iranian National Number utils (national-id Cargo feature).

§Example
use rust_persian_tools::national_id::{NationalIdError, verify_iranian_national_id};

assert!(verify_iranian_national_id("11537027").is_ok());
assert!(verify_iranian_national_id("0076229645").is_ok());
assert!(verify_iranian_national_id("1583250689").is_ok());

assert_eq!(
    verify_iranian_national_id("12345"),
    Err(NationalIdError::Length(5)),
);
assert_eq!(
    verify_iranian_national_id("9999999999"),
    Err(NationalIdError::Invalid)
);
§serde Integration
§National Number
use rust_persian_tools::national_id::serde::national_id_de;

#[derive(Debug, PartialEq, serde::Deserialize)]
struct MyStruct {
    #[serde(deserialize_with = "national_id_de")]
    id: String,
}

let json_str = "{\"id\": \"0076229645\"}";
let my_struct: MyStruct = serde_json::from_str(json_str).unwrap();
assert_eq!(my_struct, MyStruct{id: "0076229645".to_string()});

let json_str_invalid = "{\"id\": \"ZeroOneTwo\"}";
assert!(serde_json::from_str::<MyStruct>(json_str_invalid).is_err());
assert_eq!(
    serde_json::from_str::<MyStruct>(json_str_invalid).err().unwrap().to_string(),
    "Could not convert National Number to numeric at line 1 column 19".to_string(),
);
§Option<National Number>
use rust_persian_tools::national_id::serde::national_id_option_de;

#[derive(Debug, PartialEq, serde::Deserialize)]
struct MyStruct {
    #[serde(default, deserialize_with = "national_id_option_de")]
    id: Option<String>,
}

let json_str = "{}";
let my_struct: MyStruct = serde_json::from_str(json_str).unwrap();
assert_eq!(my_struct, MyStruct{id: None});
let json_str = "{\"id\": \"0076229645\"}";
let my_struct: MyStruct = serde_json::from_str(json_str).unwrap();
assert_eq!(my_struct, MyStruct{id: Some("0076229645".to_string())});

Modules§

  • serde helpers to deserialize Iranian National Number. Enabled if serde Cargo feature is enabled.

Enums§

  • Possible errors during validation of Iranian National Number.

Functions§