canvas_lms_api/resources/
group.rs1use crate::{http::Requester, pagination::PageStream, resources::collaboration::Collaboration};
2use serde::{Deserialize, Serialize};
3use std::sync::Arc;
4
5#[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 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}