// yt - A fully featured command line YouTube client // // Copyright (C) 2024 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 . use pyo3::{types::PyDict, Bound, PyResult, Python}; use serde::Serialize; use crate::json_loads; #[derive(Serialize, Clone)] pub struct YtDlpOptions { pub playliststart: u32, pub playlistend: u32, pub noplaylist: bool, pub extract_flat: ExtractFlat, // pub extractor_args: ExtractorArgs, // pub format: String, // pub fragment_retries: u32, // #[serde(rename(serialize = "getcomments"))] // pub get_comments: bool, // #[serde(rename(serialize = "ignoreerrors"))] // pub ignore_errors: bool, // pub retries: u32, // #[serde(rename(serialize = "writeinfojson"))] // pub write_info_json: bool, // pub postprocessors: Vec>, } #[derive(Serialize, Copy, Clone)] pub enum ExtractFlat { #[serde(rename(serialize = "in_playlist"))] InPlaylist, #[serde(rename(serialize = "discard_in_playlist"))] DiscardInPlaylist, } #[derive(Serialize, Clone)] pub struct ExtractorArgs { pub youtube: YoutubeExtractorArgs, } #[derive(Serialize, Clone)] pub struct YoutubeExtractorArgs { comment_sort: Vec, max_comments: Vec, } impl YtDlpOptions { pub fn to_py_dict(self, py: Python) -> PyResult> { let string = serde_json::to_string(&self).expect("This should always work"); let output: Bound = json_loads(py, string)?; Ok(output) } }