use crate::{
client::Canvas,
error::{CanvasError, Result},
resources::{
account::Account,
course::Course,
params::{course_params::CreateCourseParams, user_params::CreateUserParams},
user::{CurrentUser, User, UserId},
},
};
use tokio::runtime::Runtime;
pub struct CanvasBlocking {
inner: Canvas,
rt: Runtime,
}
impl CanvasBlocking {
pub fn new(base_url: &str, access_token: &str) -> Result<Self> {
let rt = Runtime::new().map_err(CanvasError::Io)?;
let inner = Canvas::new(base_url, access_token)?;
Ok(Self { inner, rt })
}
pub fn with_client(
base_url: &str,
access_token: &str,
client: reqwest::Client,
) -> Result<Self> {
let rt = Runtime::new().map_err(CanvasError::Io)?;
let inner = Canvas::with_client(base_url, access_token, client)?;
Ok(Self { inner, rt })
}
pub fn get_course(&self, course_id: u64) -> Result<Course> {
self.rt.block_on(self.inner.get_course(course_id))
}
pub fn get_courses(&self) -> Result<Vec<Course>> {
self.rt.block_on(self.inner.get_courses().collect_all())
}
pub fn create_course(&self, account_id: u64, params: CreateCourseParams) -> Result<Course> {
self.rt
.block_on(self.inner.create_course(account_id, params))
}
pub fn delete_course(&self, course_id: u64) -> Result<Course> {
self.rt.block_on(self.inner.delete_course(course_id))
}
pub fn get_user(&self, user_id: UserId) -> Result<User> {
self.rt.block_on(self.inner.get_user(user_id))
}
pub fn get_current_user(&self) -> Result<CurrentUser> {
self.rt.block_on(self.inner.get_current_user())
}
pub fn create_user(&self, account_id: u64, params: CreateUserParams) -> Result<User> {
self.rt.block_on(self.inner.create_user(account_id, params))
}
pub fn get_account(&self, account_id: u64) -> Result<Account> {
self.rt.block_on(self.inner.get_account(account_id))
}
pub fn get_accounts(&self) -> Result<Vec<Account>> {
self.rt.block_on(self.inner.get_accounts().collect_all())
}
}