osars 0.3.0

Rust client library for OpenScheduleAPI - educational schedule management system
Documentation
use super::ScheduleQuery;
use crate::models::Week;
use crate::{Client, Group, error::Result};

pub struct GroupsQuery<'a> {
    client: &'a Client,
    campus_id: u32,
    name: Option<String>,
}

impl<'a> GroupsQuery<'a> {
    pub fn new(client: &'a Client, campus_id: u32) -> Self {
        Self {
            client,
            campus_id,
            name: None,
        }
    }

    pub fn name(mut self, name: &str) -> Self {
        self.name = Some(name.to_string());
        self
    }

    pub async fn send(self) -> Result<Vec<Group>> {
        let path = if let Some(name) = self.name {
            format!("/campuses/{}/groups?name={}", self.campus_id, name)
        } else {
            format!("/campuses/{}/groups", self.campus_id)
        };
        self.client.get_json(&path).await
    }

    pub fn group(self, group_id: u32) -> GroupQuery<'a> {
        GroupQuery::new(self.client, group_id)
    }
}

pub struct GroupQuery<'a> {
    client: &'a Client,
    group_id: u32,
}

impl<'a> GroupQuery<'a> {
    pub fn new(client: &'a Client, group_id: u32) -> Self {
        Self { client, group_id }
    }

    pub async fn get(self) -> Result<Group> {
        self.client
            .get_json(&format!("/groups/{}", self.group_id))
            .await
    }

    pub fn schedules(self) -> crate::api::schedules::ScheduleQuery<'a> {
        crate::api::schedules::ScheduleQuery::new(self.client, self.group_id)
    }

    pub fn today(self) -> ScheduleQuery<'a> {
        self.schedules().today()
    }

    pub fn tomorrow(self) -> ScheduleQuery<'a> {
        self.schedules().tomorrow()
    }

    pub fn date(self, date: &str) -> ScheduleQuery<'a> {
        self.schedules().date(date)
    }

    pub fn week(self, week: Week) -> ScheduleQuery<'a> {
        self.schedules().week(week)
    }
}