pdk_classy/extract/
already_extracted.rs

1// Copyright (c) 2025, Salesforce, Inc.,
2// All rights reserved.
3// For full license text, see the LICENSE.txt file
4
5use std::{any::type_name, marker::PhantomData};
6
7#[derive(thiserror::Error, Clone, Copy, PartialEq, Eq)]
8/// Indicates that the type has already been extracted from the context before and it implemented [`FromContextOnce`](super::FromContextOnce).
9pub struct AlreadyExtracted<T> {
10    _type: PhantomData<T>,
11}
12
13impl<T> Default for AlreadyExtracted<T> {
14    fn default() -> Self {
15        Self { _type: PhantomData }
16    }
17}
18
19impl<T> std::fmt::Debug for AlreadyExtracted<T> {
20    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
21        let ty = type_name::<Self>();
22        f.debug_struct(ty).finish()
23    }
24}
25
26impl<T> std::fmt::Display for AlreadyExtracted<T> {
27    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
28        let ty = type_name::<T>();
29        f.write_fmt(format_args!(r#"Type "{ty} already extracted"#))
30    }
31}