use std::marker::PhantomData;
use crate::auth::AuthToken;
use crate::crawler::JsonCrawlerBorrowed;
use crate::parse::ProcessedResult;
use crate::query::Query;
use crate::Result;
#[derive(PartialEq, Debug)]
pub struct RawResult<'a, Q, A>
where
Q: Query<A>,
A: AuthToken,
{
token: PhantomData<A>,
pub query: &'a Q,
pub json: String,
}
impl<'a, Q: Query<A>, A: AuthToken> RawResult<'a, Q, A> {
pub fn from_raw(json: String, query: &'a Q) -> Self {
Self {
query,
token: PhantomData,
json,
}
}
pub fn destructure_json(self) -> String {
self.json
}
pub fn process(self) -> Result<ProcessedResult<'a, Q>> {
A::deserialize_json(self)
}
}
pub fn process_fixed_column_item<'a>(
item: &'a mut JsonCrawlerBorrowed,
col_idx: usize,
) -> Result<JsonCrawlerBorrowed<'a>> {
let pointer = format!("/fixedColumns/{col_idx}/musicResponsiveListItemFixedColumnRenderer");
item.borrow_pointer(pointer)
}
pub fn process_flex_column_item<'a>(
item: &'a mut JsonCrawlerBorrowed,
col_idx: usize,
) -> Result<JsonCrawlerBorrowed<'a>> {
let pointer = format!("/flexColumns/{col_idx}/musicResponsiveListItemFlexColumnRenderer");
item.borrow_pointer(pointer)
}