use crate::error::Result;
use crate::http::Requester;
use crate::pagination::PageStream;
use serde::{Deserialize, Serialize};
use std::sync::Arc;
#[derive(Debug, Clone, Deserialize, Serialize)]
pub struct EPortfolioPage {
pub id: u64,
pub eportfolio_id: Option<u64>,
pub position: Option<u64>,
pub name: Option<String>,
pub content: Option<String>,
pub created_at: Option<String>,
pub updated_at: Option<String>,
}
#[derive(Debug, Clone, Deserialize, Serialize, canvas_lms_api_derive::CanvasResource)]
pub struct EPortfolio {
pub id: u64,
pub user_id: Option<u64>,
pub name: Option<String>,
pub public: Option<bool>,
pub created_at: Option<String>,
pub updated_at: Option<String>,
pub deleted_at: Option<String>,
pub spam_status: Option<String>,
#[serde(skip)]
pub(crate) requester: Option<Arc<Requester>>,
}
impl EPortfolio {
fn endpoint(&self) -> String {
format!("eportfolios/{}", self.id)
}
pub async fn delete(&self) -> Result<EPortfolio> {
let mut p: EPortfolio = self.req().delete(&self.endpoint(), &[]).await?;
p.requester = self.requester.clone();
Ok(p)
}
pub fn get_pages(&self) -> PageStream<EPortfolioPage> {
let endpoint = format!("{}/pages", self.endpoint());
PageStream::new(self.req().clone(), &endpoint, vec![])
}
pub async fn moderate(&self, spam_status: &str) -> Result<EPortfolio> {
let params = vec![("spam_status".into(), spam_status.to_string())];
let endpoint = format!("{}/moderate", self.endpoint());
let mut p: EPortfolio = self.req().put(&endpoint, ¶ms).await?;
p.requester = self.requester.clone();
Ok(p)
}
pub async fn restore(&self) -> Result<EPortfolio> {
let endpoint = format!("{}/restore", self.endpoint());
let mut p: EPortfolio = self.req().put(&endpoint, &[]).await?;
p.requester = self.requester.clone();
Ok(p)
}
}