camel_case_token_with_comment/
extract_token_name_field.rs

1// ---------------- [ File: camel-case-token-with-comment/src/extract_token_name_field.rs ]
2crate::ix!();
3
4/// Extracts the "token_name" field from a JSON object.
5///
6/// # Arguments
7/// * `json` - A reference to a `serde_json::Value` object.
8///
9/// # Returns
10/// * `Result<&str, TokenParseError>` - The token name as a string slice,
11///   or an error if the field is missing or invalid.
12pub fn extract_token_name_field(json: &serde_json::Value) -> Result<&str, TokenParseError> {
13    json.get("token_name")
14        .and_then(|tn| tn.as_str())
15        .ok_or(TokenParseError::InvalidTokenName)
16}
17
18
19#[cfg(test)]
20mod test_extract_token_name_field {
21    use super::*;
22
23    #[traced_test]
24    fn test_extract_token_name_valid() {
25        tracing::info!("Testing extract_token_name_field with valid data");
26        let json_data = json!({ "token_name": "example_token" });
27        let result = extract_token_name_field(&json_data);
28        pretty_assert_eq!(result, Ok("example_token"));
29    }
30
31    #[traced_test]
32    fn test_extract_token_name_missing_field() {
33        tracing::info!("Testing extract_token_name_field with missing field");
34        let json_data = json!({ "other_field": "value" });
35        let result = extract_token_name_field(&json_data);
36        assert!(matches!(result, Err(TokenParseError::InvalidTokenName)));
37    }
38
39    #[traced_test]
40    fn test_extract_token_name_field_not_string() {
41        tracing::info!("Testing extract_token_name_field with non-string field");
42        let json_data = json!({ "token_name": 123 });
43        let result = extract_token_name_field(&json_data);
44        assert!(matches!(result, Err(TokenParseError::InvalidTokenName)));
45    }
46
47    #[traced_test]
48    fn test_extract_token_name_empty_json() {
49        tracing::info!("Testing extract_token_name_field with empty JSON object");
50        let json_data = json!({});
51        let result = extract_token_name_field(&json_data);
52        assert!(matches!(result, Err(TokenParseError::InvalidTokenName)));
53    }
54
55    #[traced_test]
56    fn test_extract_token_name_null_field() {
57        tracing::info!("Testing extract_token_name_field with null token_name field");
58        let json_data = json!({ "token_name": null });
59        let result = extract_token_name_field(&json_data);
60        assert!(matches!(result, Err(TokenParseError::InvalidTokenName)));
61    }
62}