Skip to main content

Mountain/ApplicationState/Internal/Serialization/
URLDeserializer.rs

1//! # URLDeserializer Module (Internal)
2//!
3//! ## RESPONSIBILITIES
4//! Deserializes JSON strings to URL objects for data transfer and storage.
5//!
6//! ## ARCHITECTURAL ROLE
7//! URLDeserializer is part of the **Internal::Serialization** module,
8//! providing URL deserialization utilities.
9//!
10//! ## KEY COMPONENTS
11//! - DeserializeURL: Function to deserialize JSON to URL
12//!
13//! ## ERROR HANDLING
14//! - Returns Result with URL or String error on parse failure
15//!
16//! ## LOGGING
17//! Operations are logged at appropriate levels (debug).
18//!
19//! ## PERFORMANCE CONSIDERATIONS
20//! - Efficient deserialization
21//! - Proper error handling
22//!
23//! ## TODO
24//! - [ ] Add URL validation after deserialization
25//! - [ ] Implement custom error recovery
26//! - [ ] Add performance metrics
27
28use serde::{Deserializer, de::Deserialize};
29use url::Url;
30
31use crate::dev_log;
32
33/// Deserializes a JSON string value to a URL.
34///
35/// # Arguments
36/// * `DeserializerInstance` - The serde deserializer instance
37///
38/// # Returns
39/// Result containing the parsed URL or deserialization error
40///
41/// # Behavior
42/// - Deserializes a string value
43/// - Parses the string as a URL
44/// - Returns parse error as custom deserialization error
45pub fn DeserializeURL<'de, D>(DeserializerInstance:D) -> Result<Url, D::Error>
46where
47	D: Deserializer<'de>, {
48	let string_value = String::deserialize(DeserializerInstance)?;
49
50	dev_log!("ipc", "[URLDeserializer] Deserializing URL: {}", string_value);
51
52	Url::parse(&string_value).map_err(serde::de::Error::custom)
53}