// 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! mk_python_function { ($name:ident, $new_name:ident) => { pub fn $new_name( mut args: $crate::progress_hook::__priv::vm::function::FuncArgs, vm: &$crate::progress_hook::__priv::vm::VirtualMachine, ) { use $crate::progress_hook::__priv::vm; let input = { let dict: vm::PyRef = args .args .remove(0) .downcast() .expect("The progress hook is always called with these args"); let new_dict = vm::builtins::PyDict::new_ref(&vm.ctx); dict.into_iter() .filter_map(|(name, value)| { let real_name: vm::PyRefExact = name.downcast_exact(vm).expect("Is a string"); let name_str = real_name.to_str().expect("Is a string"); if name_str.starts_with('_') { None } else { Some((name_str.to_owned(), value)) } }) .for_each(|(key, value)| { new_dict .set_item(&key, value, vm) .expect("This is a transpositions, should always be valid"); }); $crate::progress_hook::__priv::json_dumps(new_dict, vm) }; $name(input).expect("Shall not fail!"); } }; } pub mod __priv { pub use crate::info_json::{json_dumps, json_loads}; pub use rustpython::vm; }