Skip to main content

canvas_lms_api/resources/
group.rs

1use crate::{http::Requester, pagination::PageStream, resources::collaboration::Collaboration};
2use serde::{Deserialize, Serialize};
3use std::sync::Arc;
4
5/// A Canvas group within a course or account.
6#[derive(Debug, Clone, Deserialize, Serialize, canvas_lms_api_derive::CanvasResource)]
7pub struct Group {
8    pub id: u64,
9    pub name: Option<String>,
10    pub description: Option<String>,
11    pub is_public: Option<bool>,
12    pub followed_by_user: Option<bool>,
13    pub join_level: Option<String>,
14    pub members_count: Option<u64>,
15    pub avatar_url: Option<String>,
16    pub course_id: Option<u64>,
17    pub role: Option<String>,
18    pub group_category_id: Option<u64>,
19    pub sis_group_id: Option<String>,
20    pub sis_import_id: Option<u64>,
21    pub storage_quota_mb: Option<u64>,
22    pub permissions: Option<serde_json::Value>,
23
24    #[serde(skip)]
25    pub(crate) requester: Option<Arc<Requester>>,
26}
27
28impl Group {
29    /// Stream all collaborations in this group.
30    ///
31    /// # Canvas API
32    /// `GET /api/v1/groups/:id/collaborations`
33    pub fn get_collaborations(&self) -> PageStream<Collaboration> {
34        let group_id = self.id;
35        PageStream::new_with_injector(
36            Arc::clone(self.req()),
37            &format!("groups/{group_id}/collaborations"),
38            vec![],
39            {
40                let req = Arc::clone(self.req());
41                move |mut c: Collaboration, _| {
42                    c.requester = Some(Arc::clone(&req));
43                    c
44                }
45            },
46        )
47    }
48}