// yt - A fully featured command line YouTube client // // Copyright (C) 2025 Benedikt Peetz // SPDX-License-Identifier: GPL-3.0-or-later // // This file is part of Yt. // // You should have received a copy of the License along with this program. // If not, see . #[macro_export] macro_rules! wrap_progress_hook { ($name:ident, $new_name:ident) => { yt_dlp::wrap_hook! {"progress_hook", $name, $new_name} }; } #[macro_export] macro_rules! wrap_post_processor_hook { ($name:ident, $new_name:ident) => { yt_dlp::wrap_hook! {"post_processor_hook", $name, $new_name} }; } #[macro_export] macro_rules! wrap_hook { ($ty:literal, $name:ident, $new_name:ident) => { pub(crate) fn $new_name( py: yt_dlp::hooks::__priv::pyo3::Python<'_>, ) -> yt_dlp::hooks::__priv::pyo3::PyResult< yt_dlp::hooks::__priv::pyo3::Bound<'_, yt_dlp::hooks::__priv::pyo3::types::PyCFunction>, > { #[yt_dlp::hooks::__priv::pyo3::pyfunction] #[pyo3(crate = "yt_dlp::hooks::__priv::pyo3")] fn inner( input: yt_dlp::hooks::__priv::pyo3::Bound< '_, yt_dlp::hooks::__priv::pyo3::types::PyDict, >, ) -> yt_dlp::hooks::__priv::pyo3::PyResult<()> { let processed_input = { let new_dict = yt_dlp::hooks::__priv::filter_dict(input); yt_dlp::hooks::__priv::json_dumps(&new_dict) }; $name(processed_input)?; Ok(()) } let module = yt_dlp::hooks::__priv::pyo3::types::PyModule::new(py, $ty)?; let fun = yt_dlp::hooks::__priv::pyo3::wrap_pyfunction!(inner, module)?; Ok(fun) } }; } pub mod __priv { pub use crate::info_json::{json_dumps, json_loads, filter_dict}; pub use pyo3; }