qubit-value 0.10.0

Type-safe containers for single, multi-valued, and named runtime values
Documentation
// =============================================================================
//    Copyright (c) 2025 - 2026 Haixing Hu.
//
//    SPDX-License-Identifier: Apache-2.0
//
//    Licensed under the Apache License, Version 2.0.
// =============================================================================

//! Owned canonical wide integer parsed for collection adapters.

use std::fmt;
use std::marker::PhantomData;
use std::str::FromStr;

use serde::{
    Deserialize,
    Deserializer,
};

use super::IntegerVisitor;

/// Deserializable wrapper used by collection adapters.
pub(in crate::wide_integer) struct ParsedInteger<T>(
    /// Parsed integer value.
    pub(in crate::wide_integer) T,
);

impl<'de, T> Deserialize<'de> for ParsedInteger<T>
where
    T: FromStr + fmt::Display,
    T::Err: fmt::Display,
{
    /// Deserializes one canonical integer string.
    fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
    where
        D: Deserializer<'de>,
    {
        deserializer
            .deserialize_str(IntegerVisitor(PhantomData))
            .map(Self)
    }
}