use super::super::Error;
use crate::model::hosting_provider_id::HostingProviderId;
use serde::Deserialize;
#[derive(Deserialize, Debug)]
struct Limits {
#[serde(rename = "categorymembers")]
category_members: usize,
}
#[derive(Deserialize, Debug)]
struct Page {
title: String,
}
#[derive(Deserialize, Debug)]
struct Query {
#[serde(rename = "categorymembers")]
category_members: Vec<Page>,
}
#[derive(Deserialize, Debug)]
pub(super) struct Projects {
limits: Limits,
query: Query,
}
impl Projects {
pub fn check_limit(&self, hosting_provider: HostingProviderId) -> Result<(), Error> {
if self.query.category_members.len() == self.limits.category_members {
return Err(Error::FetchLimitReached(
hosting_provider,
self.limits.category_members,
));
}
Ok(())
}
}
impl From<Projects> for Vec<String> {
fn from(value: Projects) -> Self {
value
.query
.category_members
.iter()
.map(|p| p.title.clone())
.collect()
}
}