use opendp_derive::bootstrap;
use crate::{
core::{Function, StabilityMap, Transformation},
domains::{AtomDomain, VectorDomain},
error::Fallible,
metrics::SymmetricDistance,
traits::{Hashable, Primitive},
};
use super::{DataFrame, DataFrameDomain};
#[cfg(feature = "ffi")]
mod ffi;
#[bootstrap(features("contrib"))]
#[deprecated(note = "Use Polars instead.", since = "0.12.0")]
pub fn make_select_column<K, TOA>(
key: K,
) -> Fallible<
Transformation<
DataFrameDomain<K>,
SymmetricDistance,
VectorDomain<AtomDomain<TOA>>,
SymmetricDistance,
>,
>
where
K: Hashable,
TOA: Primitive,
{
Transformation::new(
DataFrameDomain::new(),
SymmetricDistance,
VectorDomain::new(AtomDomain::default()),
SymmetricDistance,
Function::new_fallible(move |arg: &DataFrame<K>| -> Fallible<Vec<TOA>> {
arg.get(&key)
.ok_or_else(|| err!(FailedFunction, "column does not exist: {:?}", key))?
.as_form::<Vec<TOA>>()
.map(|c| c.clone())
}),
StabilityMap::new_from_constant(1),
)
}
#[cfg(test)]
mod test;