use std::{fmt::Display, marker::PhantomData};
use crate::network::library::{DummyKey, FunctionLibrary, FunctionLibraryError};
pub struct ErroringLibrary<K = DummyKey> {
key: PhantomData<K>,
}
impl<K> Default for ErroringLibrary<K> {
fn default() -> Self {
Self::new()
}
}
impl<K> ErroringLibrary<K> {
pub fn new() -> Self {
Self { key: PhantomData }
}
}
impl<T, S, K: Display + Clone> FunctionLibrary<T, S> for ErroringLibrary<K> {
type Key = K;
fn apply(&self, key: &Self::Key, _tensor: T) -> Result<T, FunctionLibraryError<K>> {
Err(FunctionLibraryError::NotFound(key.clone()))
}
fn apply_scalar(
&self,
key: &Self::Key,
_scalar: S,
) -> anyhow::Result<S, FunctionLibraryError<Self::Key>> {
Err(FunctionLibraryError::NotFound(key.clone()))
}
}