// 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 yt_dlp::wrapper::info_json::Comment; #[derive(Debug, Clone)] pub struct CommentExt { pub value: Comment, pub replies: Vec, } #[derive(Debug, Default)] pub struct Comments { pub(super) vec: Vec, } impl Comments { pub fn new() -> Self { Self::default() } pub fn push(&mut self, value: CommentExt) { self.vec.push(value); } pub fn get_mut(&mut self, key: &str) -> Option<&mut CommentExt> { self.vec.iter_mut().filter(|c| c.value.id.id == key).last() } pub fn insert(&mut self, key: &str, value: CommentExt) { let parent = self .vec .iter_mut() .filter(|c| c.value.id.id == key) .last() .expect("One of these should exist"); parent.push_reply(value); } } impl CommentExt { pub fn push_reply(&mut self, value: CommentExt) { self.replies.push(value) } pub fn get_mut_reply(&mut self, key: &str) -> Option<&mut CommentExt> { self.replies .iter_mut() .filter(|c| c.value.id.id == key) .last() } } impl From for CommentExt { fn from(value: Comment) -> Self { Self { replies: vec![], value, } } }